November 22, 2024, 05:30:01 AM

News:

You can now use Vixen to program your Prop-1 and Prop-2 controllers!  Get started quickly and easily, without having to learn PBASIC.  Details in the Library forum.


DAvis graveyard animated gravedigger Basic stamp

Started by vincecamerano, August 26, 2010, 05:09:46 PM

Previous topic - Next topic

vincecamerano

Hey everyone,

I'm very excited to have my first EFX prop controller and it is working great!! I was wondering how i could take this STAMP code and make the movements of the servo faster?

vincecamerano


JackMan

Add a STEP value greater than 1 to the end of the "FOR pos =" commands.
Example:
FOR pos = 150 TO 170 STEP 2

When the start value is greater than the end value the STEP value needs a minus sign (-) in front of it.
Example:
FOR pos = 170 TO 130 STEP -2

vincecamerano

Thanks that worked great!

Also, would anyone have any recommendations to make this code better? Anything I should add?

JonnyMac

I don't know that this version is better, though I believe it is more reliable.  You see, servos need to be refreshed every 20 milliseconds (50x per second) or else they can move on you.  The original program has long pauses with no servo refreshing, and with the servos under load they can drift and misbehave.

This version corrects that problem by constantly refreshing both servos; it also corrects a math error for one of the long delays.

Note that I think it is best to control servo speed in the Servo_Speed subroutine instead of in the movement loops; by skipping position steps you *could* create a jumpy movement.

' davis_gravedigger_redux.bs1
' -- updated by Jon Williams
'
' {$STAMP BS1}
' {$PBASIC 1.0}


'-----[ Constants ]-------------------------------------------------------

SYMBOL  Servo1           = 0                    ' turn
SYMBOL  Servo2           = 1                    ' lift


' -----[ Variables ]-------------------------------------------------------

SYMBOL  pos1            = B2                    ' servo 1 position
SYMBOL  pos2            = B3
SYMBOL  idx             = B4                    ' loop controller
SYMBOL  seconds         = B5                    ' for delays

SYMBOL  lottery         = W5                    ' random number


' -----[ Initialization ]--------------------------------------------------

Reset:
 LOW Servo1                                    ' setup servo pins
 LOW Servo2
 lottery = 1031                                ' Seed the random number

 pos1 = 150                                    ' start centered
 pos2 = 170                                    ' start lowered


' -----[ Program Code ]----------------------------------------------------

Main:
 GOSUB Raise_Head
 GOSUB Turn
 GOSUB Lower_Head
 GOTO Main


' -----[ Subroutines ]-----------------------------------------------------

Raise_Head:
 FOR pos2 = 170 TO 140 STEP -1                 ' lift head
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds = lottery // 5 + 1                    ' 1 to 5s
 GOSUB Servo_Pause

 RETURN

' -------------------------------------------------------------------------

Lower_Head:
 FOR pos2 = 140 TO 170                         ' lower the head
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds = lottery // 180 + 1                  ' 1 to 180s
 GOSUB Servo_Pause

 RETURN

' -------------------------------------------------------------------------

Turn:
 FOR pos1 = 150 TO 170                         ' turn to left
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds =  lottery // 5 + 1                   ' hold 1 to 5s
 GOSUB Servo_Pause

 FOR pos1 = 170 TO 130 STEP -1                 ' turn to right
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds =  lottery // 5 + 1                   ' hold 1 to 5s
 GOSUB Servo_Pause

 FOR pos1 = 130 TO 150                         ' back to center
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds =  lottery // 5 + 1                   ' hold 1 to 5s
 GOSUB Servo_Pause

 RETURN

' -------------------------------------------------------------------------

' refresh servos
' -- change loop end value to affect speed
'    (smaller end [must be at least 1] to move faster)

Servo_Speed:
 FOR idx = 1 TO 10                             ' control servo speed
   PULSOUT Servo1, pos1
   PULSOUT Servo2, pos2
   PAUSE 17
 NEXT
 RETURN

' -------------------------------------------------------------------------

' pause for n seconds while refreshing servos

Servo_Pause:
 IF seconds = 0 THEN SP_Exit                   ' done?
   FOR idx = 1 TO 50                           ' create 1s delay
     PULSOUT Servo1, pos1                      '   while refreshing servos
     PULSOUT Servo2, pos2
     PAUSE 17
   NEXT
   seconds = seconds - 1
   GOTO Servo_Pause

