写入 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);
}
我在通过写入 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);
}