Here is the full code. Your code helped a lot but we had to make some modifictions. In the else statement we removed those sensor codes because the front sensors would not function. We are however having problems with the speed as it backs up. Before when we had it backup without time we had one side spinning faster then the other so it would rotate away from a cliff. Now using your code the speeds will not change when we change the values.
[code]temp var byte
filter var word(10)
ir_right var word
ir_left var word
ir_rear var word
ir_center var word
mote var word
LSpeedBU var word
RSpeedBU var word
BackupCnt var word
BackupCnt = 0
LSpeed var word
RSpeed var word
minspeed con 1650
maxspeed con 1350
stopspeed con 1500
Lspinspeed con 2200
Rspinspeed con 1800
LSpeed = 1500
RSpeed = 1500
low p0
low p1
sound 9, [100\880, 100\988, 100\1046, 100\1175]
main
gosub sensor_check
; Numbers lower than 1500 result in forward direction.
; Numbers higher than 1500 result in reverse direction.
if BackupCnt then
LSpeed = LSPeedBU;
RSpeed = RSpeedBU;
BackupCnt = BackupCnt - 1
else
if (ir_center < 10) then
sound 9, [100\1175]
LSpeed = (LSpeed + ir_center) min Lspinspeed
RSpeed = (RSpeed + ir_center) min Rspinspeed
LSpeedBU = LSpeed
RSpeedBU = RSpeed
BackupCnt = 50 ; we loop about 50 times per second so close to 4 seconds
endif
endif
LSpeed = (LSpeed - 10) min maxspeed ;accelerates the motors
RSpeed = (RSpeed - 10) min maxspeed
LSpeed = (LSpeed + ir_left) max minspeed ;when something is detected, this decelerates the opposite side
RSpeed = (RSpeed + ir_right) max minspeed
if (ir_rear > 10) then
LSpeed = (LSpeed - ir_rear) min maxspeed ;if something is detected behind the robot, accelerates both sides
RSpeed = (RSpeed - ir_rear) min maxspeed
endif
if (mote > 5) then
LSpeed = (LSpeed - mote) min stopspeed ;
RSpeed = (RSpeed - mote) min stopspeed
endif
; Send out the servo pulses
pulsout 0,(LSpeed2) ; Left Sabertooth channel.
pulsout 1,(RSpeed2) ; Right Sabertooth channel.
pause 20
goto main
sensor_check
for temp = 0 to 9
adin 17, filter(temp)
next
ir_right = 0
for temp = 0 to 9
ir_right = ir_right + filter(temp)
next
ir_right = ir_right / 50
for temp = 0 to 9
adin 18, filter(temp)
next
ir_left = 0
for temp = 0 to 9
ir_left = ir_left + filter(temp)
next
ir_left = ir_left / 50
for temp = 0 to 9
adin 19, filter(temp)
next
ir_rear = 0
for temp = 0 to 9
ir_rear = ir_rear + filter(temp)
next
ir_rear = ir_rear / 50
for temp = 0 to 9
adin 3, filter(temp)
next
mote = 0
for temp = 0 to 5
mote = mote + filter(temp)
next
mote = mote / 20
for temp = 0 to 9
adin 2, filter(temp)
next
ir_center = 0
for temp = 0 to 9
ir_center = ir_center + filter(temp)
next
ir_center = ir_center / 75
serout s_out,i38400,"ir_right - ", dec ir_right, " ir_left - ", dec ir_left, " ir_rear - ", dec ir_rear, "LSpeed - ", dec LSpeed, " RSpeed - ", dec RSpeed, 13]
return[/code]