3

ここで概説されているように、基本的な「DigitalReadSerial」セットアップでarduino unoを使用しています:http://arduino.cc/en/Tutorial/DigitalReadSerial

arduino IDE に含まれているシリアル モニターを使用すると、ボタンを押すことによる変更がすぐに表示されます。

これは、ボタンが押されているかどうかに応じて、0または1のpyserialで必要なものです。(最終的にタイマーをトリガーするため)

それをテストするために、私はこれを一緒に投げましたが、最もきれいではありませんでしたが、プッシュボタンの状態を読み取っているように見えますが、20 秒の遅延があります。

    import serial
    ser = serial.Serial()
    ser.setPort("COM2")
    ser.baudrate = 9600
    ser.open()
    while 1==1:
        ser.readline()

誰にもアイデアはありますか?

4

4 に答える 4

3

一般的なファイルシステムのファイル同期に影響を与えるものと同様に、キャッシュ/同期の問題のようです。私は arduino/pyserial でその問題に苦しんできました...今まで?

http://pyserial.sourceforge.net/pyserial_api.htmlから、プログラムに ser.flush()、ser.flushInput()、ser.flushOutput() の 3 つのフラッシュ コマンドを配置すると、期待どおりに動作するようです。 .

于 2013-01-20T12:43:10.917 に答える
1

Arduinoコードを使用していますSerial.printか、それとも使用していますか?Serial.println前者の場合、キャリッジリターンは発行されずser.readline()、コード内でキャリッジリターンが待機します。

于 2011-10-12T01:05:14.493 に答える
1

読み取るものがある場合にのみ readline を開始してください。そうしないと、eol の待機中にブロックされるか、シリアル バッファーの読み取りの途中でタイムアウトになり、文字列が切り詰められる可能性があります。これにより、ループが高速化され、複数のポートを循環するのに最適な短いタイムアウトを使用できるようになります。pyserial3.0 を使用しています...

while 1:
    if ser.in_waiting > 0:
        data = ser.readline()
        print(data)

また、次のようなものを試してください

while 1:
    if ser.in_waiting > 0:
        data = ser.read(32)
        print(data)

バッファに含まれるバイト数が指定されたバイト数よりも少ないかどうかは気にしませんが、バッファに蓄積された余分なデータを読み取り/フラッシュすることがあります。

于 2016-01-15T08:20:39.017 に答える