Содержание
Урок 1. Первый проект
Урок 2. Управление кнопками
Урок 3. Подключение LCD
Урок 4. Использование ШИМ
Урок 5. Таймеры
Урок 6.1. Статическая индикация
Урок 6.2. Динамическая индикация
Урок 7.1. Генерация звука
Урок 7.2. Генерация звука. Продолжение
Урок 8.1. Передача данных через UART
Урок 8.2. Передача данных через UART. Продолжение»
Урок 9. Передача данных через SPI
Урок 10. Изучение АЦП. Простой вольтметр
Урок 11. Получение синуса при помощи ШИМ
Урок 12. Измерение температуры
Урок 13. Внешние прерывания.
Урок 14. Использование отладчика
Урок 15.1. Управление инкрементальным энкодером
Урок 15.2. Управление громкостью, при помощи энкодера
Урок 16. Управление RGB светодиодом
Урок 17. Использование ИК
Урок 18.1. Знакомство с графическим дисплеем
Урок 18.2 Вывод изображения на графический дисплей
Урок 18.3 Вывод русскоязычного текста
Урок 19. Формирование сигнала, при помощи ЦАП (R2R)
Урок 20. Опрос матричной клавиатуры
Урок 21. Сторожевой таймер
Урок 22.1 Воспроизведение wav. Введение.
Урок 22.2 Воспроизведение wav. Продолжение.
Урок 23.1 Работа с внешней памятью
Урок 23.2 Работа с файловой системой Fat

8-logoНа всякий случай может кому пригодится. Требуется написать простую программку отправляющую байты по юарту, C# не тру, поэтому выбор пал на Qt Creator.

Все просто и примеров куча, а ничего не работает. После Visual C# не привычно чуть менее чем полностью. В общем наковырял, работает, проверено.

Непосредственно для работы с портом нужно включить либу, было много разных мнений что то докачивать, доустанавливать шаманскими методами, в итоге оказалось все в комплекте из коробки, достаточно подцепить инклуд

#include 

Аналогично для получения информации о количестве доступных портов

#include 

Единственное шаманское, что нужно сделать — в файл с расширением .pro нужно добавить

greaterThan(QT_MAJOR_VERSION, 4) {
    QT       += widgets serialport
} else {
    include($$QTSERIALPORT_PROJECT_ROOT/src/serialport/qt4support/serialport.prf)
}

Далее там где это необходимо открываем порт для чтения

serial.Open(QSerialPort::WriteOnly);

Настраиваем нужные скорости и прочие плюшки

serial.setBaudRate(QSerialPort::Baud2400);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);

Доступные варианты настроек удобнее смотреть нажатием Ctrl+Space, когда начинаешь что то печатать

Для отправки байта

serial.putChar(0xEA);

Для отправки нескольких байт

serial.write("hello");

Для того чтобы определить какое то действие для кнопки, щелкаем правой кнопкой мыши по ней в редакторе-перейти к слоту. В слотах выбираем то что нужно, если это щелчок мыши, то ищем clicked();. Далее в основном коде появляется обработчик нечто вроде void MainWindow::on_pushButton_2_clicked()

qserial

Небольшой пример:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 
#include 


QSerialPort serial;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //read avaible comports
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
            ui->comboBox->addItem(info.portName());
}

MainWindow::~MainWindow()
{
    delete ui;
}

//button send
void MainWindow::on_pushButton_clicked()
{
    //string for lineedit text
    QString str2 = ui->lineEdit->text();

    serial.write(str2.toUtf8());
    
}

//connect
void MainWindow::on_pushButton_2_clicked()
{
    //select name for our serial port from combobox
    if (serial.portName() != ui->comboBox->currentText())
    {
          serial.close();
          serial.setPortName(ui->comboBox->currentText());
    }

    //setup COM port
    serial.setBaudRate(QSerialPort::Baud2400);
    serial.setDataBits(QSerialPort::Data8);
    serial.setParity(QSerialPort::NoParity);
    serial.setStopBits(QSerialPort::OneStop);
    serial.setFlowControl(QSerialPort::NoFlowControl);
    serial.open(QSerialPort::WriteOnly);
   
}

void MainWindow::on_pushButton_3_clicked()
{
    //close
    serial.close();
}

