Stumped by SumoBot
I'm working on building a small conveyor system using a cannibalized SumoBot but will admit that I am absolutely terrible at programming. I thought I was on track but am totally stumped.
The idea is to use one fixed roller and one servo to drive a conveyor belt. I want the conveyor to activate when IR Sensor # 1 is tripped and deactivate when IR Sensor # 2 is tripped.
If anyone can point out where I'm going wrong it would be much appreciated.
The idea is to use one fixed roller and one servo to drive a conveyor belt. I want the conveyor to activate when IR Sensor # 1 is tripped and deactivate when IR Sensor # 2 is tripped.
If anyone can point out where I'm going wrong it would be much appreciated.
' Conveyor Test.BS2 ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ I/O Definitions ]------------------------------------------------- RMotor PIN 12 ' right servo motor LfIrOut PIN 4 ' left IR LED output LfIrIn PIN 11 ' left IR sensor input RtIrOut PIN 15 ' right IR LED output RtIrIn PIN 14 ' right IR sensor input ' -----[ Constants ]------------------------------------------------------- LED CON 0 ' defines LED constant RFWD CON 700 ' sets RFWD speed for RMotor RSTOP CON 750 ' sets stop point for RMotor ' -----[ Variables ]------------------------------------------------------- irBits VAR Nib ' storage for IR target data irLeft VAR irBits.BIT1 irRight VAR irBits.BIT0 ' -----[ Initialization]-------------------------------------------------- Reset: LOW RMotor ' initialize motor outputs PAUSE 3000 ' time to disconnect cable ' -----[ Program Code ]---------------------------------------------------- Main: GOSUB Read_IR_Sensors ' jumps to Read IR Sensor subroutine IF irLeft = 1 THEN GOSUB Run_Conveyor ' if IR sensor 1 registers object, go to Run Conveyor subroutine PULSOUT RMotor, RSTOP ' stop motor PAUSE 20 GOTO Main ' loop program END ' -----[ Subroutines ]----------------------------------------------------- Read_IR_Sensors: FREQOUT LfIrOut, 1, 38500 ' modulate left IR LED irLeft = ~LfIrIn ' read input (1 = target) RETURN Read_IR_Sensors_2: FREQOUT RtIrOut, 1, 38500 ' modulate right IR LED irRight = ~RtIrIn ' read input (1 = target) RETURN Run_Conveyor: PULSOUT RMotor, RFWD ' turns conveyor motor on GOSUB Read_IR_Sensors_2 ' checks IR sensor #2 IF irRight = 0 THEN GOSUB Run_Conveyor ' if no object detected, continue running conveyor IF irRight = 1 THEN RETURN ' if object detected return to main
Comments
Try
Run_Conveyor:
DO
PULSOUT RMotor, RFWD ' turns conveyor motor on
GOSUB Read_IR_Sensors_2 ' checks IR sensor #2
IF irRight = 1 THEN RETURN ' if object detected return to main
LOOP
Let us know if that helps. I would also add a timer to stop the belt if an object is not detected in say 10 sec.
Jim