По сути, я пытался написать программу, которая, когда вы нажимаете определенную кнопку, появляется конкретное изображение.Например, если я нажму кнопку 1, появится изображение 1.Затем, если я нажму кнопку 2, изображение 1 исчезнет, а изображение 2 отобразится.Проблема, с которой я столкнулся, касается button2.В конце концов, мне бы хотелось, чтобы открывалось много файлов изображений.Прямо сейчас у меня есть последовательные данные, посылаемые из Arduino на Raspberry Pi с Python.Программа python распознает нажатие кнопки 1 и отображает изображение.Однако, когда я нажимаю кнопку 2 (до или после нажатия кнопки 1), программа останавливается и появляется сообщение об ошибке.Любая помощь в решении этой проблемы была бы отличной!
Я пытался изменить байты, отправленные с Arduino, но это было безрезультатно.Я новичок в обработке последовательных данных, так что может быть что-то, что я пропустил.
Код Arduino
int First=2;
int buttonState=0;
int Second=3;
int buttonState2=0;
void setup()
{
Serial.begin(9600);
pinMode(First, INPUT);
pinMode(Second, INPUT);
}
void loop()
{
int buttonState=digitalRead(First);
int buttonState2=digitalRead(Second);
if(buttonState==HIGH)
{
Serial.print(0x0);
delay(100);
}
if (buttonState==LOW)
{
//do nothing
}
//BUTTON STATE SECOND
if(buttonState2==HIGH)
{
Serial.print(0x1);
delay(100);
}
if (buttonState2==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.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.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()
Я ожидаю, что одно изображение будет отображаться при нажатии кнопки, а другое изображение будет отображаться при нажатии другой кнопки.Результаты выполнения кода позволяют одной кнопке отображать изображение.Однако при нажатии другой кнопки изображение не отображается.Короче говоря, одна кнопка работает, а другая нет.Сообщение об ошибке гласит:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 490, in read
'device reports readiness to read but returned no data '
serial.serialutil.SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pi/OpenJPG.py", line 14, in <module>
command = ser.read()
File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 497, in read
raise SerialException('read failed: {}'.format(e))
serial.serialutil.SerialException: read failed: device reports readiness to read but returned no data (device disconnected or multiple access on port?)