在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例Qt 图形界面开发 → qt 串口通信示例源码

qt 串口通信示例源码

Qt 图形界面开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:1.01M
  • 下载次数:55
  • 浏览次数:407
  • 发布时间:2019-05-28
  • 实例类别:Qt 图形界面开发
  • 发 布 人:hjwgg
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 串口 通信

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】


#include "mycommdialog.h"
#include "ui_mycommdialog.h"


#include<QTimer>

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



    time_ReadSerialPort = new QTimer(this);
    time_Datafresh = new QTimer(this);

    ui->comboBoxBaudRate->addItem("9600");
    ui->comboBoxBaudRate->addItem("38400");
    ui->comboBoxBaudRate->addItem("57600");
    ui->comboBoxBaudRate->addItem("115200");
    ui->comboBoxBaudRate->setCurrentIndex(3);


    ui->comboBoxDataBits->addItem(QString("7位"));
    ui->comboBoxDataBits->addItem(QString("8位"));
    ui->comboBoxDataBits->setCurrentIndex(1);

    ui->comboBoxStopBits->addItem(QString("1位"));
    ui->comboBoxStopBits->addItem(QString("2位"));
    ui->comboBoxStopBits->setCurrentIndex(0);

    ui->comboBoxCheckBits->addItem("N");
    ui->comboBoxCheckBits->addItem("O");
    ui->comboBoxCheckBits->addItem("E");
    ui->comboBoxCheckBits->setCurrentIndex(0);

    ui->comboBoxPort->addItem("ttyUSB0");
    ui->comboBoxPort->addItem("ttyUSB1");
    ui->comboBoxPort->setCurrentIndex(0);

    ui->pushButtonCloseCom->setEnabled(false);
    ui->pushButtonLed0->setEnabled(false);
    ui->pushButtonLed1->setEnabled(false);



    //以可读写方式打开串口

    //定义一个结构体,用来存放串口各个参数

    //信号和槽函数关联,当串口缓冲区有数据时,进行读串口操作

    connect(this,SIGNAL(nowStartSerialPort(bool)),&commThread,SLOT(set_SerialPortFullLoad(bool)));
    connect(this,SIGNAL(writeToSerialPort(unsigned char * , int )),&commThread,SLOT(readyWriteSerialPort(unsigned char * , int)));
    connect(&commThread,SIGNAL(sendDataToUI( unsigned char*, int)),this,SLOT(recieveDataFromSerialPort ( unsigned char * , int)));

    connect(&commThread,SIGNAL(sendDataToServer( unsigned char*, int)),&sockThread,SLOT(recieveDataFromSerialPort ( unsigned char * , int)));

    connect(this,SIGNAL(nowStartCommHost(  QString , int )),&sockThread,SLOT(readyCommHost( QString , int )));
    connect(this,SIGNAL(writeToHost(unsigned char * , int )),&sockThread,SLOT(readyWriteToHost(unsigned char * , int)));
    connect(&sockThread,SIGNAL(sendDataToUI( unsigned char*, int)),this,SLOT(recieveDataFromHost ( unsigned char * , int)));

    connect(this,SIGNAL(SetPort( int )),&commThread,SLOT(setPort( int)));
    connect(this,SIGNAL(SetBaudRate( int )),&commThread,SLOT(setBaudRate( int)));
    connect(this,SIGNAL(SetDataBits( int )),&commThread,SLOT(setDataBits( int)));
    connect(this,SIGNAL(SetStopBits( int )),&commThread,SLOT(setStopBits( int)));
    connect(this,SIGNAL(SetCheckBits( int )),&commThread,SLOT(setCheckBits( int)));


}

mycommDialog::~mycommDialog()
{

    delete ui;

}



void mycommDialog::recieveDataFromSerialPort( unsigned char * buff, int len)
{
    if(len==sizeof(DataBuf1))
    {
        DataBuf1 * rxdata = (DataBuf1 *)buff;

        unsigned int temp =( unsigned int) rxdata->data.tValue;
        unsigned int hum = (unsigned int)rxdata->data.hValue;
        hum = hum & 0x0000ffff;
        temp = temp & 0x0000ffff;
        ui->lineEditTemp->setText(QString::number(temp));
        ui->lineEditHum->setText(QString::number(hum));
    }
}

void mycommDialog::recieveDataFromHost( unsigned char * buff, int len)
{


}

void mycommDialog::CleanUI()
{
    time_Datafresh->stop();
    ui->lineEditTemp->clear();
    ui->lineEditHum->clear();
}

void mycommDialog::on_pushButtonOpencom_clicked()
{

    emit nowStartSerialPort(true);
     commThread.start();

    sockThread.start();
    emit nowStartCommHost(ui->lineEditServIP->text(),ui->lineEditPort->text().toInt());

      time_Datafresh->start(1000);
      ui->pushButtonOpencom->setEnabled(false);
      ui->pushButtonCloseCom->setEnabled(true);
      ui->pushButtonLed0->setEnabled(true);
      ui->pushButtonLed1->setEnabled(true);

      ui->comboBoxBaudRate->setEnabled(false);
      ui->comboBoxCheckBits->setEnabled(false);
      ui->comboBoxDataBits->setEnabled(false);
      ui->comboBoxPort->setEnabled(false);
      ui->comboBoxStopBits->setEnabled(false);

    //struct PortSettings myCommSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};


    /*
    myComm = new Posix_QextSerialPort("/dev/ttyUSB0",QextSerialBase::Polling);
    if(myComm->isOpen())
    {
        myComm->close();
    }
   myComm ->open(QIODevice::ReadWrite);
   myComm->setBaudRate(BAUD115200);
   myComm->setDataBits(DATA_8);
   myComm->setStopBits(STOP_1);
   myComm->setParity(PAR_NONE);
   myComm->setFlowControl(FLOW_OFF);
   myComm->setTimeout(50);
   myComm->flush();

   // connect(myComm,SIGNAL(readyRead()),this,SLOT(readCom()));
   */



    //connect(time_ReadSerialPort,SIGNAL(timeout()),this,SLOT(readCom())); //QextSerialBase::Polling
     //time_ReadSerialPort->start(1500);


}



