使用PySerial与Arduino通信,如何告诉Python在接收到特定输入后只执行一次函数?

2024-04-25 10:12:41 发布

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

我正在使用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写入代码并随时间延迟几秒钟后,我尝试关闭端口。sleep但没有起作用,程序仍然崩溃

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

我很感激你的帮助


Tags: 代码程序算法dataif计算机serial视觉