我对使用串口非常陌生,我有一个问题我确实无法解决。让我用我一直使用的代码来解释这个问题。
Python 代码:
from time import sleep
import serial
ser = serial.Serial('COM8', 9600)
incoming=[10,15]
while True:
ser.write((incoming))
msg=(ser.readline())
print(msg.decode('utf-8'))
sleep(3)
int incoming[3];
arduino代码:
void setup() {
pinMode(13, OUTPUT);
Serial.begin(9600);
Serial.println("Ready");
}
void loop() {
if(Serial.available()) {
for (int i = 0; i < 3; i++) {
incoming[i] = Serial.read();
}
if (incoming[1]==-1){
Serial.println(incoming[0]);
Serial.println(incoming[1]);
Serial.println(incoming[2]);
Serial.println(incoming[3]);
}
}
当它运行时(我首先加载arduino代码,然后从python运行脚本) 代码运行成功,但输出如下; 准备好 10 -1 -1 15 -1 -1 10
就这样继续下去…… 为什么会出现这些-1?我在互联网上搜索过,但根本找不到任何可以解决问题的方法。 对于这个问题的任何帮助,我将不胜感激。 非常感谢。
最佳答案
查看 Arduino 文档。
Serial.read()
中的 -1 表示“没有可用数据”。
再长一点:
您正在等待串行接口(interface)上有可用字符。之后,您尝试读取 4 个字符,但没有人知道它们是否已经可用。 (串行接口(interface)没那么快,μC 快得多) 因此,在 Python 脚本中的下一个字符到达之前,您会读取“无字符”两次。
关于Python从arduino读取数据错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59151106/