На данный момент, когда нажата кнопка, Arduino отправляет последовательные данные в программу Python на Raspberry Pi.Как только эти данные отправлены, программа python интерпретирует байт и отображает изображение.Отправленные байты колеблются между 0 и 1 для отображения image0 и image1 соответственно.Однако, когда отображается одно изображение, мне нужно нажать клавишу на клавиатуре, чтобы очистить его, прежде чем отобразится второе изображение.Это происходит из-за 'cv2.waitKey (0)'.
Я пытаюсь добиться, чтобы код получал последовательные данные, даже если изображение отображается, выходит из текущего изображения и автоматически отображает следующееобраз.В частности, я пытаюсь сделать все это с помощью кнопки, подключенной к arduino
Короче говоря, цель - кнопка -> отобразить изображение, снова нажать кнопку -> отобразить следующее изображение,Нигде не следует использовать клавиатуру.
Вот мой текущий код, который использует клавиатуру с командой cv2.waitKey (0).Любая помощь будет отличной.
Код Arduino:
int First=2;
int buttonState=0;
int num = 0;
void setup()
{
Serial.begin(9600);
pinMode(First, INPUT);
}
void loop()
{
int buttonState=digitalRead(First);
if(buttonState==HIGH&&(num==1))
{
Serial.print(0x1);
num--;
delay(500);
buttonState = 0;
}
if(buttonState==HIGH&&(num==0))
{
Serial.print(0x0);
num++;
delay(500);
buttonState = 0;
}
if(buttonState==LOW)
{
//do nothing
}
}
Код Python
import numpy
import cv2, glob
import sys
import os
import serial
from subprocess import Popen
ser=serial.Serial('/dev/ttyUSB0',9600)
Title = cv2.imread('/home/pi/Desktop/Avengers/Title.jpg')
Zero = cv2.imread('/home/pi/Desktop/Avengers/000.jpg')
while True:
command = ser.read()
if command:
#flush serial for unprocessed data
ser.flushInput()
print("new command:", command)
if (int(command) == 0):
cv2.destroyAllWindows()
cv2.namedWindow("Title", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("Title",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.imshow('Title', Title)
cv2.waitKey(0)
cv2.destroyAllWindows()
if (int(command) == 1):
cv2.destroyAllWindows()
cv2.namedWindow("Zero", cv2.WND_PROP_FULLSCREEN)
cv2.setWindowProperty("Zero",cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN)
cv2.imshow('Zero', Zero)
cv2.waitKey(0)
cv2.destroyAllWindows()
ser.flushInput()