我想每隔一段时间在串行端口上读取数据和 Arduino。所以基本上像

  • 读一读
  • 等等
  • 读一读
  • 等等
  • 拿...

  • 等等。

    我面临的问题是端口将缓冲其信息,因此只要我调用等待函数,串行端口上的数据就会开始缓冲。一旦等待函数完成,我尝试再次读取数据,但我正在从缓冲区的开头读取数据,并且数据不再是当前的,而是在等待函数开始时读取的数据。

    我的问题是,是否有一种我不知道的方法可以忽略在等待期间读入的数据部分,而只读取当前在串行端口上传送的内容?

    到目前为止,我有类似的东西:
    import serial
    
    s = serial.Serial(path_to_my_serial_port,9600)
    
    while True:
        print s.readline()
        time.sleep(.5)
    

    出于解释目的,我让 Arduino 输出自它开始循环以来的时间。通过python代码,每次调用的时间应该相隔半秒。通过串行输出,时间在不到一毫秒的时间内增加。无论 sleep 时间如何,这些值都不会改变。

    示例输出:
    504
    
    504
    
    504
    
    504
    
    505
    
    505
    
    505
    
    ...
    

    作为我最终目标的一个想法,我想测量端口的值,等待一个时间延迟,然后看看值是多少,再等一下,看看然后是什么值,再等一下。

    我目前为此使用 Python,但对其他语言开放。

    最佳答案

    如果您想在执行下一次读取之前清除输入缓冲区中可能存在的内容,可以使用 s.flushInput() 刷新输入缓冲区(您也可以使用 s.inWaiting() 检查输入缓冲区中的字节) )。

    因此,添加刷新调用将确保您读取从那一刻起到达的任何字节:

    while True:
        s.flushInput()
        print s.readline()
        time.sleep(.5)
    

    您可能还需要考虑使用读取超时(当您使用 timeout 参数创建 serial.Serial 对象时)。在这种情况下,您需要在超时时处理空读数,但您可以保证,如果发送方因任何原因停止,您的阅读器不会永远等待。

    关于python - 读取串行端口 - 在特定时间内忽略写入串行端口的部分数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19874623/

    10-14 23:01
    查看更多