Comment écrire sur le port série à l'aide Qextserialport
Je suis en utilisant Ubunt 10.10.
Je veux communiquer avec un microcontrôleur (ATmega328p) à l'aide de série par QT, donc pour le test, j'ai créé une application fictive sur le microcontrôleur qui lit les caractères de l'UART et répond sur le port série (réponses) avec le même personnage, mais entre crochets.
Si PC envoyer: à un , puis le PC reçoit la réponse [a]
L'application fonctionne très bien, quand je suis à l'aide d'hyper terminal (GtkTerm) pour envoyer les personnages de PC, mais quand j'utilise QT, il ne fonctionne pas. Je suis de l'envoi à partir de QT un caractère sur le port série, et je suis en attente de recevoir une réponse sur l'hyper terminal, mais je ne reçois pas de réponse.
De Communication série propriétés: Baud9600, Parity_none, Stop_bits_1, Data_8bits, Flow_control_Off
#include <QtCore/QCoreApplication>
#include <qextserialport.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const char data[]= "e";
QextSerialPort * port = new QextSerialPort("/dev/ttyUSB0");
port->setBaudRate(BAUD9600);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
port->setTimeout(0);
bool res = false;
res = port->open(QIODevice::ReadWrite | QIODevice::Unbuffered);
if(res)
{
qDebug("Opened");
qDebug(data);
int i = port->write(data, sizeof(data));
}
else
{
qDebug("Failed to connect");
}
return a.exec();
}
Aucune idée de ce qui est mal?
port->write
retour?je suis de l'envoi à partir de QT un caractère sur le port série, et je suis en attente de recevoir une réponse sur l'hyper terminal, mais je ne reçois pas de réponse. je ne suis pas entièrement sûr de savoir comment les ports série sous Linux, mais ne sont-ils pas exclusivement ouvert par une application à la fois? Pourquoi n'avez-vous pas lu la réponse de l'intervalle Qt programme ainsi?
deux idées: 1) définir un délai d'expiration pour 100; 2) faire frire à appeler flush après l'écriture
J'ai essayé les deux, le délai d'attente et la chasse d'idée et toujours rien ne se passe. @Manjabes
int i = port->write(data, sizeof(data));
Le débogueur ai i = 2
après l'exécution de cette ligneeh bien... cela signifie que les données d'au moins écrit de port. Peut-être que vous essayer d'attraper les données que vous avez envoyé dans le mauvais sens? si vous lisez dans le terminal le même port wou écrit - vous se rien, essayez une sorte d'espion à la place
OriginalL'auteur Karim | 2011-06-08
Vous devez vous connecter pour publier un commentaire.
Il ne fonctionne pas parce que vous ouvrez le port série 2 fois ( 1 fois en Qt , et d'un autre temps avec votre HyperTerminal ).
Si vous voulez obtenir la réponse de votre commande, vous avez sur votre Qt programme.
OriginalL'auteur Raphaël Poggi