皆さん、こんにちは!シリアルを読み、Pythonで応答する
私は現在Arduino(シリアル経由で自分のRaspberry Piに接続しています)と通信し、自分のRaspberry Piで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
あなたが見ることができるように、私は私のArduinoに番号0を送っていて、それはそれは準備ができて意味し、で応答するのを待ちます。その後、データがあれば、メッセージ "c"を送ります。その結果、2つの別々のメッセージを待つ必要があります。
私は必要なときにループを作り、それを壊すことでこれを試みましたが、これは機能しません。
現在、ループに入り、「a」メッセージが表示されますが、2番目のメッセージは表示されません。
どのようにこのループを適切に結びつけることができますか?
ありがとうございました!私は私の中を維持し、私は私が望む結果を得るまでのブロックをエスケープするため
は、あなたの答えをありがとう、私は」それは私の頭の上に少しあるように見えます。ここで何が起こっているのか説明できますか? – user5740843
これは、 'targetChar'を得るまで一度に1バイトを読み込み、それをすべて返します。要求されたバイトのタイムアウトが発生した場合....これまでの動作を返します。機能に繰り返されると、問題になっている部分だけに焦点を当てることができます... –