Question

Je suis en train de faire une connexion série à une carte Arduino Diecimila avec QextSerialPort. Mon application se bloque si chaque fois que j'appelle port-> open (). La raison pour laquelle je pense que cela se produit parce que la réinitialisation de la carte Arduino se à chaque fois une connexion série elle est faite. Il y a une façon de ne pas faire la remise à zéro de la carte décrit ici , mais je ne peux pas comprendre comment obtenir QextSerialPort de le faire. Je ne peux régler la DTR false après le port a été ouvert que de l'aide pas beaucoup puisque le conseil d'administration a déjà lui-même remis à zéro par ce moment-là.

Le code pour les regards de connexion comme ceci:

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

Toutes les idées sur la façon d'y parvenir. Je ne dois pas nécessairement utiliser QextSerialPort si quelqu'un savoir d'une autre bibliothèque qui fait l'affaire.

Je suis nouveau à C ++ et Qt.

Mise à jour: J'ai remarqué que si je lance un script python qui se connecte au même port (en utilisant pyserial) avant d'exécuter le code ci-dessus, tout fonctionne très bien.

Était-ce utile?

La solution

J'ai eu un problème similaire.

Dans mon cas QExtSerial ouvrirait le port, je voudrais voir les lumières RX / TX sur le flash de la carte, mais aucune donnée ne sera reçue. Si j'ai ouvert le port avec le premier un autre programme de terminal QExtSerial fonctionnerait comme prévu.

Que résolu pour moi a été l'ouverture du port, la configuration des paramètres du port, puis faire de haute DTR et RTS pendant une courte période de temps.

C'était sous Windows 7 w / an ATMega32u4 (SFE Pro Micro).




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

Autres conseils

libserial est une utilisation de la bibliothèque incroyable I pour les applications en série autonomes pour mon Duemilanove.

qserialdevice utilisation!

Exemple:

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

Pouvez-vous utiliser un câble série 3 fils (tx / rx / gnd) sans DTR, les lignes RTS?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top