0

我有一个 arduino 板,它不断地将值转储到串行端口(USB)。该数据由使用 pySerial 库的 python 脚本的机器读取。我使用的代码如下:

import serial
import time

ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)

while True:
        ser.flushInput() #Clear the serial input buffer
        print "Value:"
        print ser.readline()
        print ser.readline()
        print ser.readline()

        time.sleep(30) #Wait for 30 seconds

这完美地工作并提供以下输出:

Value:

162

162

162

Value:

162

162

162

但是当我在循环中给出比 30 秒更大的延迟时,比如 1 分钟或更高:

time.sleep(60) #Wait for 60 seconds

我开始遇到问题。正在打印第一组值。从那时起, ser.readline() 总是超时产生空值!

输出:

Value:
162

162

162

Value:



Value:

为什么串行模块会显示这种行为?

最初,我用来读取序列值的机器是运行 Raspian linux 的 Raspberry Pi 板。我认为这个问题可能是由于 RPi 在遇到空闲期时将 USB 推迟到低功耗睡眠。但是我在笔记本电脑上测试了相同的代码,然后也出现了同样的问题,这意味着它可能是其他问题。

我想构建一个需要 24x7并在某些事件发生时读取串行值的系统,因此这种行为是不可接受的。

请对这个问题有所了解。

4

1 回答 1

0

您可以尝试阅读以下内容:

print ser.read(ser.inWaiting())

我看到你正在使用ser.readline()which 应该等待 a\n或直到超时,但ser.read()试一试它仍然应该以相同的方式打印出来(只要你收到\n的内容介于两者之间)

现在你说continuously transmitting那是多久一次?我想知道如果 readline 超时,是否有任何方法可以错过传入的数据。

于 2013-10-30T18:06:55.810 回答