( ADC_step_clock)
( Control of stepper by potentiometer via ADC)

( If ADC<512 go A/clock by 512-v pulses)

0 VARIABLE last_value  ( difference from zero of 512)

DECIMAL
: setup_both
    init_motors vvfast ADCsetup_general 1 7 GPWrMode  DECIMAL ;

: ADCstepper
   read_adc  ( ..... v)  ( DUP ." v= " . KEY DROP)
   0 1023 confine         DUP ." v= " . ( KEY DROP)
   DUP 512 -             ( v,v-512....)
   DUP last_value @ -    ( v,v-512,dv...)     
    DUP ." diffce= " .  ( KEY DROP)
   DUP 0< 0=             ( v,v-512,dv...)
   IF                    ( v,v-512,dv...)
    ABS  ( DUP  ." # pulses+ = " .  KEY DROP)
    10 /
    DUP 0 > IF nhc ELSE DROP ENDIF            ( v,v-512...)
   ELSE
    ABS ( DUP  ." # pulses- = " . KEY DROP)
    10 / 
    DUP 0 > IF nhac ELSE DROP ENDIF           ( v,v-512...)
   ENDIF
   last_value ! DROP
  ." last value = " last_value ? CR ( KEY  DROP)
;

: ADCcontrol
   setup_both
   read_adc ( 0 1023 confine)
   5 adc_wait            DUP ." v0= " . 
   50 0 DO
    ADCstepper
    50 adc_wait
   LOOP ;


DECIMAL
( vary speed - 1 direction only)
: calc_dT
   100000 SWAP 40 * - dT ! ;

: ADC_speed_motor
   setup_both
   fast
   500 0 DO
     read_adc  0 1023 confine    ( DUP ." v= " .)
     calc_dT
     dT @ 95000 < 
     IF half_step_clock ELSE 50 adc_wait ENDIF
   LOOP ;