Как написать на последовательный порт с помощью Qextserialport - PullRequest
4 голосов
/ 08 июня 2011

Я использую Ubunt 10.10.

Я хочу общаться с микроконтроллером (ATmega328p), используя последовательный интерфейс через QT, поэтому для тестирования я создал на микроконтроллере фиктивное приложение, которое читает символы из UART и отвечаетна последовательном порту (ответы) с тем же символом, но в скобках.

Если ПК отправляет: a, то ПК получает ответ [a]

Приложение работает отлично, когда яс помощью гипертерминала (GtkTerm) для отправки символов с ПК, но когда я использую QT, это не работает.Я посылаю из QT символ на последовательном порту, и я жду ответа на гипертерминале, но не получаю никакого ответа.

Свойства последовательной связи: 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();
}

Есть идеи, что не так?

1 Ответ

1 голос
/ 14 июня 2012

Это не работает, потому что вы открываете последовательный порт 2 раза (1 раз в Qt, а другой раз с помощью своего HyperTerminal).

Если вы хотите получить ответ от вашей команды, вы должны включить еговаша программа Qt.

...