写入 arduino 使用的 python 串口的问题(打开 light/move 伺服等...)

problem with writing to serial port in python to be used by arduino (to turn on light/move servo etc...)

我在通过写入 python 中的串行端口来指示我的 Arduino 执行不同的 if 语句时遇到问题。

我目前有一个 LED 和电阻器通过 GND 和 ~5 个数字引脚串联连接。我想在使用 python 访问串行端口(在我的例子中是 COM6)并写入串行端口“1”时打开 LED,并在写入串行端口“2”时关闭 LED .

Arduino 代码:

void setup()
{
  pinMode(5, OUTPUT);
  digitalWrite(5, LOW);
  Serial.begin(9600);

}

void loop() 
{
  if (Serial.available() > 0)
  {
    if (Serial.read() == '1')
    {
     digitalWrite(5, HIGH);
     delay(100);
    }
    else if (Serial.read() == '2')
    {
      digitalWrite(5, LOW);
      delay(100);
    }
  }
}

Python 终端代码:

In[1]: import serial
In[2]: ser1 = serial.Serial('COM6', 9600)
In[3] ser1.write('1'.encode())
Out[3]: 1

(我也不太明白 ser1.write(...) 命令返回的是什么,如果我在参数中尝试其他值,数字会改变...)

当我尝试使用

打开 LED 时
ser1.write('1'.encode())

LED 亮起,快乐的日子。

然而,当我尝试通过写入 python 终端来关闭它时:

ser1.write('2'.encode())

LED 不会熄灭...?请帮忙!

调用Serial.read() 从缓冲区中删除字节。第二次调用 Serial.read(),与 '2' 进行比较,只是 returns -1,因为没有更多数据了。

将其读入变量并进行比较。

char c = Serial.read();
if (c == '1')
{
    digitalWrite(5, HIGH);
    delay(100);
}
else if (c == '2')
{
    digitalWrite(5, LOW);
    delay(100);
}