需要不断监视Python中的串行数据

jak*_*e34 5 python serial-port

现在我正在使用Arduino将数据从模拟传感器发送到COM4.我正在尝试制作一个python脚本,持续监视该数据并查找某个参数.

我试过这样的事情,但它并没有正确提醒我

import serial
from Tkinter import *
import tkMessageBox

port = "COM4"
ser = serial.Serial(port,9600)
value = 0

while 1:
    value = ser.read()
    if value > 400:
        tkMessageBox.showwarning(
            "Open file",)
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

gim*_*mel 3

如果serial您使用的包是pySerial ,请记下该Serial.read()方法的定义:

\n
\n

read(size=1)

\n

参数:size \xe2\x80\x93 要读取的字节数。

\n

返回:从端口读取的字节。

\n

从串行端口读取 size 字节。如果设置了超时,它可能会根据请求返回更少的字符。如果没有超时,它将阻塞,直到读取请求的字节数。

\n

在版本 2.5 中更改:如果可用(Python 2.6 及更高版本),则返回bytes实例,否则返回str实例。

\n
\n

尽管您正在尝试处理byte对象,但您可能(取决于 Python 版本)正在处理strbytes(数组)对象。这些对象不一定对应于整数值。

\n

即使byte从 接收对象read(),最大的无符号整数也将是 255。\nvalue与 400 比较没有意义。尝试使用简单的调试输出查找返回对象的类型。

\n
print type(value)\n
Run Code Online (Sandbox Code Playgroud)\n

如果需要处理str对象,请检查 for 转换的使用ord()

\n

flush建议参考原问题,使用print,而不是tkinter)。

\n

请参阅how-to-flush-output-of-python-print,并尝试使用命令行 shell,而不是可能影响输出缓冲的 IDE。

\n