Проблема с подключением QextSerialPort к Arduino - PullRequest
1 голос
/ 29 июня 2010

Я пытаюсь установить последовательное соединение с платой Arduino Diecimila с помощью QextSerialPort. Мое приложение зависает, хотя каждый раз, когда я вызываю port-> open (). Я думаю, что это происходит потому, что плата Arduino перезагружается каждый раз, когда к ней устанавливается последовательное соединение. Существует способ не выполнить сброс платы, описанный здесь , но я не могу понять, как заставить QextSerialPort сделать это. Я могу установить для DTR значение false только после того, как порт был открыт, что не сильно помогает, поскольку к этому времени плата уже перезапустилась.

Код для подключения выглядит так:

 port = new QextSerialPort("/dev/tty.usbserial-A4001uwj");
 port->open(QIODevice::ReadWrite);
 port->setBaudRate(BAUD9600);   
 port->setFlowControl(FLOW_OFF);
 port->setParity(PAR_NONE);    
 port->setDataBits(DATA_8);   
 port->setStopBits(STOP_1);
 port->setDtr(false);
 port->setRts(false);

Любые идеи о том, как это сделать. Мне не обязательно использовать QextSerialPort, если кто-то знает о другой библиотеке, которая добивается цели.

Я новичок в C ++ и Qt.

UPDATE: Я заметил, что если я запускаю скрипт python, который подключается к тому же порту (используя pySerial) перед запуском вышеуказанного кода, все работает просто отлично.

Ответы [ 4 ]

2 голосов
/ 30 октября 2012

У меня была похожая проблема.

В моем случае QExtSerial открыл бы порт, я бы увидел, что индикаторы RX / TX на плате мигают, но данные не будут получены. Если я открою порт другой терминальной программой, сначала QExtSerial будет работать как положено.

Для меня это решило открыть порт, настроить параметры порта, а затем на короткое время установить высокие значения DTR и RTS.

Это было в Windows 7 с ATMega32u4 (SFE Pro Micro).


<code>

    bool serialController::openPort(QString portName) {
        QString selectPort = QString("\\\\.\\%1").arg(portName);
        this->port = new QextSerialPort(selectPort,QextSerialPort::EventDriven);
        if (port->open(QIODevice::ReadWrite | QIODevice::Unbuffered) == true) {
            port->setBaudRate(BAUD38400);
            port->setFlowControl(FLOW_OFF);
            port->setParity(PAR_NONE);
            port->setDataBits(DATA_8);
            port->setStopBits(STOP_1);
            port->setTimeout(500);

            port->setDtr(true);
            port->setRts(true);
            Sleep(100);
            port->setDtr(false);
            port->setRts(false);

            connect(port,SIGNAL(readyRead()), this, SLOT(onReadyRead()));

            return true;
        } else {
            // Device failed to open: port->errorString();
        }
        return false;
    }

1 голос
/ 15 июня 2011

qserialdevice use!

Пример:

http://robocraft.ru/blog/544.html

1 голос
/ 19 марта 2011

libserial - это невероятная библиотека, которую я использую для автономных последовательных приложений для моего Arduino Duemilanove.

0 голосов
/ 26 марта 2011

Можете ли вы просто использовать последовательный кабель 3xire (tx / rx / gnd) без линий DTR, RTS?

...