pyserial и arduino не могут отправлять данные в arduino - PullRequest
0 голосов
/ 06 мая 2018

Я пытаюсь отправить целое число из скрипта 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 голосов
/ 26 августа 2018

На самом деле трудно ответить на ваш вопрос, потому что вы опубликовали неполный код, а также у меня нет никакой информации о том, что вы получаете ошибку из скрипта Python.

Arduino перезагружается после открытия последовательного порта, и это стандартное поведение загрузчика. Подробнее об этом можно прочитать на веб-странице arduino . Но на самом деле это означает, что ваш эскиз начнет работать через ~ 3 секунды после подключения к последовательному порту. Просто вставьте time.sleep (3) в ваш код Python сразу после инициализации последовательного соединения, и ваш скрипт должен работать как задумано.

P.S. Попробуйте использовать Serial. parseInt () вместо громоздкой конструкции в функции waitForMN () эскиза Arduino.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...