SP_Exit:
 RETURN
Jon McPhalen
EFX-TEK Hollywood Office

JonnyMac

Here's another variant on the code above that:
-- moves servo refreshing to one place (better if you wan to add another servo)
-- simplifies the variable delay; you specify times (min and max) and call Rnd_Pause

' davis_gravedigger_redux.bs1
' -- updated by Jon Williams
'
' {$STAMP BS1}
' {$PBASIC 1.0}


'-----[ Constants ]-------------------------------------------------------

SYMBOL  Servo1           = 0                    ' turn
SYMBOL  Servo2           = 1                    ' lift


' -----[ Variables ]-------------------------------------------------------

SYMBOL  pos1            = B2                    ' servo 1 position
SYMBOL  pos2            = B3                    ' servo 1 position
SYMBOL  idx             = B4                    ' loop controller
SYMBOL  seconds         = B5                    ' for delays
SYMBOL  tMin            = B6                    ' minimum delay (secs)
SYMBOL  tMax            = B7                    ' maximum delay (secs)

SYMBOL  lottery         = W5                    ' random number


' -----[ Initialization ]--------------------------------------------------

Reset:
 LOW Servo1                                    ' setup servo pins
 LOW Servo2
 lottery = 1031                                ' Seed the random number

 pos1 = 150                                    ' start centered
 pos2 = 170                                    ' start lowered


' -----[ Program Code ]----------------------------------------------------

Main:
 GOSUB Raise_Head
 GOSUB Turn
 GOSUB Lower_Head
 GOTO Main


' -----[ Subroutines ]-----------------------------------------------------

Raise_Head:
 FOR pos2 = 170 TO 140 STEP -1                 ' lift head
   GOSUB Servo_Speed
 NEXT

 tMin = 1                                      ' setup delay
 tMax = 5
 GOSUB Rnd_Pause

 RETURN

' -------------------------------------------------------------------------

Lower_Head:
 FOR pos2 = 140 TO 170                         ' lower the head
   GOSUB Servo_Speed
 NEXT

 tMin = 10                                     ' setup delay
 tMax = 180
 GOSUB Rnd_Pause

 RETURN

' -------------------------------------------------------------------------

Turn:
 FOR pos1 = 150 TO 170                         ' turn to left
   GOSUB Servo_Speed
 NEXT

 tMin = 1                                      ' setup delay
 tMax = 5
 GOSUB Rnd_Pause

 FOR pos1 = 170 TO 130 STEP -1                 ' turn to right
   GOSUB Servo_Speed
 NEXT

 tMin = 1                                      ' setup delay
 tMax = 5
 GOSUB Rnd_Pause

 FOR pos1 = 130 TO 150                         ' back to center
   GOSUB Servo_Speed
 NEXT

 tMin = 1                                      ' setup delay
 tMax = 5
 GOSUB Rnd_Pause

 RETURN

' -------------------------------------------------------------------------

' refresh servos
' -- change loop end value to affect speed
'    (smaller end [must be at least 1] to move faster)

Servo_Speed:
 FOR idx = 1 TO 10                             ' control servo speed
   GOSUB Refresh_Servos
 NEXT
 RETURN

' -------------------------------------------------------------------------

' creates random pause between tMin and tMax
' -- times expressed in seconds
' -- drops through to Servo_Pause

Rnd_Pause:
 RANDOM lottery                                ' stir random #
 seconds = tMax - tMin + 1                     ' calculate span for //
 seconds = lottery // seconds + tMin           ' randomize period

 ' fall through to Servo_Pause for delay

' -------------------------------------------------------------------------

' pause for n seconds while refreshing servos

Servo_Pause:
 IF seconds = 0 THEN SP_Exit                   ' done?
   FOR idx = 1 TO 50                           ' create 1s delay
     GOSUB Refresh_Servos                      '   while refreshing servos
   NEXT
   seconds = seconds - 1
   GOTO Servo_Pause

SP_Exit:
 RETURN

' -------------------------------------------------------------------------

' refresh servos at current positions
' -- uses ~20ms

Refresh_Servos:
 PULSOUT Servo1, pos1
 PULSOUT Servo2, pos2
 PAUSE 17
 RETURN
