pyserial和arduino无法将数据发送到arduino

时间:2018-05-06 13:15:23

标签: python-3.x arduino pyserial

我尝试从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())

1 个答案:

答案 0 :(得分:0)

实际上很难回答您的问题,因为您发布了不完整的代码,而且我也没有任何有关从python脚本获取错误的信息。

Arduino在打开串行端口后重新启动,这是自举程序的标准行为。您可以在arduino web page上阅读有关它的更多信息。但这实际上意味着,草图在连接到串行端口后约3秒后即可开始工作。只需在串行连接初始化之后将time.sleep(3)放入python代码中,您的脚本就可以按预期工作。

P.S。考虑使用Serial。parseInt()代替Arduino草图的waitForMN()函数中的笨重构造。