我正在尝试通过串行连接从树莓派向arduino发送一些数据,但速度似乎太慢。我要做的就是打开和关闭arduino板上的灯,然后通过串行连接发送切换灯的信号。
按以下代码所示的时间间隔打开和关闭灯。当延迟大于1时,它可以正常工作,指示灯会打开和关闭,但是当我将延迟更改为小于1时,指示灯根本不会闪烁。我尝试更改波特率,但这无济于事。这两块板上的波特率相同。 下面的代码在树莓派上。
import serial
import time
serial_light = serial.Serial('/dev/ttyACM0', 250000)
delay = float (2)
while(1):
inp = "60"
print ("On\n")
serial_light.write(inp.encode())
time.sleep(float (delay))
inp = "61"
print ("Off\n")
serial_light.write(inp.encode())
time.sleep(float (delay))
// Arduino代码
int light = 13;
void setup()
{
Serial.begin(250000);
pinMode(light, OUTPUT);
}
void loop()
{
int in = 0;
while(Serial.available() == 0);
in = Serial.parseInt();
if(in == 60)
{
digitalWrite(light, HIGH);
}
else if(in == 61)
{
digitalWrite(light, LOW);
}
}
再次,它适用于延迟值> = 1,但不在0到1之间。
答案 0 :(得分:1)
我更喜欢将String或int用作命令类型,而不是使用int的String。
您只需要在Python脚本中创建一个具有所需延迟的循环来发送开/关操作,然后在Arduino端只需接收命令并采取适当的操作即可。
Python脚本:
import serial
import time
delay = 2
serial_light = serial.Serial('/dev/ttyACM0', 9600)
serial_light.open()
# flush serial for unprocessed data
serial_light.flushInput()
while(1):
print("On")
serial_light.write(b"on")
time.sleep(delay)
print("Off")
serial_light.write(b"off")
time.sleep(delay)
Arduino代码:
int light = 13;
void setup()
{
Serial.begin(9600);
pinMode(light, OUTPUT);
}
void loop()
{
// check if we have input command
if (Serial.available())
{
// read input
String command = Serial.readString();
if (command == "on")
{
digitalWrite(light, HIGH);
}
else if (command == "off")
{
digitalWrite(light, LOW);
}
}
}