Boe-Bot

Boe-Bot Code

Boe bot code that causes the bot to seek shade using the phototransistors as artificial eyes

' {$STAMP BS2} ' {$PBASIC 2.5} NEGATIVE CON 1 pulseLeft VAR Word pulseRight VAR Word light VAR Word ndShade VAR Word counter VAR Nib tLeft VAR pulseLeft tRight VAR pulseRight n VAR tLeft d VAR Word q VAR ndShade sumDiff VAR d duty VAR Byte i VAR Nib temp VAR i sign VAR Bit FREQOUT 4, 2000, 3000 DEBUG "Program running..." DO GOSUB Light_Shade_Info IF (light < 90) THEN FREQOUT 4, 1000, 4000 DO PULSOUT 13, 750 PULSOUT 12, 750 PAUSE 20 LOOP ENDIF IF (light > 90) THEN FREQOUT 4, 1000, 3000 DO PULSOUT 13, 850 PULSOUT 12, 650 PAUSE 20 LOOP ENDIF LOOP Light_Shade_Info: GOSUB Light_Sensors sumdiff = (tLeft + tRight) MAX 65535 IF duty <= 70 THEN light=duty-(sumdiff/905) MIN 1 IF sumdiff = 0 THEN light = 0 ELSEIF duty = 255 THEN light=duty+((1800-(sumdiff))/26) ELSE light = duty ENDIF GOSUB Duty_Auto_Adjust n = tLeft d = tLeft + tRight GOSUB Fraction_Thousandths ndShade = 500-q RETURN Light_Sensors: PWM 6, duty, 1 RCTIME 6, 1, tLeft PWM 3, duty, 1 RCTIME 3, 1, tRight RETURN Duty_Auto_Adjust: sumDiff = (tLeft + tRight) MAX 4000 IF sumDiff = 0 THEN sumDiff = 4000 IF (sumDiff<=1800) OR (sumDiff>=2200) THEN sumDiff = 2000 - sumDiff sign = sumDiff.BIT15 sumDiff = ABS(sumDiff) / 200 sumDiff = sumDiff MAX ((duty-68)/2) sumDiff = sumDiff MAX ((257-duty)/2) IF sign=NEGATIVE THEN sumDiff=-sumDiff duty = duty + sumDiff MIN 70 MAX 255 ENDIF RETURN Fraction_Thousandths: q = 0 IF n > 6500 THEN temp = n / 6500 n = n / temp d = d / temp ENDIF FOR i = 0 TO 3 n = n // d * 10 q = q * 10 + (n/d) NEXT IF q//10>=5 THEN q=q/10+1 ELSE q=q/10 RETURN