2012-08-25 2 views
1

저는 일반적으로 Python과 프로그래밍에 익숙하지 않습니다. Arduino와 Python을 사용하여 Spotify에 대한 원격 제어를 진행 중입니다. Arduino에서 버튼을 누를 때마다 단일 문자가 직렬로 전송됩니다. 이 문자를 듣고 명령을 실행하는 문자를 기반으로하는 python 스크립트가 있습니다. 내가 가지고있는 문제는 각각의 버튼을 누를 때마다 spotify.playpause()이 작동하지만 다른 모든 명령은 여러 번의 버튼 누름이 필요하다는 것입니다. 캐릭터가 올바르게 전송되고 있다는 것을 여러 직렬 모니터를 통해 확인했기 때문에 Arduino와 관련된 문제가 아니라고 확신합니다. 그래서 Python 루프의 문제라고 생각합니다.Pyserial 읽기 루프에 등록하려면 여러 입력이 필요합니다.

EDIT : 그냥 추가 정보를 추가하는 것이 serial.read() 또는 serial.readline 파이썬 측과 Serial.print 또는 아두 이노 측 Serial.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 

답변

3

귀하의 문제는 당신이 때마다 값을 폐기되도록/ELIF 경우, 당신의 비교가 실패 할 경우 각각 ser.read를 호출 계속한다는 것입니다 : 여기

는 코드입니다. ser.read를 한 번만 호출 한 다음 결과를 로컬 var을 사용하여 다음과 같이 비교해야합니다.

c = ser.read() 

if c == '0': 
    spotify.playpause() 
elif c == '1': 
    spotify.volumeUp() 
... 
관련 문제