2016-01-10 2 views
0

Я пытаюсь открыть SerialPort с QT5.5, но порт всегда не может быть открыт. Я не знаком с портами и сериалом, но я не могу найти никаких проблем с тем, как я начал все. Я использую Mac OSXQT5 Проблемы с открытием SerialPort

void MainWindow::init_port() 
{ 
    port = new QSerialPort("com4");  //create port 

    port->open(QIODevice::ReadWrite); //open port 
    if(!port->isOpen()) 
    { 
     QMessageBox::warning(this, "port error", "Can't open port!"); 
    } 
// if(serial.open(QIODevice::ReadWrite)) 
//  serial.write("ok*"); 
    else 
    { 
     //error 
     qDebug() << port->errorString(); 
    } 

    //set port properties 
    port->setBaudRate(QSerialPort::Baud9600); //9600 FOR ARDUINO 
    port->setFlowControl(QSerialPort::NoFlowControl); 
    port->setParity(QSerialPort::NoParity); 
    port->setDataBits(QSerialPort::Data8); 
    port->setStopBits(QSerialPort::OneStop); 
} 

Моя общая цель состоит в том, чтобы осуществлять связь с микроконтроллером Arduino с графическим интерфейсом.

+0

В OS X нет такой вещи, как 'com4'. Сначала вы должны указать доступные порты. В Unices порты - это просто имена файлов внутри '/ dev', поэтому у вас может быть, например, 'ttyS3' означает'/dev/ttyS3', но этот узел устройства должен существовать. Самое простое: отключить устройство, 'ls/dev | sort> f1', подключить ваше устройство,' ls/dev | sort> f2; diff -u f1 f2', и ваш узел устройства будет показан в разнице. Убедитесь, что ваш код позволяет пользователю выбрать узел порта/устройства! –

ответ

0

Скорее всего, свойства порта должны быть установлены до того open():

void MainWindow::init_port() 
{ 
    port = new QSerialPort("com4");  //create port 

    //set port properties 
    port->setBaudRate(QSerialPort::Baud9600); //9600 FOR ARDUINO 
    port->setFlowControl(QSerialPort::NoFlowControl); 
    port->setParity(QSerialPort::NoParity); 
    port->setDataBits(QSerialPort::Data8); 
    port->setStopBits(QSerialPort::OneStop); 

    port->open(QIODevice::ReadWrite); //open port 
    if(!port->isOpen()) 
    { 
     QMessageBox::warning(this, "port error", "Can't open port!"); 
    } 
    else 
    { 
     //error 
     qDebug() << port->errorString(); 
    } 
} 

Также проверьте возвращаемое значение port->open(), и error() если open() не удалось.

Открывает последовательный порт в режиме OpenMode, а затем возвращает true, если успешно; в противном случае возвращает false и устанавливает код ошибки, который может быть получен путем вызова метода error().

+0

Я попытался открыть настройки после настройки, но у меня все еще такая же проблема. Код ошибки читается: «Нет такого файла или каталога», но я не уверен, что это значит ... – ajl123

+0

@ ajl123 - И ваш Arduino подключен к COM4? Какую возвращаемую стоимость и ошибку() вы получаете? Также проверьте ваш if/else, дает «ошибку» в обоих случаях :) –

+0

@ ajl123 - _ «Нет такого файла или каталога» _, значит «com4» не может быть найден. Доступен ли порт? На всякий случай: попробуйте также «COM4». Не уверен насчет Qt или ОС, на которой вы находитесь, но в Windows нам нужно _ "\\\\. \\ COM4" _. –

0

После открытия serialPort рекомендуется сэкономить 250 мсек, прежде чем проверять, открыт ли порт.

Смежные вопросы