到目前为止,当按下按钮时,arduino将串行数据发送到树莓派上的python程序。发送该数据后,python程序将解释该字节并显示图像。对于显示图像0和图像1,发送的字节分别在0和1之间振荡。但是,当显示一个图像时,我必须在显示第二个图像之前按键盘上的一个键将其清除。这是由于'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()