我试图通过连接到它的XBee模块从我的Raspberry Pi2上的python脚本发送一个字符串(可能是一个数字)到Arduino Uno。发送的数据在Arduino端错误解释。当我在X-CTU上使用终端并发送字符串时,它在Arduino IDE的串行监视器上正确显示。
这是我正在使用的Python代码
import time
import serial
ser = serial.Serial("/dev/ttyUSB0",9600)
ser.isOpen()
x= '4'
ser.write(bytes(x, "ascii")) #writing as bytes
time.sleep(2)
ser.close()
这是我使用的Arduino代码
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX
void setup()
{
// Open serial communications
Serial.begin(9600);
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
}
void loop() // run over and over
{
int x;
if (mySerial.available())
{
x = char(mySerial.read()) - '0';
//reading data value from Software Serial port
//converting ASCII to int
//and storing it as x
Serial.print(x);
}
答案 0 :(得分:0)
我的猜测,如果你已经对char进行类型转换,则不需要减去'0',因为Serial.print()会将该值解释为ascii代码并打印相应的字符。所以,试试,char(Serial.read())并打印出来。
答案 1 :(得分:0)
嗯,你知道接收端的代码工作正常,因为你可以通过X-CTU终端发送数据来测试它。你是如何从X-CTU发送的?只需在窗口中键入数字4,或将其作为十六进制值(0x04
)发送?
将Python脚本发送到X-CTU终端后会发生什么?你看到了什么?如果您在转换之前转储在Arduino端读取的字节值,该怎么办?比较X-CTU发送的内容与Python发送的内容。
您可以只指定bytes()
并查看其作用,而不是使用x = b'4'
转换您的Python字符串。