我对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经验的人能帮帮我吗?如果我的问题还不清楚,我很乐意提供更多的信息。在
目前没有回答
相关问题 更多 >
编程相关推荐