基本信息
源码名称:qt 串口通信示例源码
源码大小:1.01M
文件格式:.rar
开发语言:C/C++
更新时间:2019-05-28
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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);
}