Отправка нескольких последовательных байтов из Arduino в Python для отображения изображений - PullRequest
0 голосов
/ 17 февраля 2019

По сути, я пытался написать программу, которая, когда вы нажимаете определенную кнопку, появляется конкретное изображение.Например, если я нажму кнопку 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?)
...