1

私はPythonとプログラミング全般に不慣れです。私はArduinoとPythonを使ってSpotifyのリモコンを作っているところです。Arduino でボタンが押されるたびに、単一の文字がシリアル経由で送信されます。この文字をリッスンする Python スクリプトがあり、その文字に基づいてコマンドを実行します。私が抱えている問題はspotify.playpause()、それぞれのボタンが押されるたびに機能することですが、他のすべてのコマンドでは複数のボタンを押す必要があります。文字が正しく送信されていることを複数のシリアルモニターで確認したため、Arduino の問題ではないと確信しており、Python ループの問題であると考えています。

編集:さらに情報を追加するだけで、Python側serial.read()またはArduino側のさまざまな組み合わせが問題に影響を与えないようですserial.readlineSerial.printSerial.println

TL;DR ループが完全に実行されません。何が問題なのですか。

コードは次のとおりです。

import serial
from pytify import Spotify
spotify = Spotify()
connected = False

ser = serial.Serial("COM3", 57600)

while not connected:
    serin = ser.read()
    connected = True

while True:
    if ser.read() == '0':
         spotify.playpause()
    elif ser.read() == '1':
        spotify.volumeUp()
    elif ser.read() == '2':
        spotify.volumeDown()
    elif ser.read() == '3':
        spotify.previous()
    elif ser.read() == '4':
        spotify.next()
    else :
        pass
4

1 に答える 1

3

問題は、if/elif ケースごとに ser.read を呼び出し続けるため、比較が失敗するたびに値を破棄していることです。ser.read を 1 回だけ呼び出してから、次のようにローカル変数を使用してその結果を比較する必要があります。

c = ser.read()

if c == '0':
   spotify.playpause()
elif c == '1':
   spotify.volumeUp()
...
于 2012-08-25T05:51:35.527 に答える