从Arduino检测Python中的状态更改

时间:2017-10-28 06:53:51

标签: python arduino

我正在尝试检测交换机是否为和Arduino开启或关闭,将数据发送到Python并在GUI中显示结果 以下Python代码将串行数据读入Python,如下所示; (不是我必须添加的代码)

import serial
ser = serial.Serial('com3',9600)
ser.flushInput()
ser.flushOutput()
while True:
        ser.flushInput()
        ser.flushOutput()
        passcode = ser.read()

        if passcode == b'1':
            print("Switch is ON")
        if passcode == b'0':
            print("Switch if OFF")

结果在Python IDE上显示如下[取决于结果] 这是串行输出结果

关闭时切换

关闭时切换

关闭时切换

开关打开

开关打开

开关打开

现在我的问题?

有没有什么方法可以让“一个”读数说“Switch is On”或“Switch is off”[不是连续的串行结果]到Python中并且理想地将结果显示到Tkinter

2 个答案:

答案 0 :(得分:1)

使用以下模式,您可以在任何其他文件中导入该函数,以在控制台或任何tkinter文本小部件中打印结果。

import serial
ser = serial.Serial('com3',9600)
ser.flushInput()
ser.flushOutput()

def switch_state():
    ser.flushInput()
    ser.flushOutput()
    passcode = ser.read()

    res = "Switch is "
    if passcode == b'1':
        res += "ON"
    elif passcode == b'0':
        res += "OFF"
    else:
        res += "N/A"
    return res

if __name__ == "__main__": # this is to avoid executing the loop when importing the file
    while True:
        print(switch_state())

(如果您在状态不可用时更喜欢空白结果,有时似乎会发生这种情况,您可以先定义res = ''并在不同情况下保留"Switch is ON""Switch is OFF"

答案 1 :(得分:1)

我对你的问题的理解是“我怎样才能做到这一点,所以它只在状态变化时打印输出?'。

要执行此操作,您需要在本地存储状态,然后将新状态与存储状态进行比较。 最简单的方法是使用变量,例如:switch_state。

所以:

import serial

ser = serial.Serial('com3',9600)
switch_state = None  # 0 for off, 1 for on, None - not yet set

ser.flushInput()
ser.flushOutput()

while True:
        ser.flushInput()
        ser.flushOutput()
        passcode = ser.read()

        if passcode == b'1' and switch_state != 1:
            print("Switch is ON")
            switch_state = 1

        if passcode == b'0' and switch_state != 0:
            print("Switch if OFF")
            switch_state = 0

我还没有尝试过代码 - 但这应该是解决问题的简单方法。