Jon McPhalen
EFX-TEK Hollywood Office

JonnyMac

On last version -- this one adds a trigger;  the time delay after the head is lowered is reduced since the unit is triggered by a human (use PIR or mat switch connected to P6).

Note: I ran out of GOSUBs so I had to get rid of the Refresh_Servos subroutine.  Sometimes this happens with complex programs on a small controller like the Prop-1.

' davis_gravedigger_redux.bs1
' -- updated by Jon Williams
'
' {$STAMP BS1}
' {$PBASIC 1.0}


'-----[ Constants ]-------------------------------------------------------

SYMBOL  Trigger         = PIN6                  ' SETUP = DN

SYMBOL  Servo1          = 0                     ' neck
SYMBOL  Servo2          = 1                     ' lift


' -----[ Variables ]-------------------------------------------------------

SYMBOL  pos1            = B2                    ' servo 1 position
SYMBOL  pos2            = B3                    ' servo 1 position
SYMBOL  idx             = B4                    ' loop controller
SYMBOL  seconds         = B5                    ' for delays
SYMBOL  tMin            = B6                    ' minimum delay (secs)
SYMBOL  tMax            = B7                    ' maximum delay (secs)

SYMBOL  lottery         = W5                    ' random number


' -----[ Initialization ]--------------------------------------------------

Reset:
  LOW Servo1                                    ' setup servo pins
  LOW Servo2
  lottery = 1031                                ' Seed the random number

  pos1 = 150                                    ' start centered
  pos2 = 170                                    ' start lowered


' -----[ Program Code ]----------------------------------------------------

Main:
  idx = 0

Check_Trigger:
  PULSOUT Servo1, pos1                          ' refresh servos
  PULSOUT Servo2, pos2
  PAUSE 17

  idx = idx + 20 * Trigger                      ' debounce input
  IF idx < 150 THEN Check_Trigger

  GOSUB Raise_Head                              ' run sequence
  GOSUB Turn
  GOSUB Lower_Head

  GOTO Main


' -----[ Subroutines ]-----------------------------------------------------

Raise_Head:
  FOR pos2 = 170 TO 140 STEP -1                 ' lift head
    GOSUB Servo_Speed
  NEXT

  tMin = 1                                      ' setup delay
  tMax = 5
  GOSUB Rnd_Pause

  RETURN

' -------------------------------------------------------------------------

Lower_Head:
  FOR pos2 = 140 TO 170                         ' lower the head
    GOSUB Servo_Speed
  NEXT

  tMin = 10                                     ' setup delay
  tMax = 30
  GOSUB Rnd_Pause

  RETURN

' -------------------------------------------------------------------------

Turn:
  FOR pos1 = 150 TO 170                         ' turn to left
    GOSUB Servo_Speed
  NEXT

  tMin = 1                                      ' setup delay
  tMax = 5
  GOSUB Rnd_Pause

  FOR pos1 = 170 TO 130 STEP -1                 ' turn to right
    GOSUB Servo_Speed
  NEXT

  tMin = 1                                      ' setup delay
  tMax = 5
  GOSUB Rnd_Pause

  FOR pos1 = 130 TO 150                         ' back to center
    GOSUB Servo_Speed
  NEXT

  tMin = 1                                      ' setup delay
  tMax = 5
  GOSUB Rnd_Pause

  RETURN

' -------------------------------------------------------------------------

' refresh servos
' -- change loop end value to affect speed
'    (smaller end [must be at least 1] to move faster)

Servo_Speed:
  FOR idx = 1 TO 10                             ' control servo speed
    PULSOUT Servo1, pos1
    PULSOUT Servo2, pos2
    PAUSE 17
  NEXT
  RETURN

' -------------------------------------------------------------------------

' creates random pause between tMin and tMax
' -- times expressed in seconds
' -- drops through to Servo_Pause

Rnd_Pause:
  RANDOM lottery                                ' stir random #
  seconds = tMax - tMin + 1                     ' calculate span for //
  seconds = lottery // seconds + tMin           ' randomize period

  ' fall through to Servo_Pause for delay

' -------------------------------------------------------------------------

' pause for n seconds while refreshing servos

