Russian Qt Forum
Ноябрь 24, 2024, 01:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Считывание данных из com порта  (Прочитано 15103 раз)
ryazancity
Гость
« : Декабрь 15, 2012, 15:01 »

Ребят,помогите нужно что бы прога считывала с com порта либо 1 либо 0 с трех датчиков, данные приходят в виде 1 0 1 т.е просто через пробел. И вся Фишка в том что бы при единичках в первых двух должно выводиться предупреждение,а при единичке в третьем числе,компьютер должен аварийно отключаться,либо с сохранением,либо без сохранения параметров(на усмотрение пользователя)
Записан
skandinavijos
Гость
« Ответ #1 : Декабрь 15, 2012, 15:15 »

Вопрос в чем? как работать с портом или как вычленить значения?
Записан
ryazancity
Гость
« Ответ #2 : Декабрь 15, 2012, 15:35 »

И в том и в том)))
Записан
skandinavijos
Гость
« Ответ #3 : Декабрь 15, 2012, 16:07 »

C ком портом можно работать через WinAPI, boost, QSerialPort и т.д. Я предпочитаю последнее. Он унаследован от QIODevice и работа с ним похожа на работу с QFile. Короче самое простое, что может быть. В комплекте примеры идут, там все просто. Далее вешаешь свой слот на его сигнал readyRead(), который срабатывает, когда в порту данные есть. В слоте обрабатываешь. Например: если в буфере меньше трех байт, то return, иначе cчитываешь три байта, например QByteArray = port.read(3) и далее все просто, сравниваешь байты этого QByteArray'я с нулями или чего тебе там надо
Записан
ryazancity
Гость
« Ответ #4 : Декабрь 15, 2012, 20:27 »

а если я полный ноль в qt??? Не поможете с кодом?
Записан
Bepec
Гость
« Ответ #5 : Декабрь 15, 2012, 21:49 »

С С++ знаком? Если да, то поможем, да и ты сам справишься. Если нет, начинать надо с простого.
Записан
ryazancity
Гость
« Ответ #6 : Декабрь 16, 2012, 22:18 »

С с++ знаком на начальном уровне,а с этой штукой нужно в краткие сроки разобраться...((((
Записан
Bepec
Гость
« Ответ #7 : Декабрь 16, 2012, 22:25 »

Если очень срочно, то выкидывай в объявления с ценой.

Если не очень, то смотри примеры QSerialport. Они внятные и простые.

Хотя будет трудно с наскоку понять Qt.
Записан
ryazancity
Гость
« Ответ #8 : Декабрь 16, 2012, 22:27 »

Пасиб,сейчас придумаем что-нть
Записан
ctin
Гость
« Ответ #9 : Декабрь 17, 2012, 14:47 »

Два варианта: сделать вручную поэтапно или воспользоваться библиотекой и экземплом к ней.
Лично я начал со второго.

Можешь писать мне в скайп ctinka1
Записан
ryazancity
Гость
« Ответ #10 : Декабрь 17, 2012, 19:23 »

вот такая фигня, как избавиться не пойму
:59 строка serial->setBaudRate(baudRate);ошибка при сборке invalid conversion from 'int' to 'const char*'
 и тут же initializing argument 1 of 'QString::QString(const char*)'
Записан
ryazancity
Гость
« Ответ #11 : Декабрь 17, 2012, 19:25 »

а еще один вопрос.  if(initSerial(tr("/dev/ttyUSB0"), 9600) == false) это для UBUNTU а для WINDOWS что написать? какой путь?Непонимающий
Записан
ryazancity
Гость
« Ответ #12 : Декабрь 17, 2012, 19:45 »

#include "mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    widget = new QWidget();
    grid = new QGridLayout();
    button_show = new QPushButton("Show");
    button_hide = new QPushButton("Hide");
    button_blink = new QPushButton("Blink");
    button_blink_n = new QPushButton("Blink 0");
    editLine = new QLineEdit("0");

    /* connect signals to slots */
    connect(editLine, SIGNAL(textChanged(QString)), this, SLOT(setButtonBlinkN(QString)));
    connect(button_show, SIGNAL(clicked()), this, SLOT(ShowLigth()));
    connect(button_hide, SIGNAL(clicked()), this, SLOT(HideLigth()));
    connect(button_blink, SIGNAL(clicked()), this, SLOT(Blink()));
    connect(button_blink_n, SIGNAL(clicked()), this, SLOT(BlinkN()));

    /* only 0..9 number   */
    editLine->setInputMask("9");
    grid->addWidget(button_show, 0, 0);
    grid->addWidget(button_hide, 0, 1);
    grid->addWidget(button_blink, 0, 2);
    grid->addWidget(editLine, 0, 3);
    grid->addWidget(button_blink_n, 0, 4);

    widget->setLayout(grid);

    setCentralWidget(widget);

    /* init QByteArray */
    ba.clear();
    ba.resize(1);

    if(initSerial(tr("/dev/ttyUSB0"), 9600) == false)
    {
        qDebug() << "Error initSerial";
        exit(-1);
    }
}

void MainWindow::setButtonBlinkN(QString n)
{
    button_blink_n->setText("Blink " + n);
}

/* init serial port, set baud rate */
bool MainWindow::initSerial(QString dev, int baudRate)
{
    serial = new AbstractSerial();
    serial->setDeviceName(dev);

    /* open or return false */
    if(serial->open(AbstractSerial::ReadWrite))
    {
        serial->setBaudRate(baudRate);
        /* if ready read call ReadData() */
        connect(serial, SIGNAL(readyRead()), this, SLOT(ReadData()));
    }
    else
    {
        return false;
    }

    return true;
}

/* Send data */
void MainWindow::send(QByteArray &ba)
{
    serial->write(ba);
}

/* Not light Улыбающийся */

void MainWindow::ShowLigth()
{
    ba[0] = 'S';
    send(ba);
}

void MainWindow::HideLigth()
{
    ba[0] = 'H';
    send(ba);
}

void MainWindow::Blink()
{
    ba[0] = 'B';
    send(ba);
}

void MainWindow::BlinkN()
{
    ba[0] = 'N';
    send(ba);
    ba[0] = (char)editLine->text().toLocal8Bit().at(0);
    send(ba);
}

/* Read data */
void MainWindow::ReadData()
{
    qDebug() << serial->readAll();
}

MainWindow::~MainWindow()
{
    serial->close();
    delete serial;

    delete widget;
    delete grid;
    delete button_show;
    delete button_hide;
    delete button_blink;
    delete button_blink_n;
    delete editLine;
}
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #13 : Декабрь 17, 2012, 20:18 »

ryazancity, ты не ту либу смотришь, она уже давно устарела.

Вот что тебе нужно: QtSerialPort

Записан

ArchLinux x86_64 / Win10 64 bit
Bepec
Гость
« Ответ #14 : Декабрь 17, 2012, 20:25 »

И научись пользовать тегом
Код:
code
. Диез кнопочка.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.093 секунд. Запросов: 23.