나는이 간단한 로봇을 LEGO를 사용하여 만들었으며 컴퓨터로 라즈베리 파이를 사용합니다. 필자가 작성한 코드는 Python으로 작성되었으며, 기본적으로 초음파 센서를 사용하여 거리를 측정합니다. 코드는 다음과 같습니다.여러 반복 루프 반복 후 라스베리 파이 초음파 센서 출력이 멈춤
import RPi.GPIO as g
import time as t
g.setmode(g.BCM)
g.setwarnings(False)
# trig is the pin on the sensor which will emit a very fast pulse
trig = 21
# echo is the pin which will recieve the pulse from the trig
echo = 20
g.setup(trig, g.OUT)
g.setup(echo, g.IN)
def distance(dur):
global dis
start = 0
end = 0
g.output(trig, False)
t.sleep(0.01)
g.output(trig, True)
t.sleep(0.00001)
g.output(False)
while g.input(echo) == 0:
start = t.time()
while g.input(echo) == 1:
start = t.time()
duration = end - start
dis = duration * 17150
dis = round(dis,2)
print "Distance: " + dis
t.sleep(dur)
while True:
# so the function is being called, and the time between outputs is 0.01 seconds so it is very
# fast and quickly showing on the screen. If the distance is less than 5, then the program
# will print out "Hi" to show that. s
distance(0.01)
if dis < 5:
print "Hi"
꽤 똑바로 맞습니까? 그러나 당신은 거리를 보여주고, 코드가 완벽하게 실행,보고 내가 센서 근처에 내 손을 넣어 변수 창피 미만 5가되면, 프로그램은 "안녕"출력합니다 ...이 때까지
Ultrasonic Sensor Distance Output Picture. 출력 스트림이 그냥 멈추는 것을 볼 수 있습니다. 그것은 문자 적으로 멈추고 그것입니다. 오류 메시지가 없으며 아무것도 표시되지 않습니다. 그리고 그것에 관한 최악의 부분은 이것을 무작위로 수행한다는 것입니다. 그것은 단지 거리를 인쇄 할 때 실속 할 수 있습니다. "Hi"를 인쇄 할 때 실속 할 수 있습니다. 그러나 "Hi"를 인쇄 할 때 더욱 자주 멈추고 출력의 무작위 수 후에 실속합니다. 그래서 내가하는 다음 일은 프로그램을 멈추기 위해 Ctrl + C를 누르는 것입니다. 그리고 이것은 보이는 것입니다. like. 3 개의 초음파 센서가 하나로 연결되어 있고 GPIO 21과 GPIO 20 만 사용한다는 사실을 잊어 버렸습니다. 그래도 작동합니다. 그들 자신의 분리 된 쌍의 핀을 가지고 있었을지라도 그들은 여전히 동일한 실속 문제를 가지고있어서 차이를 만들지 않습니다.
누군가가이 문제의 원인에 대해 아이디어를 갖고 있다면 해결하는데 많은 시간을 할애하므로 매우 행복 할 것입니다.
'distance' 메소드 안에있는 두 개의 루프에 작은 수면을 추가 할 수 있습니다. 현재 그들은'g.input'을 끌어 와서 많은 사이클을 소비합니다. –
음, 첫 번째 while 루프와 두 번째 루프 사이에 t.sleep (0.01)를 추가했는데 음수 값 0_o에 출력을 엉망으로 만들었습니다. –
while 루프의 일부로, 루프. –