Problem with this code for BoeBot
Hi, i'm building an IR boe bot but i'm having problems with the code.
The robot is actually moving in spurts, i think that there's a problem between the pulses.
Can anyone help me to fix it?
Thank you
The robot is actually moving in spurts, i think that there's a problem between the pulses.
' {$STAMP BS2}
' {$PBASIC 2.5}
irDetectLeft VAR Bit ' Variable Declarations
irDetectRight VAR Bit
pulseLeft VAR Word
pulseRight VAR Word
pulseCount VAR Byte
timeleft VAR Word
timeright VAR Word
average VAR Word
difference VAR Word
FREQOUT 4, 2000, 3000
GOSUB forward_Pulse
DO
GOSUB test_photoresistors
GOSUB average_and_difference
GOSUB navigate
LOOP
test_photoresistors:
HIGH 5
PAUSE 3
RCTIME 5,1,timeleft
HIGH 0
PAUSE 3
RCTIME 0,1,timeright
DEBUG HOME, "timeright =· ", DEC5 timeright ," timeleft =· ", DEC5 timeleft
RETURN
average_and_difference:
average = timeright + timeleft / 2
difference = average / 6
RETURN
navigate:
FREQOUT 10, 1, 38500
irDetectLeft = IN11
FREQOUT 3, 1, 38500
irDetectRight = IN4
IF (timeleft < 300) THEN
PULSOUT 13, 750
PULSOUT 12, 0
PAUSE 10
ELSEIF (irDetectLeft = 0) AND (irDetectRight = 0) THEN
pulseLeft = 650
pulseRight = 850
ELSEIF (irDetectLeft = 0) THEN
DEBUG "Right"
pulseLeft = 1300
pulseRight = 1300
ELSEIF (irDetectRight = 0) THEN
DEBUG "left"
pulseLeft = 650
pulseRight = 650
ELSE
DEBUG "Forward"
pulseLeft = 850
pulseRight = 650
ENDIF
PULSOUT 13,pulseLeft
PULSOUT 12,pulseRight
PAUSE 15
'Sub routine
Forward_Pulse:
PULSOUT 13,850
PULSOUT 12,650
PAUSE 20
Can anyone help me to fix it?
Thank you

Comments
The Navigate subroutine is also missing a return statement after the pause 15.
Without return statements, the code jumps back to the beginning after it gets to the last line. This restarts the program. That's probably why you see twitches instead of continuous motion.
Also, since the Navigate subroutine is setting up pulseLeft and pulseRight values for a couple pulseout commands, this if block should also set values of pulseLeft and pulseRight. Make sure that they are in the 650 to 850 range. The value of 0 is not valid for pulseout going to servos.
IF(timeleft < 300)
PULSOUT 13, 750
PULSOUT 12, 0
PAUSE 10