Все, привет!Чтение серийного номера и ответа Python
В настоящее время я использую попытку связаться с моим Arduino (который подключен к моей малине Pi через Serial) и использует информацию в моем сценарии Python на моей малиновой пи.
Таким образом, мой скрипт Python должен дождаться, когда Arduino сообщит о своих данных, прежде чем я захочу, чтобы сценарий продолжался, хотя я не совсем уверен, как это сделать.
Это то, что я получил до сих пор:
#!/usr/bin/env python
import time
import serial
import RPi.GPIO as GPIO
ser = serial.Serial('/dev/ttyACM0', 9600)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(20, GPIO.OUT) #green LED
GPIO.setup(16, GPIO.IN, GPIO.PUD_UP) #green button
GPIO.output(20, True) #green ON
start = time.time()
while True:
if (GPIO.input(16) == False):
print "green button pressed"
time.sleep(0.25)
start = time.time()
while (GPIO.input(16) == False):
time.sleep(0.01)
if (GPIO.input(16) == True):
print "released!"
end = time.time()
elapsed = end - start
print elapsed
if elapsed >= 5:
print "longer than 5s"
else:
print "shorter than 5s"
ser.write("0")
while True:
print ser.readline().rstrip()
if ser.readline().rstrip() == "a":
print "ready"
continue
if ser.readline().rstrip() == "b":
print "timeout"
break
if ser.readline().rstrip()[0] == "c":
print "validated: " + ser.readline().rstrip()[2]
break
Как вы можете видеть, я посылаю число 0 на мой Arduino, и ждать его, чтобы ответить а, значит, он готов , После этого, когда у него есть данные, он отправляет сообщение «c», в результате мне нужно ждать 2 разных отдельных сообщения.
Я пытался сделать это, имея петлю и разбивая ее, когда у меня есть то, что мне нужно, но это не работает.
В настоящее время он переходит в цикл, и он печатает сообщение «a», но не возвращается со вторым сообщением.
Любая идея, как правильно связать этот цикл?
Спасибо!
Спасибо за ваш ответ, но я Я боюсь, что это немного похоже на мою голову. Можете ли вы объяснить, что здесь происходит? – user5740843
он читает байты за один раз, пока не получит «targetChar» и не возвращает все это ... если он встречает тайм-аут для запрошенного байта ... он просто возвращает то, что у него есть до сих пор ... путем изолирования поведения, которое повторяется в функции, вы можете просто сосредоточиться на той части, которая проблематична ... –