QSerialPort + Arduino Leonardo

bvpkm
Offline
Зарегистрирован: 13.10.2021

После переподключения к USB, QSerialPort успешно считывает байты с arduino только после открытия и закрытия  монитора порта в arduino IDE 

Версия Qt 5.15.1 MinGW 32 bit. К порту прилка и до и после открытиязакрытия монитора подключается успешно. Ардуина питается от USB компа.

Код скетча:

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.println("test");
}

Код подключения к порту в Qt:

bool ArduinoConnection::tryConnect()
{
    bool success = false;
    const auto infos = QSerialPortInfo::availablePorts();
    for (const QSerialPortInfo &info : infos) {
        if (info.description() == DESCRIPTION_STRING
                && info.manufacturer() == MANUFACTURER_STRING) {
            m_port->setPort(info);
            m_port->setDataBits(QSerialPort::Data8);
            m_port->setParity(QSerialPort::NoParity);
            m_port->setStopBits(QSerialPort::OneStop);
            m_port->setFlowControl(QSerialPort::NoFlowControl);
            m_port->setBaudRate(QSerialPort::Baud9600);
            if (m_port->open(QIODevice::ReadWrite)) {
                success = true;
                break;
            }
        }
    }
    return success;
}
Komandir
Offline
Зарегистрирован: 18.08.2018
while (! Serial); поможет скорее всего
bvpkm
Offline
Зарегистрирован: 13.10.2021

Не помогло.

Что еще было замечено: используя скетч ниже светодиод после рестарта не горит, после подключения к порту так же выключен. Но после закрытия порта методом QSerialPort::close() светодиод загорается. Далее, при открытом порте светодиод гаснет, а при закрытом горит. При открытии монитора порта из Arduino IDE светодиод загорается до перезагрузки платы, даже если закрыть IDE.

void setup() {
  pinMode(13, OUTPUT);
  Serial.begin(115200);
  while (!Serial);
}

void loop() {
  if (Serial) {
    digitalWrite(13, HIGH);
  } else {
    digitalWrite(13, LOW);
  }
}