我正在尝试检测交换机是否为和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
答案 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
我还没有尝试过代码 - 但这应该是解决问题的简单方法。