基本信息
源码名称:qt 串口通信示例源码
源码大小:1.01M
文件格式:.rar
开发语言:C/C++
更新时间:2019-05-28
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍


#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);
}