使用串行通信在Arduino和Python之间进行通信时,Python程序需要等待一秒钟或更长时间才能执行代码:
import serial as ser
prt = ser.Serial(
port='COM18',
baudrate=9600,
parity=ser.PARITY_NONE,
stopbits=ser.STOPBITS_ONE,
bytesize=ser.EIGHTBITS
)
while 1:
prt.write(str(0) + '\r\n')
time.sleep(1) #I want to reduce this time
prt.write(str(1) + '\r\n')
time.sleep(1)
此代码包含sleep(1)
。它使我的Python程序停留了一秒钟。我想删除或减少这个时间。我试图使用0.9,Arduino没有正确响应。
这是我的Arduino计划:
#define led 13
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
byte incomingByte;
if (Serial.available() > 0) {
incomingByte = Serial.read();
switch (incomingByte) {
case '1':
digitalWrite(led, HIGH);
break;
case '0':
digitalWrite(led, LOW);
break;
}
}
}
如何减少或消除此延迟? 每次发送后为什么需要延迟(超过1秒)?
答案 0 :(得分:0)
您可以告诉Arduino在收到每条传入消息后发送一条短消息(1-2字节),即所谓的确认。在树莓派上,每次发送之后,您都将等待此确认,并且在您收到Arduino的确认之前,不发送任何内容。此技术已在许多消费类和工业串行协议中使用。
如果需要,还可以提高数据传输速率。但是,请注意速度超过115200。如果使用较长的非屏蔽线,则连接可能不稳定。