Сложность отправки номеров из Arduino в Python через последовательные данные - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь написать программу, которая будет отправлять последовательные данные из Arduino в программу Python, запущенную на Raspberry Pi.Я столкнулся с проблемой при отправке чисел больше 9. Когда я отправляю число больше 9, программа python интерпретирует только первую цифру в числе.5 для 563, 9 для 9135, 4 для 43 и т. Д. Любая помощь в решении этой проблемы будет принята с благодарностью.Спасибо.

Код 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(549);
   num--;
   delay(500);
   buttonState = 0;
 }
 if(buttonState==HIGH&&(num==0))
 {
   Serial.print(74);
   num++;
   delay(500);
   buttonState = 0;
 }
 if(buttonState==LOW)
 {
   //do nothing
 }
}

Код Python:

import numpy
import cv2, glob
import sys
import os
import keyboard
import serial

from pynput.keyboard import Key, Controller
import time

keyboard = Controller()
ser=serial.Serial('/dev/ttyUSB3',9600)

while True:
    command = ser.read()
    if command:
        ser.flushInput()
        print("new command:", command)
        if(int(command) == 74):
            time.sleep(2)
            keyboard.press(Key.space)
            keyboard.release(Key.space)

В основном, проблема в том, что когда я нажимаю кнопку, 74 будет отправлено сArduino, но программа python распознает его только как 7. В результате только 7 выводит на экран.Есть ли способ заставить программу python распознавать все числа, а не только первую цифру?

1 Ответ

0 голосов
/ 23 февраля 2019

stream.read () возвращает только первый байт входящих данных, то есть символ в этом случае.Вы должны использовать stream.readBytes () или stream.readString () .Они читают данные до тех пор, пока не будет достигнут конец или время ожидания функции.Вот пример кода, который я использовал для чтения целых чисел с несколькими цифрами:

int getInt()
{
  // Create an empty string
  String val = "";

  // While the string is empty...
  while(val == "")
  {
    // ... wait for the user to enter a string
    val = Serial.readString();
  }

  // Return the string converted to an integer
  return val.toInt();  
}
...