Что отправили из приложения, то видим в терминале.
qserial2

66 комментариев: QT serial port

  • admin:

    Проблема в кодировке, очевидно

  • Алексей:

    Странно. У меня все идёт нормально.

  • constanta:

    Спасибо всем за помощь !!!!Проекти работают!!!а как кодировать??? з чем ето связано??

  • Алексей:

    Скинь скриншот экрана с вопросами.

  • constanta:

    куда скинуть?? здесь немогу прикрепить скриншот!!

  • Алексей:

    Ну хоть на Яндекс, а сюда ссылку.

  • constanta:

    киньте почту !!!! я всьо скину на почту!!

  • Владимир:

    Приложение работает! Спасибо!
    Подскажите пожалуйста, как Вы пользуетесь Tera Term одновременно с работой программы?

  • admin:

    tera term и qt сидят на разных ком портах, соединены виртуальным мостом com0com

  • Basil:

    Вы не могли бы выложить весь проект, QT поставил (4.8 — под XP новая что-то не ставится) библиотеку поставил вот отсюда -x, все поставилось , прилагаемые к библиотеке тестовые примеры собираются, Ваш чего-то никак. Никак не могу понять в чем дело 👿

  • Basil:

    Да в прилагаемых к библиотеке примерах, все вроде также но… 🙂

  • admin:

    Библиотека идет в комплекте с QT, поэтому ничего ставить дополнительно не нужно.

  • basil:

    Не, в 4.8 она ставится отдельно, это в пятой она интегрирована. Поэтому и проблемы-) Вроде встала и собралась, но часть примеров не работает вот я и пытаюсь разобраться в чем дело-)))

  • admin:

    как проявляется то что не работает?

  • basil:

    Не собираются сонсольнве примеры, а в Вашем что-то типа — G:\Qt\Projects\com__\mainwindow.cpp:20: error: undefined reference to `_imp___ZN15QSerialPortInfo14availablePortsEv’ говорит, хотя оконные собираются и работают.
    У меня сложилось пока мнение , что ей не нравится как у Вас объявлен (или где) экземпляр serial.

  • basil:

    Конкретно ошибки горят на
    foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts())
    ui->comboBox->addItem(info.portName());
    и на
    QSerialPort serial;

  • admin:

    если проекты собираются значит проблема не в либе. это в pro файл добавлено?
    greaterThan(QT_MAJOR_VERSION, 4) {
    QT += widgets serialport
    } else {
    include($$QTSERIALPORT_PROJECT_ROOT/src/serialport/qt4support/serialport.prf)
    }

    сравните pro файл примера со своим

  • basil:

    Пробовал и так, и писать полный путь к файлу- ни шиша-((( Видимо придется копать глубжее-)

  • basil:

    Попробовал последний раз на удачу, добавил как написано тут — » x » CONFIG += serialport
    LIBS += -lserialport
    на LIBS говорит нет файла — выбросил, оставил только строчку с CONFIG и , о чудо! — собралось и заработало…. С тоской вспоминаю питон))))
    на всякий случай рабочий файл —
    »
    QT += core gui

    greaterThan(QT_MAJOR_VERSION, 4) {
    QT += widgets serialport
    } else {
    include($$QTSERIALPORT_PROJECT_ROOT/src/serialport/qt4support/serialport.prf)
    }

    TARGET = com__
    TEMPLATE = app

    SOURCES += main.cpp\
    mainwindow.cpp

    HEADERS += mainwindow.h

    FORMS += mainwindow.ui
    CONFIG += serialport

    «

  • basil:

    Спасибо!

  • basil:

    Да, с этой строчкой CONFIG += serialport в pro файле заработали и консольные примеры. Нда… неужели такие танцы на qt всегда(((((

  • admin:

    это только начало 🙂 беда в том что альтернативы этому нет

  • Basil:

    Щас только вспомнил-) но вроде есть эклипс, может быть с тех пор как я его видал в последний раз и что-нибудь изменилось, но тогда он мне показался еще сложнее- пробовал кажется си++ на контроллерах — настройка и установка на целую страницу.

  • Basil:

    Может под винду он и ничего…

  • admin:

    возможно, не ковырял

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Счетчик
Яндекс.Метрика