Hello, I am getting close to having a rowing sequence worked out for my project, a 1/6 scale McKenzie river drifboat. However I am dogged by a smaller problem. Though I am using identical servo, two pairs, one of each pair, the second. The other two servos go smoothly from one end to the other. in each sequence in my code, always "hesitates" about two thirds of the way on the forward move before go fully into position. I have tried varying pause and speed, does not seem to make a difference, except hat at very low speed the stoke is much reduced. Here is the code. In summary: in the Avtoute routine servo 1 works fine, servo 2 hesitates on the servo2p command but works OK on servo2n. If I also enable servo 3 and 4 servo 4 will have the exact same problem. Here is a youtube short film. Rowbot test
Here is the code, please look at avtoute and Artoute subroutines.
Thanks for your help.
Symbol servo1 = 63 'servo 1 base register, servo 1 and 3 move oars up/down
Symbol Servo1p = 84 'Servo 1 positive offset register
Symbol Servo1n = 105 'servo1 negative offset register
Symbol Servo2 = 64 'servo 2 base register, servo 2 and 4 move oars back/forth
Symbol Servo2p = 85 'Servo 2 positive offset register
Symbol Servo2n = 106 'servo2 negative offset register
symbol servo3 = 65
symbol servo3p = 86
symbol servo3n = 107
symbol servo4 = 66
symbol servo4p = 87
symbol servo4n = 108
;symbol servo5 = 67
;symbol servo5p = 88
;symbol servo5n = 109
symbol Speed = 30 ;medium slow speed
symbol base = 120
symbol Offset = 50 '+/- 50 from center position
w0 = 0
w1 = 0
ProgStart:
i2cslave $c2,i2cslow, i2cbyte 'setup i2c port for servo controller
hi2cout 126,(90) ;memorize power up position
hi2cout 0, (100) ;faster speed for up/down movement
hi2cout 3, (speed)
hi2cout 6, (100) ;faster speed for up/down movement
hi2cout 9, (speed)
MainLoop:
hi2cout servo1,(base) ;all servos center position
hi2cout servo2, (base)
hi2cout servo3, (base)
hi2cout servo4, (base)
pulsin C.6,1,w0 ;go forward
if w0 > 165 then
goto Avtoute
Endif
if w0 < 135 then ;reverse
goto Artoute
Endif
;pulsin C.7,1,w1 ;left turn
;if w1 > 165 then
;goto Virgauche
;endif
;if w1 < 135 then ;right turn
;goto Virdroite
;endif
Goto Mainloop
Avtoute: ;all servos synchronize to row forward
hi2cout servo1n,(offset)
;hi2cout servo3n,(offset)
Pause 400
hi2cout servo2p, (offset)
;hi2cout servo4p, (offset)
pause 800
hi2cout servo1p, (offset)
;hi2cout servo3p, (offset)
pause 400
hi2cout servo2n, (offset)
;hi2cout servo4n, (offset)
pause 800
Goto Mainloop
Artoute: ;all servos synchronize to row backwards
hi2cout servo1n,(offset)
;hi2cout servo3n,(offset)
Pause 400
hi2cout servo2n, (offset)
;hi2cout servo4n, (offset)
pause 800
hi2cout servo1p, (offset)
;hi2cout servo3p, (offset)
pause 400
hi2cout servo2p, (offset)
;hi2cout servo4p, (offset)
pause 800
Goto Mainloop
Here is the code, please look at avtoute and Artoute subroutines.
Thanks for your help.
Symbol servo1 = 63 'servo 1 base register, servo 1 and 3 move oars up/down
Symbol Servo1p = 84 'Servo 1 positive offset register
Symbol Servo1n = 105 'servo1 negative offset register
Symbol Servo2 = 64 'servo 2 base register, servo 2 and 4 move oars back/forth
Symbol Servo2p = 85 'Servo 2 positive offset register
Symbol Servo2n = 106 'servo2 negative offset register
symbol servo3 = 65
symbol servo3p = 86
symbol servo3n = 107
symbol servo4 = 66
symbol servo4p = 87
symbol servo4n = 108
;symbol servo5 = 67
;symbol servo5p = 88
;symbol servo5n = 109
symbol Speed = 30 ;medium slow speed
symbol base = 120
symbol Offset = 50 '+/- 50 from center position
w0 = 0
w1 = 0
ProgStart:
i2cslave $c2,i2cslow, i2cbyte 'setup i2c port for servo controller
hi2cout 126,(90) ;memorize power up position
hi2cout 0, (100) ;faster speed for up/down movement
hi2cout 3, (speed)
hi2cout 6, (100) ;faster speed for up/down movement
hi2cout 9, (speed)
MainLoop:
hi2cout servo1,(base) ;all servos center position
hi2cout servo2, (base)
hi2cout servo3, (base)
hi2cout servo4, (base)
pulsin C.6,1,w0 ;go forward
if w0 > 165 then
goto Avtoute
Endif
if w0 < 135 then ;reverse
goto Artoute
Endif
;pulsin C.7,1,w1 ;left turn
;if w1 > 165 then
;goto Virgauche
;endif
;if w1 < 135 then ;right turn
;goto Virdroite
;endif
Goto Mainloop
Avtoute: ;all servos synchronize to row forward
hi2cout servo1n,(offset)
;hi2cout servo3n,(offset)
Pause 400
hi2cout servo2p, (offset)
;hi2cout servo4p, (offset)
pause 800
hi2cout servo1p, (offset)
;hi2cout servo3p, (offset)
pause 400
hi2cout servo2n, (offset)
;hi2cout servo4n, (offset)
pause 800
Goto Mainloop
Artoute: ;all servos synchronize to row backwards
hi2cout servo1n,(offset)
;hi2cout servo3n,(offset)
Pause 400
hi2cout servo2n, (offset)
;hi2cout servo4n, (offset)
pause 800
hi2cout servo1p, (offset)
;hi2cout servo3p, (offset)
pause 400
hi2cout servo2p, (offset)
;hi2cout servo4p, (offset)
pause 800
Goto Mainloop