Pyserial readline()显示位的混合

2024-06-06 19:35:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Arduino和Python很陌生。我正在使用Pyserial在一台Arduino Uno和我的笔记本电脑之间进行通信。我笔记本电脑中的Python脚本由H3D查看器调用,它与novintfalcon相连。在

我的笔记本电脑将猎鹰号的位置数据发送到Arduino,然后发送给机器人。现在我只是想读回我从Arduino发来的数据,以确保一切正常。但事实并非如此!在

这是我的Python脚本的一部分(由.x3d文件调用)。在

dp_text, = references.getValue()

class display (threading.Thread): 
  def __init__(self, delay):
    threading.Thread.__init__(self)
    self.delay = delay

  def run(self):
    while 1:

        receivedFalconData=[]
        tex=[]
        tex.append("DevicePosX = " + str(localFalconData))

        receivedFalconData=ser.readline()
        ser.flush()
        ser.flushInput()
        tex.append("Input = " + str(receivedFalconData))

        dp_text.string.setValue(tex)
        time.sleep(self.delay)

displaying = display(0.1)
displaying.start()

上面的线程负责每100ms刷新一次H3D查看器中的文本节点,Arduino的代码如下:

^{pr2}$

Arduino读取的x轴值被发送回笔记本电脑并存储在ReceivedFalconda中。该值应该与localFalconData相同,后者是脚本本身中的x轴值。在

结果是:在狂野之前,receivedFalconData会模仿localFalconData几秒钟。在

但有时它会再次显示正确的值,这说明这可能是Pyserial输入缓冲区溢出的问题?怎么会是这样呢,既然(如果我是对的话)串行读取线()读取后清空输入缓冲区?此外,Arduino每0.5秒发送一次数据,而笔记本电脑每0.1秒读取一次数据。在

但是,当readline()部分放在用于发送数据的类中(每当Falcon有新数据可用时就调用它),receivedFalconData就完全正确了。在

另外,当它在H3D中显示时,我在receivedFalconData后面得到了其中两个☐符号。。。在

有Pyserial经验的人能帮帮我吗?如果我的问题还不清楚,我很乐意提供更多的信息。在


Tags: 数据textself脚本displayarduinoser笔记本电脑