Python Arduino串行通信不兼容问题

时间:2019-03-13 16:53:02

标签: python-3.x serial-port arduino-uno

我正在尝试使用串行端口从Python向Arduino发送一些整数值,Python代码似乎正在工作,因为我看到Ardunio板上的TX LED闪烁,但是仍然连接到第12针的LED仍然不亮向上,Arduino代码似乎也可以正常工作,因为当我打开Arduino IDE的串行端口并发送“ 1”时,LED点亮,因此我认为Python发送的数据与Arduino类型之间存在某种不兼容期待。 Python代码:

ser = serial.Serial('COM3', 9600)
time.sleep(1)
ser.write('1'.encode())

Arduino代码:

void setup() {
Serial.begin(9600);
pinMode(12,OUTPUT);
}

void loop() {
int X;
if (Serial.available()>0)
{
  X = Serial.read();
  if(X == '1')
  {
    digitalWrite(12,HIGH);
    }
  else if(X == '0')
  {
    digitalWrite(12,LOW);
    }
}
}

所以我的问题是:

1)_代码中似乎是什么问题?

2)_Arduino希望从串行端口获取什么类型的数据?

3)_什么是从Python向Arduino发送超过255的整数值的最佳方法?这是正确的方法吗?

ser = serial.Serial('COM3', 9600)
S = 102
time.sleep(1)
data = [int(x)for x in str(S)]
for d in data:
    c = bytes(str(d), "ascii")
    ser.write(c)

2 个答案:

答案 0 :(得分:0)

我认为您正在弄乱类型 Serial.read为您提供byte,您需要将其转换为char进行比较。

尝试

   X = atoi((char)Serial.read())

读取字节->将其转换为char->转换为int

然后您可以使用if条件

if (X == 1)

答案 1 :(得分:0)

我在脚本的开头将X定义为一个字符,问题得以解决。