我尝试从python脚本发送一个整数到arduino,在板上分析它并发送一个整数到python脚本。我可以从arduino中收回数据,但是我无法将数据发送到arduino,因为它重新启动了。此外,它适用于Arduino IDE
我的想法是我通过python magicnumber = 387发送,而不是arduno将其与其owm MN = 387进行比较,而不是将MN发送到python,但是,当我开始从python发送数据时,它重新启动并且无效。如果可以请大多数用代码回答,因为我的英语不是很好。感谢
int magicNumber;//глобальные переменные
bool connection = false;
void setup()
{
pinMode(infoLed, OUTPUT);
Serial.begin(baudrate);
while (!Serial) {
fastBlink();
}
slowBlink();
EEPROM.get(magicNumberAddr, magicNumber);
normalBlink();
waitForMN();
}
void loop()
{
if (!connection) {
waitForMN();
}
slowBlink();
}
void waitForMN() {//двустороннее квинтирование
String data = "";
byte sizeofbuf = 0;
while (Serial.available() <= 0) {
fastBlink();
}
while (!connection) {
if (Serial.available()) {
sizeofbuf += 1;
char s = Serial.read();
data = String(data + s);
Serial.println(data.toInt());
if (sizeofbuf == 3) {
if (data.toInt() == magicNumber) {
Serial.println(magicNumber);
char k = Serial.read();
connection = true;
break;
} else {
Serial.read();
waitForMN();
}
}
}
}
}
蟒:
import serial
import time
ser = serial.Serial("/dev/ttyUSB1",9600,timeout=10)
ser.flush()
ser.write(str("387").encode())
time.sleep(1)
ser.write(str("387").encode())
print(ser.readline())
答案 0 :(得分:0)
实际上很难回答您的问题,因为您发布了不完整的代码,而且我也没有任何有关从python脚本获取错误的信息。
Arduino在打开串行端口后重新启动,这是自举程序的标准行为。您可以在arduino web page上阅读有关它的更多信息。但这实际上意味着,草图在连接到串行端口后约3秒后即可开始工作。只需在串行连接初始化之后将time.sleep(3)放入python代码中,您的脚本就可以按预期工作。
P.S。考虑使用Serial。parseInt()代替Arduino草图的waitForMN()函数中的笨重构造。