Servo_Pause:
  IF seconds = 0 THEN SP_Exit                   ' done?
    FOR idx = 1 TO 50                           ' create 1s delay
      PULSOUT Servo1, pos1                      '  while refreshing servos
      PULSOUT Servo2, pos2
      PAUSE 17
    NEXT
    seconds = seconds - 1
    GOTO Servo_Pause

SP_Exit:
  RETURN
Jon McPhalen
EFX-TEK Hollywood Office

vincecamerano

First off... Thank you sooo much for all the help! This is working easier the I expected. I was wondering if i could add these two codes together? I have the one you supplied me and one that i fiddled with to make the movements faster. I would like to use both of them and have the code randomly choose between both codes back and forth.

' {$STAMP BS1}
' {$PBASIC 1.0}
'-----[ Constants ]-------------------------------------------------------

SYMBOL  Servo1           = 0
SYMBOL  Servo2           = 1

' -----[ Variables ]-------------------------------------------------------

SYMBOL  pos             = B5                    ' incrementor
SYMBOL  idx             = B6
SYMBOL  last            = B7
SYMBOL  Servo           = B8
SYMBOL  lottery         = W0                    ' random number
SYMBOL  seconds         = W1

' -----[ Initialization ]--------------------------------------------------
Reset:
  LOW Servo1
  LOW Servo2
  lottery = 1031                              ' Seed the random number
  Servo = Servo2

' -----[ Program Code ]----------------------------------------------------

Main:
  GOTO raisehead

turn:
  Servo = Servo1

  FOR pos = 150 TO 205 STEP 5
      GOSUB slowdown
  NEXT
  'turn left from center
  RANDOM lottery
  seconds =  lottery // 5 * 1000
  PAUSE seconds

  FOR pos = 170 TO 125 STEP -6
      GOSUB slowdown
  NEXT
'turn all the way to the right
  RANDOM lottery
  seconds =  lottery // 5 * 1000
  PAUSE seconds

  FOR pos = 135 TO 150 STEP 2
    GOSUB slowdown
  NEXT
' turn to center from the right
  RANDOM lottery
  seconds =  lottery // 5 * 1000
  PAUSE seconds
  GOTO lowerhead

raisehead:
  FOR pos = 170 TO 140 STEP -10                  ' lift the head
    GOSUB slowdown
  NEXT
  RANDOM lottery
  seconds =  lottery // 5 * 1000       ' pause a few seconds
  PAUSE seconds
  GOTO turn

lowerhead:
  Servo = Servo2
  FOR pos = 150 TO 170      'lower the head
   GOSUB slowdown
  NEXT
  RANDOM lottery
  seconds =  lottery // 3 + 1 * 60 * 500      'wait a while before doing it again
  PAUSE seconds
  GOTO main

slowdown:
    FOR idx = 1 TO 10
      PULSOUT Servo, pos
      PAUSE 18
    NEXT
RETURN
END
' -----[ Subroutines ]-----------------------------------------------------






' davis_gravedigger_redux.bs1
' -- updated by Jon Williams
'
' {$STAMP BS1}
' {$PBASIC 1.0}


'-----[ Constants ]-------------------------------------------------------

SYMBOL  Servo1           = 0                    ' turn
SYMBOL  Servo2           = 1                    ' lift


' -----[ Variables ]-------------------------------------------------------

SYMBOL  pos1            = B2                    ' servo 1 position
SYMBOL  pos2            = B3
SYMBOL  idx             = B4                    ' loop controller
SYMBOL  seconds         = B5                    ' for delays

SYMBOL  lottery         = W5                    ' random number


' -----[ Initialization ]--------------------------------------------------

Reset:
  LOW Servo1                                    ' setup servo pins
  LOW Servo2
  lottery = 1031                                ' Seed the random number

  pos1 = 150                                    ' start centered
  pos2 = 170                                    ' start lowered


' -----[ Program Code ]----------------------------------------------------

Main:
  GOSUB Raise_Head
  GOSUB Turn
  GOSUB Lower_Head
  GOTO Main


' -----[ Subroutines ]-----------------------------------------------------

Raise_Head:
  FOR pos2 = 170 TO 140 STEP -1                 ' lift head
    GOSUB Servo_Speed
  NEXT

  RANDOM lottery
  seconds = lottery // 5 + 1                    ' 1 to 5s
  GOSUB Servo_Pause

  RETURN

