我正在尝试编写一个程序,该程序会将Arduino的串行数据发送到在树莓派上运行的Python程序。发送大于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)
基本上,问题是当我按下按钮时,将从Arduino发送74,但是python程序仅将其识别为7。结果,只有7被输出到屏幕。有什么方法可以让python程序识别整个数字,而不仅仅是第一位?
答案 0 :(得分:0)
stream.read()仅返回传入数据的第一个字节,在这种情况下为char。您应该改用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();
}