Pyserial读取循环需要多个输入才能注册

时间:2012-08-25 03:54:29

标签: python while-loop arduino microcontroller pyserial

我是Python和编程的新手。 我正在使用Arduino和python为Spotify制作遥控器。 只要在Arduino上按下按钮,就会通过串行发送一个字符。有一个python脚本侦听此角色,并根据角色执行命令。我遇到的问题是,spotify.playpause()每次按下相应的按钮时都会工作,但所有其他命令都需要按下多个按钮。我确信这不是Arduino的问题,因为我已通过多个串行监视器确认该字符正确发送,所以我认为这是Python循环的一个问题。

编辑:只是添加更多信息,似乎python端的serial.read()serial.readline与Arduino端的Serial.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

1 个答案:

答案 0 :(得分:3)

您的问题是,您为每个if / elif案例继续调用ser.read,因此每次比较失败时都会丢弃该值。您只需要调用一次ser.read,然后使用本地var比较该结果,如下所示:

c = ser.read()

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