void mycommDialog::on_pushButtonCloseCom_clicked()
{

   time_ReadSerialPort->stop();
   emit nowStartSerialPort(false);

   sockThread.terminate();
   commThread.terminate();


    ui->pushButtonOpencom->setEnabled(true);
    ui->pushButtonCloseCom->setEnabled(false);
    ui->pushButtonLed0->setEnabled(false);
    ui->pushButtonLed1->setEnabled(false);

    ui->comboBoxBaudRate->setEnabled(true);
    ui->comboBoxCheckBits->setEnabled(true);
    ui->comboBoxDataBits->setEnabled(true);
    ui->comboBoxPort->setEnabled(true);
    ui->comboBoxStopBits->setEnabled(true);


}




void mycommDialog::readCom()
{
    /*DataBuf * rxdata = new DataBuf;
    //定义好的包头标志定义好的包头标志
    //注意:原包头为shor int (0x55aa),但存储顺序为小尾顺序,在内存中是0xaa在前,0x55在后
    unsigned char startBytes[2] = {0xaa,0x55};
    unsigned char buff[40];
    int len = sizeof(DataBuf);

    //if(serialPort->GetBytes(buff,len))
    if(serialPort->GetBytesAt(buff,len,startBytes,2))//通过查找包头标志,在数据包的起始位置读取数据
    {
        rxdata = (DataBuf *)buff;
        int temp = (int) rxdata->data.tValue;
        int hum = (int)rxdata->data.hValue;
        ui->lineEditTemp->setText(QString::number(temp));
        ui->lineEditHum->setText(QString::number(hum));
    }



    //////////////////////////////////
    //DataBuf * rxdata;
   //int len =myComm-> bytesAvailable();
   // if(myComm->bytesAvailable()>=sizeof(DataBuf))
   // {
   //    // QByteArray temp = myComm->readAll();
        //rxdata = (DataBuf*)temp.data();
   //     int datalen = myComm->readData((char*)rxdata,sizeof(DataBuf));
    //   if(datalen == sizeof(rxdata))
    //    {
    //       int temp = (int) rxdata->data.tValue;
    //       int hum = (int)rxdata->data.hValue;
    //       ui->lineEditTemp->setText(QString::number(temp));
    //       ui->lineEditHum->setText(QString::number(hum));
    //    }
 //   }
    ////////////////////////////////////////////


  //读取串口缓冲区的所有数据给临时变量temp
    //QByteArray temp = myComm->readAll();

    //将串口的数据显示在窗口的文本浏览器中
    //ui->textBrowser->insertPlainText(temp);
*/
}



void mycommDialog::on_pushButtonLed0_clicked()
{
    cmdBuf cmdbuf;
    memset(cmdbuf.data, 0, sizeof(cmdbuf.data));
    cmdbuf.bufHead = 0x55aa;
    cmdbuf.bufEnd=0xaa55;
    cmdbuf.cmd = 0x01;
    cmdbuf.data_len = 1;
    cmdbuf.data[0] = 5;

    emit writeToSerialPort((unsigned char*)&cmdbuf, sizeof(cmdBuf));
}

void mycommDialog::on_pushButtonLed1_clicked()
{
    cmdBuf cmdbuf;
    memset(cmdbuf.data, 0, sizeof(cmdbuf.data));
    cmdbuf.bufHead = 0x55aa;
    cmdbuf.bufEnd=0xaa55;
    cmdbuf.cmd = 0x02;
    cmdbuf.data_len = 1;
    cmdbuf.data[0] = 5;

    emit writeToSerialPort((unsigned char*)&cmdbuf, sizeof(cmdBuf));

}

void mycommDialog::on_comboBoxPort_currentIndexChanged(int index)
{
    emit SetPort(index);
}

void mycommDialog::on_comboBoxBaudRate_currentIndexChanged(int index)
{
    emit SetBaudRate(index);
}

void mycommDialog::on_comboBoxDataBits_currentIndexChanged(int index)
{
    emit SetDataBits(index);
}

void mycommDialog::on_comboBoxStopBits_currentIndexChanged(int index)
{
    emit SetStopBits(index);
}



void mycommDialog::on_comboBoxCheckBits_currentIndexChanged(int index)
{
    emit SetCheckBits(index);
}

void mycommDialog::on_lineEditServIP_editingFinished()
{
    unsigned char strIP[20];
    //ui->lineEditServIP->setText(QString::number(192.168.1.100));

    //emit servIPChanged(strIP,20);
}



标签: 串口 通信

实例下载地址

qt 串口通信示例源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警