' -------------------------------------------------------------------------

Lower_Head:
  FOR pos2 = 140 TO 170                         ' lower the head
    GOSUB Servo_Speed
  NEXT

  RANDOM lottery
  seconds = lottery // 180 + 1                  ' 1 to 180s
  GOSUB Servo_Pause

  RETURN

' -------------------------------------------------------------------------

Turn:
  FOR pos1 = 150 TO 170                         ' turn to left
    GOSUB Servo_Speed
  NEXT

  RANDOM lottery
  seconds =  lottery // 5 + 1                   ' hold 1 to 5s
  GOSUB Servo_Pause

  FOR pos1 = 170 TO 130 STEP -1                 ' turn to right
    GOSUB Servo_Speed
  NEXT

  RANDOM lottery
  seconds =  lottery // 5 + 1                   ' hold 1 to 5s
  GOSUB Servo_Pause

  FOR pos1 = 130 TO 150                         ' back to center
    GOSUB Servo_Speed
  NEXT

  RANDOM lottery
  seconds =  lottery // 5 + 1                   ' hold 1 to 5s
  GOSUB Servo_Pause

  RETURN

' -------------------------------------------------------------------------

' refresh servos
' -- change loop end value to affect speed
'    (smaller end [must be at least 1] to move faster)

Servo_Speed:
  FOR idx = 1 TO 10                             ' control servo speed
    PULSOUT Servo1, pos1
    PULSOUT Servo2, pos2
    PAUSE 17
  NEXT
  RETURN

' -------------------------------------------------------------------------

' pause for n seconds while refreshing servos

Servo_Pause:
  IF seconds = 0 THEN SP_Exit                   ' done?
    FOR idx = 1 TO 50                           ' create 1s delay
      PULSOUT Servo1, pos1                      '   while refreshing servos
      PULSOUT Servo2, pos2
      PAUSE 17
    NEXT
    seconds = seconds - 1
    GOTO Servo_Pause

SP_Exit:
  RETURN









JonnyMac

I'm a pretty good programmer, but I don't work well merging projects together when I don't know your version of the end result.  Just explain to me what you want and I'll code it (someone else may jump in, too).

The thing is, my rewrite of Jeff's program shouldn't behave differently; I've just re-coded it so that the servos get updated as they want to so that they can hold position under load.
Jon McPhalen
EFX-TEK Hollywood Office

vincecamerano

This is what I was hoping the servos would do.

The first code I copied in my last reply was the one i configured. I made the servos move slightly faster. The second code that you modified moves the servos slower. I was wondering how i could make it so sometimes the head moves slightly faster (my code) and sometimes in moves slower (your code).. There isn't a way to load both codes in stamp and have it randomly choose between the two?

thanks again for all your help!
Vince

JackMan

No, you can't load both programs. There may be a way to configure the STEP values to be random, Jon would know if it's possible.

JonnyMac

And there's no need -- the speed is controlled in one place.  As I suggested above, you should control the movement speed in the Servo_Speed routine, not by changing the movement loops (STEP value) in the main code (do this too much can make the moves "jumpy").  I know it works, but I don't think it's the best approach.

In this version I randomize the movement speed every time the Servo_Speed routine is called; this should give you a more interesting look.

' davis_gravedigger_redux.bs1
' -- updated by Jon Williams
'
' {$STAMP BS1}
' {$PBASIC 1.0}


'-----[ Constants ]-------------------------------------------------------

SYMBOL  Servo1           = 0                    ' turn
SYMBOL  Servo2           = 1                    ' lift


' -----[ Variables ]-------------------------------------------------------

SYMBOL  pos1            = B2                    ' servo 1 position
SYMBOL  pos2            = B3
SYMBOL  idx             = B4                    ' loop controller
SYMBOL  seconds         = B5                    ' for delays
SYMBOL  throttle        = B6                    ' controls speed

SYMBOL  lottery         = W5                    ' random number


' -----[ Initialization ]--------------------------------------------------

Reset:
 LOW Servo1                                    ' setup servo pins
 LOW Servo2
 lottery = 1031                                ' Seed the random number

 pos1 = 150                                    ' start centered
 pos2 = 170                                    ' start lowered


