Hi,
does anyone know if there is any Basic Atom 28 Pro code out there to use the “Ping Ultrasonic Range Sensor” by Parrallex?
Thanks,
Deron
Hi,
does anyone know if there is any Basic Atom 28 Pro code out there to use the “Ping Ultrasonic Range Sensor” by Parrallex?
Thanks,
Deron
Hail!
here ist the code snippet for a Devantech SRF05. Hopefully, it is the same as the Parallax:
trigger con p11 ' Define pin for Trigger pulse
echo con p11 ' Define pin for Echo pulse
head con p0
ledA con p4
ledB con p5
ledC con p6
range var word ' Range from SRF05
pause 1000
clear
' all LED OFF (high=low...)
high p4
high p5
high p6
' Bootstrap
low p4
pause 100
low p5
pause 100
low p6
pause 100
serout s_out,i38400,"Start",13]
main:
gosub ping
gosub showrange
pause range/10
goto main
'--------------------------
ping:
sound p9,[10\2000]
low trigger
pulsout trigger, 10
pulsin echo,0,range
serout s_out,i38400,"range=",dec range,13]
return
'--------------------------
showrange:
high ledA
high ledB
high ledC
if range<1000 then
low ledA
endif
if range<2000 then
low ledB
endif
if range<3000 then
low ledC
endif
return
It pings via PIN 11 and reads the range just from there. according to the range, it shows up to three leds on the board and pauses for a few milliseconds depending upon the range.
HTH
This is my subrutine that I use for my Ping sensor. Its in PBasic but probably works for MBasic as well. I havent used a ping sensor with an Atom before but if there are differences, there minor.
Get_Sonar:
Ping = IsLow
PULSOUT Ping, Trigger
PULSIN Ping, IsHigh, rawDist
rawDist = rawDist */ Scale
rawDist = rawDist / 2
Here is some code for a rover that I build that uses a PING sensor mounted on a servo. It might make more sence then whats posted above.
[code]’ {$STAMP BS2}
’ {$PBASIC 2.5}
'Controlls a two motored rover with a ping sensor mounted to a servo
Trigger CON 5
Scale CON $200
RawToIn CON 889
RawToCm CON 2257
IsHigh CON 1
IsLow CON 0
rawDist VAR Word
inches VAR Word
counter VAR Word
leftvalue VAR Word
rightvalue VAR Word
Ping PIN 5
PAUSE 4000 '3 seconds to activate
SEROUT 14, 84, $80, 2,2] 'sets controller in two motor mode
LOW 15 'reset motor controller
HIGH 15
PAUSE 100 'motor controller startup time
FOR counter = 1 TO 10 'Servo center
PULSOUT 1, 720
PAUSE 20
NEXT
'----------MAIN---------------------------------------------------------------------------------------------------------------
DO
GOSUB Get_Sonar
IF (inches < 8) THEN 'when obstacle is less then 8 inches away:
SEROUT 14, 84, $80, 0, 4, 0] 'motors stop
SEROUT 14, 84, $80, 0, 6, 0]
PAUSE 500
GOSUB Servo_Look
IF (leftvalue < rightvalue) THEN
GOSUB Turn_Right
ELSEIF (leftvalue > rightvalue) THEN
GOSUB Turn_Left
ELSEIF (leftvalue + rightvalue < 5) THEN
GOSUB Turn_Around
ELSE
GOSUB Turn_Around
ENDIF
ELSE
SEROUT 14, 84, $80, 0, 4, 100] 'right motor strait
SEROUT 14, 84, $80, 0, 6, 100] 'left motor strait
ENDIF
LOOP
'---------SUBROUTINES------------------------------------------------------------------------------------------------------
Get_Sonar: 'gets sonar from strait ahead
Ping = IsLow
PULSOUT Ping, Trigger
PULSIN Ping, IsHigh, rawDist
rawDist = rawDist */ Scale
rawDist = rawDist / 2
inches = rawDist ** RawToIn
RETURN
Get_Sonar_Left: 'gets sonar from left
Ping = IsLow
PULSOUT Ping, Trigger
PULSIN Ping, IsHigh, rawDist
rawDist = rawDist */ Scale
rawDist = rawDist / 2
leftvalue = rawDist ** RawToIn
RETURN
Get_Sonar_Right: 'gets sonar from right
Ping = IsLow
PULSOUT Ping, Trigger
PULSIN Ping, IsHigh, rawDist
rawDist = rawDist */ Scale
rawDist = rawDist / 2
rightvalue = rawDist ** RawToIn
RETURN
Servo_Look:
FOR counter = 1 TO 50 'Servo left
PULSOUT 1, 1250
PAUSE 20
NEXT
GOSUB Get_Sonar_Left 'get left distance
FOR counter = 1 TO 50 'Servo right
PULSOUT 1, 300
PAUSE 20
NEXT
GOSUB Get_Sonar_Right 'get right distance
FOR counter = 1 TO 50 'Servo center
PULSOUT 1, 720
PAUSE 20
NEXT
RETURN
Turn_Left:
SEROUT 14, 84, $80, 0, 4, 100] 'right motor forward
SEROUT 14, 84, $80, 0, 7, 100] 'left motor reverse
PAUSE 2000
RETURN
Turn_Right:
SEROUT 14, 84, $80, 0, 5, 100] 'right motor reverse
SEROUT 14, 84, $80, 0, 6, 100] 'left motor forward
PAUSE 2000
RETURN
Turn_Around:
SEROUT 14, 84, $80, 0, 5, 100] 'right motor reverse
SEROUT 14, 84, $80, 0, 7, 100] 'left motor reverse
PAUSE 1000
SEROUT 14, 84, $80, 0, 5, 100] 'right motor reverse
SEROUT 14, 84, $80, 0, 6, 100] 'left motor forward
PAUSE 2000
RETURN[/code]
Thank you SIRS! That will move me in the right direction! LOL… a pun!