Используя PySerial для связи с Arduino, как я могу сказать Python выполнять функцию только один раз после получения определенного ввода? - PullRequest
0 голосов
/ 21 октября 2018

Я использую 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 отправляет две разные строки, когда он отправляет «анализ», python должен запустить алгоритм CV и вернутьцвет, который он обнаруживает, проблема в том, что Python много раз читает «анализ» и пытается выполнить алгоритм CV каждый раз, и в конечном итоге ему не удается захватить изображение, и программа сворачивается, поэтому ничего не выводится.Я попытался закрыть порт после записи из Python в Arduino и задержать на несколько секунд с time.sleep, но это не сработало, программа все равно вылетает.

Если бы я мог сказать Python прекратить чтение последовательного портав течение нескольких секунд после прочтения первого экземпляра «проанализировать», я думаю, что это может сработать, но я не знаю, как это сделать, и мне нужно, чтобы программа работала непрерывно, потому что это конвейерная лента.

Я ценю помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...