'------------------------------------------------------ ' Name : avoidance.bas ' Compiler : PicBasic Pro - MicroEngineering Labs ' Notes : Obstacle avoidance using the sonar ranger '------------------------------------------------------ ' PortA set as outputs. Pins 0 & 1 inputs. trisa = %00000011 ' PortB set as outputs. pin 0 input. trisb = %00000001 '------------------------------------------------------ ' initialize variables trigger VAR PORTA.0 echo VAR PORTA.1 piezo VAR PORTA.3 enable_right VAR PORTB.1 forward_right VAR PORTB.2 reverse_right VAR PORTB.3 enable_left VAR PORTB.4 reverse_left VAR PORTB.5 forward_left VAR PORTB.6 dist_raw VAR WORD dist_inch VAR WORD conv_inch CON 15 turn VAR BYTE low enable_left low forward_left low reverse_left low enable_right low forward_right low reverse_right SOUND PIEZO,[115,10,50,10] turn = 0 start: gosub sr_sonar if dist_inch < 12 then turn = turn + 1 gosub backwards if turn.0 = 1 then gosub turn_left else gosub turn_right endif endif gosub forward goto start '------------------------------------------------------ ' movement subroutines forward: high enable_left high forward_left high enable_right high forward_right pause 50 low enable_left low forward_left low enable_right low forward_right return '------------------------------------------------------ turn_left: high enable_left high forward_left high enable_right high reverse_right pause 300 low enable_left low forward_left low enable_right low reverse_right return '------------------------------------------------------ backwards: SOUND PIEZO,[115,5,90,2,80,4,50,10] high enable_left high reverse_left high enable_right high reverse_right pause 300 low enable_left low reverse_left low enable_right low reverse_right return '------------------------------------------------------ turn_right: high enable_left high reverse_left high enable_right high forward_right pause 600 low enable_left low reverse_left low enable_right low forward_right return '------------------------------------------------------ sr_sonar: pulsout trigger,1 pulsin echo,1,dist_raw dist_inch = (dist_raw/conv_inch) pause 10 return end