His only problem now is that
His only problem now is that when going forward and nothing in front of him the servo jerks around. I added some code to the main loop to make it face forward )it was going all the way to one side). Now it moves a few degrees to the left or right then centers. The problem with this is it messes up the reading it does to make sure it is still no in danger. So it thinks it is hitting a wall and turns around every second or so. Any ideas why the servo is acting up? I’m thinking it has to do with being on the same power source as the motors and board. This robot will be harvested in a few days anyway so I can work on my next one, but I want to know what is going on with the poor little guy. I pasted the code below, but I doubt this issue is with the code at all.
Symbol dangerlevel = 70 ’ how far away should thing be, before we react?
symbol turn = 300 ’ this sets how much should be turned
symbol servo_turn = 700 ’ This sets for how long time we should wait for the servo to turn (depending on it´s speed) before we measure
symbol trig = 3 ‘ Define output pin for Trigger pulse
symbol echo = 6 ‘ Define input pin for Echo pulse
symbol range = w1 ‘ 16 bit word variable for range
symbol lrange = w2 ‘ 16 bit word variable for range
symbol rrange = w3 ‘ 16 bit word variable for range
main: ’ the main loop
Servo 0,150
pulsout trig,2 ‘ produce 20uS trigger pulse (must be minimum of 10uS)
pulsin echo,1,range ‘ measures the range in 10uS steps
pause 10 ‘ recharge period after ranging completes
debug range
if b2 > dangerlevel then
gosub nodanger ’ if nothing ahead, drive forward
else
gosub whichway ’ if obstacle ahead then decide which way is better
end if
pause 500
goto main ’ this ends the loop, the rest are only sub-routines
nodanger:’ this should be your combination to make the robot drive forward, these you most likely need to adjust to fit the way you have wired your robots motors
high 5 : high 6 : low 4 : low 7
return
whichway:
gosub totalhalt ’ first stop!
‘Look one way:
gosub lturn ’ look to one side
pause servo_turn ’ wait for the servo to be finished turning
gosub totalhalt
pulsout trig,2 ‘ produce 20uS trigger pulse (must be minimum of 10uS)
pulsin echo,1,lrange ‘ measures the range in 10uS steps
pause 10 ‘ recharge period after ranging completes
debug lrange
’Look the other way:
gosub rturn ’ look to another side
pause servo_turn ’ wait for the servo to be finished turning
gosub totalhalt
pulsout trig,2 ‘ produce 20uS trigger pulse (must be minimum of 10uS)
pulsin echo,1,rrange ‘ measures the range in 10uS steps
pause 10 ‘ recharge period after ranging completes
debug rrange
pause 500
’ Decide which is the better way:
if b4 > b6 then
gosub body_lturn
else
gosub body_rturn
end if
return
body_lturn:
high 6 : low 5 : low 7 : high 4 ’ this should be your combination that turns the robot one way
pause turn : gosub totalhalt
return
body_rturn:
high 5 : low 6 : low 4 : high 7 ’ this should be your combination that turns the robot the other way
pause turn : gosub totalhalt
return
rturn:
servo 0, 100 ’ look to one side
return
lturn:
servo 0, 200 ’ look to the other side
return
totalhalt:
low 4 : low 5 : low 6 : low 7 ’ low on all 4 halts the robot!
Servo 0,150 ’ face forward
wait 1 ’ freeze all for one second
return