Одиночный ультразвуковой датчик для Raspberry pi 2B+ не работает от Pi Terminal
Я работал с 4-контактными ультразвуковыми датчиками HC-SRO4, до четырех одновременно. Я разрабатывал код для одновременной работы 4 из этих датчиков, и после реорганизации проводов для установки в проекте и использования базового кода для запуска одного из них я не могу настроить датчик. Код следует:
import RPi.GPIO as GPIO
import time
TRIG1 = 15
ECHO1 = 13
start1 = 0
stop1 = 0
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(TRIG1, GPIO.OUT)
GPIO.output(TRIG1, 0)
GPIO.setup(ECHO1, GPIO.IN)
while True:
time.sleep(0.1)
GPIO.output(TRIG1, 1)
time.sleep(0.00001)
GPIO.output(TRIG1, 0)
while GPIO.input(ECHO1) == 0:
start1 = time.time()
print("here")
while GPIO.input(ECHO1) == 1:
stop1 = time.time()
print("also here")
print("sensor 1:")
print (stop1-start1) * 17000
GPIO.cleanup()
После замены проводов, датчиков и других компонентов в цепи (включая выводы GPIO) я просмотрел код и добавил операторы печати в терминал, чтобы увидеть, какие части кода работают. 1-е печатное заявлениеprint("here")
выполняется последовательно, но второй оператор печатиprint("also here")
нет, и я затрудняюсь объяснить. Другими словами, почему второй цикл while не выполняется? Другие вопросы, задаваемые здесь, не сработали для моей проблемы. Любая помощь будет принята с благодарностью.
Спасибо, Х.
1 ответ
Вот учебник от Gaven MacDonald, который может помочь с этим: https://www.youtube.com/watch?v=xACy8l3LsXI
Прежде всего, блок while с ECHO1 == 0
будет цикл до тех пор, пока ECHO1 не станет 1. В этот период времени код внутри будет выполняться снова и снова. Вы не хотели бы устанавливать время снова и снова, поэтому вы можете сделать что-то вроде этого:
while GPIO.input(ECHO1) == 0:
pass #This is here to make the while loop do nothing and check again.
start = time.time() #Here you set the start time.
while GPIO.input(ECHO1) == 1:
pass #Doing the same thing, looping until the condition is true.
stop = time.time()
print (stop - start) * 170 #Note that since both values are integers, python would multiply the value with 170. If our values were string, python would write the same string again and again: for 170 times.
Кроме того, как лучший метод, вы должны использовать try кроме блоков для безопасного выхода из кода. Такие как:
try:
while True:
#Code code code...
except KeyboardInterrupt: #This would check if you have pressed Ctrl+C
GPIO.cleanup()