PySerial Arduino 接收数据不正确
PySerial Arduino receives data incorrectly
我编写的代码应该将字符串“1”发送到 Arduino。相反,据我所知,它收到“49”,因此两个 IF 语句都不起作用。我究竟做错了什么?我正在使用 Macbook(Mojave)。
Arduino代码如下:
String data;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println(1);
digitalWrite(13, LOW);
}
void loop() {
while (Serial.available()) {
data = Serial.read();
Serial.println(data);
if (data == "1") {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("ON");
} else if (data == "2") {
digitalWrite(LED_BUILTIN, LOW);
Serial.println("OFF");
}
}
}
这里是 python3 代码:
import serial
import time
ArduinoSerial = serial.Serial('/dev/tty.usbserial-AH06F2WM', 9600)
time.sleep(2)
ArdData = ArduinoSerial.readline().decode('ascii')
print(ArdData)
ArduinoSerial.write("1".encode())
ArdData = ArduinoSerial.readline().decode('ascii')
print(ArdData)
谢谢!
在the ASCII table中,十进制值49
表示字符'1'
。
String
和char
是不同的。 Serial.read()
不 return 一个 String
。它 return 是 int
。
您可以使用 Serial.read()
并将 returned 值视为 char
。将 String data
更改为 char data
并与 if 语句中的 char
进行比较。
char data; // char
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println(1);
digitalWrite(13, LOW);
}
void loop() {
while (Serial.available()) {
data = Serial.read();
Serial.println(data);
if (data == '1') { // <- '1', not "1"
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("ON");
} else if (data == '2') { // <- '2', not "2"
digitalWrite(LED_BUILTIN, LOW);
Serial.println("OFF");
}
}
}
或者,如果你真的想使用 String
,你应该使用 Serial.readString()
。
String data;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println(1);
digitalWrite(13, LOW);
}
void loop() {
while (Serial.available()) {
data = Serial.readString(); // <- readString() not read()
Serial.println(data);
if (data == "1") {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("ON");
} else if (data == "2") {
digitalWrite(LED_BUILTIN, LOW);
Serial.println("OFF");
}
}
}
我编写的代码应该将字符串“1”发送到 Arduino。相反,据我所知,它收到“49”,因此两个 IF 语句都不起作用。我究竟做错了什么?我正在使用 Macbook(Mojave)。
Arduino代码如下:
String data;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println(1);
digitalWrite(13, LOW);
}
void loop() {
while (Serial.available()) {
data = Serial.read();
Serial.println(data);
if (data == "1") {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("ON");
} else if (data == "2") {
digitalWrite(LED_BUILTIN, LOW);
Serial.println("OFF");
}
}
}
这里是 python3 代码:
import serial
import time
ArduinoSerial = serial.Serial('/dev/tty.usbserial-AH06F2WM', 9600)
time.sleep(2)
ArdData = ArduinoSerial.readline().decode('ascii')
print(ArdData)
ArduinoSerial.write("1".encode())
ArdData = ArduinoSerial.readline().decode('ascii')
print(ArdData)
谢谢!
在the ASCII table中,十进制值49
表示字符'1'
。
String
和char
是不同的。 Serial.read()
不 return 一个 String
。它 return 是 int
。
您可以使用 Serial.read()
并将 returned 值视为 char
。将 String data
更改为 char data
并与 if 语句中的 char
进行比较。
char data; // char
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println(1);
digitalWrite(13, LOW);
}
void loop() {
while (Serial.available()) {
data = Serial.read();
Serial.println(data);
if (data == '1') { // <- '1', not "1"
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("ON");
} else if (data == '2') { // <- '2', not "2"
digitalWrite(LED_BUILTIN, LOW);
Serial.println("OFF");
}
}
}
或者,如果你真的想使用 String
,你应该使用 Serial.readString()
。
String data;
void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println(1);
digitalWrite(13, LOW);
}
void loop() {
while (Serial.available()) {
data = Serial.readString(); // <- readString() not read()
Serial.println(data);
if (data == "1") {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("ON");
} else if (data == "2") {
digitalWrite(LED_BUILTIN, LOW);
Serial.println("OFF");
}
}
}