使用PySerial与Arduino通讯,我如何告诉Python在收到某些输入后仅执行一次功能?

时间:2018-10-20 22:19:07

标签: python arduino pyserial

我正在使用Arduino将数据发送到Python,然后启动使用OpenCV制作的计算机视觉算法,在计算机视觉算法完成后,我需要将输出发送回Arduino以执行分类技术。 这是我正在使用的与串行通信有关的代码的一部分:

while True:

try:
    data = arduino_serial.readline()[:-2].decode()
    print(data)

    if (data == 'analyze'):
        blockcolor= ColorAnalysis()

        if(blockcolor== 'red'):
            arduino_serial.write(b'0')
            print(ColorAnalysis())
            serial.Serial('COM3', 9600).close()


        else:
            arduino_serial.write(b'1')
            print(ColorAnalysis())
            serial.Serial('COM3', 9600).close()


    elif(data == 'continue'):
        arduino_serial.write(b'1')
        print(data)

except:
    print("Something went wrong...") 

好吧,基本上,arduino发送两个不同的字符串,当它发送“ analyze”时,python必须运行CV算法并返回它检测到的颜色,问题是Python多次读取“ analyze”并尝试执行每次使用CV算法,最终都无法捕获图像,并且程序崩溃,因此它不输出任何内容。从Python写到Arduino之后,我尝试关闭端口,并随着time.sleep延迟了几秒钟,但是它不起作用,程序仍然崩溃。

如果我可以让Python在读取第一个“分析”实例后停止读取串行端口几秒钟,我认为它可以工作,但是我真的不知道该怎么做,因此我需要该程序连续运行,因为它是传送带。

感谢您的帮助。

0 个答案:

没有答案