Я сделал этого простого робота из LEGO, а в качестве компьютера он использует Raspberry Pi. Код, который я написал, был на 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"
Довольно просто, верно? Но видите ли, код выполняется безупречно, он показывает расстояние и когда я подношу руку к датчику и переменная dis становится меньше 5, программа выводит "Привет"... ДО ЭТОГО:
Изображение вывода ультразвукового датчика расстояния. Вы можете видеть, что поток вывода просто останавливается. Буквально останавливается и все. Ни сообщения об ошибке, ничего. И самое худшее в этом то, что он делает это случайным образом. Он мог зависнуть, когда просто распечатывал расстояние, он мог зависать, когда печатал «Привет», но я заметил, что он останавливался намного чаще, когда печатал «Привет», и он останавливался после случайного количества выходов. Итак, следующее, что я делаю, это нажимаю ctrl+c, чтобы остановить программу, и вот как она выглядит .Я также забыл упомянуть, что три ультразвуковых датчика соединены вместе как один и используют только GPIO 21 и GPIO 20. Однако он все еще работает, и даже когда у них были свои отдельные пары контактов, у них все еще была одна и та же проблема с остановкой, поэтому это не имеет значения.
Если у кого-то есть идеи относительно того, что вызывает это, я был бы так счастлив, потому что я трачу часы, пытаясь это исправить.
distance
. В настоящее время они будут потреблять много циклов, просто вытягиваяg.input
. - person Tammo Heeren   schedule 22.10.2016