2012-08-25 56 views
1

我是新來的Python和一般的編程。 我正在使用Arduino和python爲Spotify製作遙控器。 無論何時在Arduino上按下按鈕,都會通過串行發送單個字符。有一個python腳本正在監聽這個角色,並根據角色執行一個命令。我遇到的問題是spotify.playpause()每次按下其各自的按鈕時都有效,但所有其他命令都需要多次按下按鈕。我確信這不是Arduino的問題,因爲我已經通過多個串行監視器確認該字符正確發送,所以我認爲這是Python循環的一個問題。Pyserial讀取循環需要多個輸入來註冊

編輯:只是增加更多的信息,似乎對Python端serial.read()serial.readlineSerial.printSerial.println在Arduino的側面不同的組合有問題

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 

回答

3

你的問題是你一直在呼喚ser.read每個如果/ elif的情況下,所以你每次丟棄值的比較失敗。您只需調用ser.read一次,然後使用本地變量比較該結果,如下所示:

c = ser.read() 

if c == '0': 
    spotify.playpause() 
elif c == '1': 
    spotify.volumeUp() 
...