1

QextSerialPort を使用して Arduino Diecimila ボードにシリアル接続しようとしています。port->open() を呼び出すたびにアプリケーションがハングアップします。これが起こっていると思う理由は、シリアル接続が確立されるたびに Arduino ボードがリセットされるためです。hereで説明されているボードをリセットしない方法がありますが、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が初めてです。

更新: 上記のコードを実行する前に (pySerial を使用して) 同じポートに接続する python スクリプトを実行すると、すべて正常に動作することに気付きました。

4

4 に答える 4

2

同様の問題がありました。

私の場合、QExtSerial がポートを開くと、ボード上の RX/TX ライトが点滅しますが、データは受信されません。最初に別の端末プログラムでポートを開いた場合、QExtSerial は期待どおりに動作します。

私にとってそれを解決したのは、ポートを開き、ポート設定を構成してから、DTR と RTS を短時間だけ高くすることでした。

これは、ATMega32u4 (SFE Pro Micro) を搭載した Windows 7 でした。




    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;
    }

于 2012-10-29T22:00:33.003 に答える
1

qシリアルデバイス使用!

例:

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

于 2011-06-15T11:18:21.457 に答える
1

libserialは、Arduino Duemilanove のスタンドアロン シリアル アプリケーションに使用する素晴らしいライブラリです。

于 2011-03-18T22:26:23.477 に答える
0

DTR、RTSラインのない3線式シリアルケーブル(tx / rx / gnd)を使用できますか?

于 2011-03-26T15:57:11.997 に答える