' =========================================================================
'
'   File....... Random_Servos.BS1
'   Purpose....
'   Author..... Vern Graner (updated by Jon Williams)
'   E-mail.....
'   Started....
'   Updated.... 02 MAY 2005
'
'   {$STAMP BS1}
'   {$PBASIC 1.0}
'
' =========================================================================


' -----[ Program Description ]---------------------------------------------


' -----[ Revision History ]------------------------------------------------


' -----[ I/O Definitions ]-------------------------------------------------

SYMBOL  Servo1          = 0
SYMBOL  Servo2          = 1
SYMBOL  Servo3          = 2
SYMBOL  Servo4          = 3
SYMBOL  Servo5          = 4
SYMBOL  Servo6          = 5


' -----[ Constants ]-------------------------------------------------------


' -----[ Variables ]-------------------------------------------------------

SYMBOL  lottery         = W0                    ' random number
SYMBOL  pos1            = B2                    ' servo postion 1
SYMBOL  dest1           = B3                    ' destination 1
SYMBOL  pos2            = B4
SYMBOL  dest2           = B5
SYMBOL  pos3            = B6
SYMBOL  dest3           = B7
SYMBOL  pos4            = B8
SYMBOL  dest4           = B9
SYMBOL  pos5            = B10
SYMBOL  dest5           = B11
SYMBOL  pos6            = B12
'SYMBOL  dest6           = B13
SYMBOL I                 =B13

' -----[ EEPROM Data ]-----------------------------------------------------


' -----[ Initialization ]--------------------------------------------------

Reset:
  lottery = 1031                                ' seed random generator

  pos1 = 150 : dest1 = 150                      ' initialize servo values
  pos2 = 150 : dest2 = 150
  pos3 = 150 : dest3 = 150
  pos4 = 150 : dest4 = 150
  pos5 = 150 : dest5 = 150
'  pos6 = 150 : dest6 = 150


' -----[ Program Code ]----------------------------------------------------

Main:

' =========
'  Servo 1
' =========

Check_Dest1:
  IF pos1 <> dest1 THEN Update_Pos1             ' are we there yet?
  RANDOM lottery                                ' yep, stir the pot
  dest1 = lottery // 101 + 50                  ' scale to 100 - 200

DEBUG dest1
  FOR I = 1 TO dest1
  PULSOUT Servo1, pos1
  PAUSE 20
NEXT I

  PAUSE 2000

Update_Pos1:
  IF pos1 < dest1 THEN Move_CW1
  pos1 = pos1 - 2


Move_CW1:
  pos1 = pos1 + 1


' =========
'  Servo 2
' =========

Check_Dest2:
  IF pos2 <> dest2 THEN Update_Pos2
  RANDOM lottery
  dest2 = lottery // 101 + 100

Update_Pos2:
  IF pos2 < dest2 THEN Move_CW2
  pos2 = pos2 - 2

Move_CW2:
  pos2 = pos2 + 1


' =========
'  Servo 3
' =========

Check_Dest3:
  IF pos3 <> dest3 THEN Update_Pos3
  RANDOM lottery
  dest3 = lottery // 101 + 100

Update_Pos3:
  IF pos3 < dest3 THEN Move_CW3
  pos3 = pos3 - 2

Move_CW3:
  pos3 = pos3 + 1


' =========
'  Servo 4
' =========

Check_Dest4:
  IF pos4 <> dest4 THEN Update_Pos4
  RANDOM lottery
  dest4 = lottery // 101 + 100

Update_Pos4:
  IF pos4 < dest4 THEN Move_CW4
  pos4 = pos4 - 2

Move_CW4:
  pos4 = pos4 + 1


' =========
'  Servo 5
' =========

Check_Dest5:
  IF pos5 <> dest5 THEN Update_Pos5
  RANDOM lottery
  dest5 = lottery // 101 + 100

Update_Pos5:
  IF pos5 < dest5 THEN Move_CW5
  pos5 = pos5 - 2

Move_CW5:
  pos5 = pos5 + 1


' =========
'  Servo 6
' =========

Check_Dest6:
'  IF pos6 <> dest6 THEN Update_Pos6
  RANDOM lottery
'  dest6 = lottery // 101 + 100

Update_Pos6:
'  IF pos6 < dest6 THEN Move_CW6
  pos6 = pos6 - 2

Move_CW6:
  pos6 = pos6 + 1


Update_Servos:

'FOR I = 1 TO 100
  PULSOUT Servo1, pos1
'  PAUSE 20
'NEXT I


  '  PULSOUT Servo2, pos2
'  PULSOUT Servo3, pos3
'  PULSOUT Servo4, pos4
'  PULSOUT Servo5, pos5
'  PULSOUT Servo6, pos6


Test_Values:
'  DEBUG CLS
'  DEBUG "Pos1 = ",#pos1, "  Dest1 = ",#dest1, CR
'  DEBUG "Pos2 = ",#pos2, "  Dest2 = ",#dest2, CR
'  DEBUG "Pos3 = ",#pos3, "  Dest3 = ",#dest3, CR
'  DEBUG "Pos4 = ",#pos4, "  Dest4 = ",#dest4, CR
'  DEBUG "Pos5 = ",#pos5, "  Dest5 = ",#dest5, CR
'  DEBUG "Pos6 = ",#pos6, "  Dest6 = ",#dest6, CR

  PAUSE 15
  GOTO Main

  END


' -----[ Subroutines ]-----------------------------------------------------