' -----[ Program Code ]----------------------------------------------------

Main:
 GOSUB Raise_Head
 GOSUB Turn
 GOSUB Lower_Head
 GOTO Main


' -----[ Subroutines ]-----------------------------------------------------

Raise_Head:
 FOR pos2 = 170 TO 140 STEP -1                 ' lift head
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds = lottery // 5 + 1                    ' 1 to 5s
 GOSUB Servo_Pause

 RETURN

' -------------------------------------------------------------------------

Lower_Head:
 FOR pos2 = 140 TO 170                         ' lower the head
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds = lottery // 180 + 1                  ' 1 to 180s
 GOSUB Servo_Pause

 RETURN

' -------------------------------------------------------------------------

Turn:
 FOR pos1 = 150 TO 170                         ' turn to left
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds =  lottery // 5 + 1                   ' hold 1 to 5s
 GOSUB Servo_Pause

 FOR pos1 = 170 TO 130 STEP -1                 ' turn to right
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds =  lottery // 5 + 1                   ' hold 1 to 5s
 GOSUB Servo_Pause

 FOR pos1 = 130 TO 150                         ' back to center
   GOSUB Servo_Speed
 NEXT

 RANDOM lottery
 seconds =  lottery // 5 + 1                   ' hold 1 to 5s
 GOSUB Servo_Pause

 RETURN

' -------------------------------------------------------------------------

' refresh servos
' -- randomizes 'throttle' to control speed

Servo_Speed:
 RANDOM lottery                                ' re-stir random #
 throttle = lottery // 5 + 6                   ' throttle is 6 to 10

 FOR idx = 1 TO throttle                       ' control servo speed
   PULSOUT Servo1, pos1
   PULSOUT Servo2, pos2
   PAUSE 17
 NEXT
 RETURN

' -------------------------------------------------------------------------

' pause for n seconds while refreshing servos

Servo_Pause:
 IF seconds = 0 THEN SP_Exit                   ' done?
   FOR idx = 1 TO 50                           ' create 1s delay
     PULSOUT Servo1, pos1                      '   while refreshing servos
     PULSOUT Servo2, pos2
     PAUSE 17
   NEXT
   seconds = seconds - 1
   GOTO Servo_Pause

SP_Exit:
 RETURN
Jon McPhalen
EFX-TEK Hollywood Office

bsnut

August 28, 2010, 12:09:52 PM #12 Last Edit: August 28, 2010, 12:25:26 PM by bsnut
Here is an idea for you. Use a pot to control the speed of the servos and here's how it works.

When the pot is at its minimum position(CCW) you will get minimum speed of the servos and at maximum position(CW) it can switch to a random speed of the servos that Jon did for you. Random speed control will come into play when the pot is around 3/4 turned to the CW position.

This is one of the ways to bring two programs together and control the fine tuning of the servo speed. You use your own pot or get the EZ3 from Jon.

If you want I or someone else can code it for you.
William Stefan
The Basic Stamp Nut

vincecamerano

Ok so we finally got our gravedigger built, mounted the head, servos etc. I attached a photo below!!! 

We are extremely happy with the movements and have a couple fixes that we need some help with. We were hoping to have the cycle sorted out like this.

Raise head - turn left - turn right - turn left - turn right - back to middle - lower head - raise head - turn right - turn left - back to middle - lower head..... After this cycle we'd like a random wait no longer than 3 min. Also each time the head moves to a new position could it be a different speed? I know this is a lot, but we no absolutely nothing about coding and would realllllllly appreciate some help! Please feel free to add any suggestions and thanks again so so much!!!!


bsnut

I have some questions for you.
1. Do like the last program that Jon did for you? If yes, I can add in what you are looking for with no problem.

2. Do want this to be ran as part of Initialization part of the program, which would start every the prop1 reset or powered up?
QuoteRaise head - turn left - turn right - turn left - turn right - back to middle - lower head - raise head - turn right - turn left - back to middle - lower head.....

3. Do you want my idea that I suggested to you, which would aloud you to select different speeds or select a random speed mode or we can have a test mode that would this?
QuoteRaise head - turn left - turn right - turn left - turn right - back to middle - lower head - raise head - turn right - turn left - back to middle - lower head.....
William Stefan
The Basic Stamp Nut