Невозможно связаться с Arduino, используя QSerialPort, если arduino-ide не открывал соединение ранее

Я использую следующий код, чтобы открыть последовательный порт для связи с Arduino.

  const qint32 baud = Global::getInstance().getSettings().value("Hardware/baudRate", 115200).toInt();
const QString portName = Global::getInstance().getSettings().value("Hardware/port", "COM3").toString();
port.setPortName(portName);

if(!port.open(QIODevice::ReadWrite))
{
qFatal("Unable to open serial port");
exit(1);
}
if(!port.setParity(QSerialPort::NoParity) ||
!port.setStopBits(QSerialPort::OneStop) ||
!port.setDataBits(QSerialPort::Data8) ||
!port.setFlowControl(QSerialPort::NoFlowControl ) ||
!port.setBaudRate(baud))
{
qFatal("Unable to configure serial port");
exit(1);
}
if(port.error() != QSerialPort::NoError)
{
qFatal("some error occurred!");
exit(1);
}

После этого я пытаюсь прочитать из соединения, используя следующий код:

bool Light::waitForReady()
{
char data[1];
data[0] = -1;
if(port.waitForReadyRead(10000))
{
const int numRead = port.read(&data[0], 1);
if(numRead == 1)
{
return data[0] == (char)RDY;
}
else
{
qWarning("Read error, read %d bytes", numRead);
}
}
else
{
qWarning("Read timeout");
return false;
}
return false;
}

Чтение делает не время ожидания истекло после ожидания в течение 10 секунд.
Однако, когда я открываю и закрываю последовательный монитор внутри arduino-ide перед запуском моего кода QT, это работает. Я предполагаю, что ardunio-ide делает что-то с портом, который мне не хватает, но, насколько я могу судить, я использую те же настройки, что и arduino-ide, чтобы открыть последовательный порт.

Это код, который работает на Arduino:

void setup()
{
Serial.begin(115200);
Serial.write(RDY);
}

это У парня была похожая проблема, и он сравнил настройки последовательного порта putty и QSerialPort. Он обнаружил, что настройки fDtrControl, fOutX а также fIutX различались. Я пытался изменить fDtrControl но это не имело никакого эффекта. Я не знаю, как установить fOutX а также fIutX используя QT.

Есть идеи, что может быть причиной этой ошибки?

редактировать:
Решение: port.setDataTerminalReady(true) скучал

3

Решение

Я не знаю, как установить fOutX и fIutX с помощью QT.

Пожалуйста, прочитайте мой ответ в Вот.

Также убедитесь, что конфигурация Putty (или вашего arduino-терминала) (четность, управление потоком, скорость передачи) совпадает с конфигурацией QSerialPort. Кроме того, вы можете попробовать пример Terminal (из примеров QtSerialPort), например, вместо Putty (или вашего ардуино-терминала).

UPD:

Вы можете попробовать добавить:

setDataTerminalReady(true);

а также

setRequestToSend(true);

после открытия порта.

4

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector