最近由于测试蓝牙串口模块比较多,为了提高效率,顺便接触一下串口调试工具开发。用QT写了一个小测试程序。
用到三个源文件:main.cpp,mainwindow.h,mainwindow.cpp。先贴代码。
main.cpp
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtSerialPort/QSerialPort>
#include <QTimer>
#define CMD_NULL 0x00000000
#define CMD_SET_NAME 0x00000001
#define CMD_SET_PIN 0x00000002
#define CMD_SET_BAUD 0x00000004
#define CMD_SET_SERVER 0x00000008
#define CMD_GET_VER 0x00000010
namespace Ui {
class MainWindow;
}
typedef struct{
int comName;
int baudRate;
int checkSum;
int dataBits;
int stopBits;
int btNumber;
}SystemSet;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_7_clicked();
void on_pushButton_8_clicked();
void on_pushButton_clicked();
void ReadCom();
void on_pushButton_2_clicked();
void ProcTimeOut();
void on_pushButton_4_clicked();
void on_pushButton_3_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
private:
Ui::MainWindow *ui;
SystemSet systemSet;
QSerialPort myserial;
QTimer appTimer;
int cmdFlag;
int waitTime;
int isSetNum;
QByteArray serialData;
// QSerialPortInfo serialInfo;
void SetSystemParam();
void SaveSystemSet();
void SetSerialPortInfo();
void SetSerialBaudRate();
void ProcReceiveData();
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFile>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
cmdFlag = CMD_NULL;
serialData.clear();
waitTime = 0;
isSetNum = 0;
setWindowTitle("蓝牙模块设置程序");
SetSystemParam();
SetSerialPortInfo();
appTimer.setSingleShot(false);
connect(&appTimer,SIGNAL(timeout()),this,SLOT(ProcTimeOut()));
appTimer.start(1000);
}
MainWindow::~MainWindow()
{
if(myserial.isOpen())
{
myserial.clear();
myserial.close();
}
delete ui;
}
void MainWindow::ProcTimeOut()
{
// qDebug("-----ProcTimeOut----cmdFlag:%d,waitTime:%d",cmdFlag,waitTime);
if(waitTime > 0)
{
if(--waitTime <= 0)
{
QString title;
if(cmdFlag & CMD_SET_NAME)
{
title += tr("设置蓝牙名称失败 ");
cmdFlag &= (~CMD_SET_NAME);
}
if(cmdFlag & CMD_SET_PIN)
{
title += tr("设置蓝牙配对码失败 ");
cmdFlag &= (~CMD_SET_PIN);
}
if(cmdFlag & CMD_SET_BAUD)
{
title += tr("设置蓝牙波特率失败 ");
cmdFlag &= (~CMD_SET_BAUD);
}
if(cmdFlag & CMD_SET_SERVER)
{
title += tr("设置蓝牙从设备失败 ");
cmdFlag &= (~CMD_SET_SERVER);
}
if(cmdFlag & CMD_GET_VER)
{
title += (tr("获取版本号失败"));
cmdFlag &= (~CMD_GET_VER);
}
if(!title.isEmpty())
{
ui->label_9->setText(title);
}
else
{
ui->label_9->setText(tr("发送指令结果"));
}
}
}
}
void MainWindow::on_pushButton_7_clicked()
{
ui->textEdit->clear();
}
void MainWindow::on_pushButton_8_clicked()
{
ui->textEdit_2->clear();
}
void MainWindow::on_pushButton_clicked()
{
// int value = ui->comboBox->currentIndex();
if(myserial.isOpen())
{
myserial.flush();
myserial.close();
ui->pushButton->setText(tr("打开串口"));
ui->label->setText(tr("串口未打开"));
if(isSetNum)
{
systemSet.btNumber++;
isSetNum = 0;
}
return;
}
SetSerialBaudRate();
SaveSystemSet();
if(myserial.open(QIODevice::ReadWrite))
{
isSetNum = 0;
myserial.clear();
ui->pushButton->setText(tr("关闭串口"));
ui->label->setText(tr("串口已经打开"));
connect(&myserial,SIGNAL(readyRead()),this,SLOT(ReadCom()));
}
else
{
QMessageBox::warning(this,tr("打开串口失败"),tr("串口被占用"),QMessageBox::Ok);
return;
}
}
void MainWindow::ReadCom()
{
QByteArray temp = myserial.readAll();
ui->textEdit_2->insertPlainText(temp);
serialData.append(temp);
ProcReceiveData();
}
void MainWindow::ProcReceiveData()
{
;
}
void MainWindow::SaveSystemSet()
{
QFile *pfile = new QFile("system.ini");
if(pfile->open(QIODevice::ReadWrite))
{
pfile->write((char *)&systemSet,sizeof(SystemSet));
pfile->close();
}
delete(pfile);
}
void MainWindow::SetSystemParam()
{
QFile *pfile = new QFile("system.ini");
systemSet.baudRate = 1;
systemSet.checkSum = 0;
systemSet.comName = 0;
systemSet.dataBits = 3;
systemSet.stopBits = 0;
systemSet.btNumber = 66;
if(!pfile->exists())
{
/* pfile->open(QIODevice::ReadWrite);
pfile->write((char *)&systemSet,sizeof(SystemSet));
pfile->close();*/
delete(pfile);
return;
}
if(!pfile->open(QIODevice::ReadWrite))
{
delete(pfile);
return;
}
pfile->read((char *)&systemSet,sizeof(SystemSet));
pfile->close();
delete(pfile);
}
void MainWindow::SetSerialPortInfo()
{
QString text;
ui->comboBox->setCurrentIndex(systemSet.comName);
ui->comboBox_5->setCurrentIndex(systemSet.baudRate);
ui->comboBox_2->setCurrentIndex(systemSet.checkSum);
ui->comboBox_3->setCurrentIndex(systemSet.dataBits);
ui->comboBox_4->setCurrentIndex(systemSet.stopBits);
text = "UTA60A";
text += QString("%1").arg(systemSet.btNumber,4,10,QChar('0'));
ui->lineEdit->setText(text);
ui->comboBox_6->setCurrentIndex(5);
}
void MainWindow::SetSerialBaudRate()
{
/*
switch(systemSet.comName){
case 0:
myserial.setPortName("COM1");
break;
case 1:
myserial.setPortName("COM2");
break;
case 2:
myserial.setPortName("COM3");
break;
case 3:
myserial.setPortName("COM4");
break;
case 4:
myserial.setPortName("COM5");
break;
default:
break;
}
*/
myserial.setPortName(ui->comboBox->currentText());
switch (systemSet.baudRate) {
case 0:
myserial.setBaudRate(QSerialPort::Baud4800);
break;
case 1:
myserial.setBaudRate(QSerialPort::Baud9600);
break;
case 2:
myserial.setBaudRate(QSerialPort::Baud19200);
break;
case 3:
myserial.setBaudRate(QSerialPort::Baud38400);
break;
case 4:
myserial.setBaudRate(QSerialPort::Baud57600);
break;
case 5:
myserial.setBaudRate(QSerialPort::Baud115200);
break;
default:
break;
}
switch (systemSet.checkSum) {
case 0:
myserial.setParity(QSerialPort::NoParity);
break;
case 1:
myserial.setParity(QSerialPort::OddParity);
break;
case 2:
myserial.setParity(QSerialPort::EvenParity);
break;
default:
break;
}
switch(systemSet.dataBits){
case 0:
myserial.setDataBits(QSerialPort::Data5);
break;
case 1:
myserial.setDataBits(QSerialPort::Data6);
break;
case 2:
myserial.setDataBits(QSerialPort::Data7);
break;
case 3:
myserial.setDataBits(QSerialPort::Data8);
break;
default:
break;
}
switch(systemSet.stopBits){
case 0:
myserial.setStopBits(QSerialPort::OneStop);
break;
case 1:
myserial.setStopBits(QSerialPort::TwoStop);
break;
default:
break;
}
myserial.setFlowControl(QSerialPort::NoFlowControl);
}
void MainWindow::on_pushButton_2_clicked()
{
QString command = "AT+NAME";
command += ui->lineEdit->text();
if(myserial.isOpen())
{
myserial.write((char *)command.data(),command.count());
command += "\r\n";
ui->textEdit->insertPlainText(command);
cmdFlag |= CMD_SET_NAME;
waitTime = 3;
}
}
void MainWindow::on_pushButton_4_clicked()
{
QString command = "AT+PIN";
command += ui->lineEdit_2->text();
if(myserial.isOpen())
{
myserial.write((char *)command.data(),command.count());
command += "\r\n";
ui->textEdit->insertPlainText(command);
cmdFlag |= CMD_SET_PIN;
waitTime = 3;
}
}
void MainWindow::on_pushButton_3_clicked()
{
QString command = "AT+";
if(myserial.isOpen())
{
/* if(ui->comboBox_6->currentText() == tr("4800"))*/
switch (ui->comboBox_6->currentIndex()) {
case 0:
command += "BAUD3";
break;
case 1:
command += "BAUD4";
break;
case 2:
command += "BAUD5";
break;
case 3:
command += "BAUD6";
break;
case 4:
command += "BAUD7";
break;
case 5:
command += "BAUD8";
break;
default:
return;
}
myserial.write((char *)command.data(),command.count());
command += "\r\n";
ui->textEdit->insertPlainText(command);
cmdFlag |= CMD_SET_BAUD;
waitTime = 3;
}
}
void MainWindow::on_pushButton_5_clicked()
{
QString command = "AT+ROLE=S";
if(myserial.isOpen())
{
myserial.write((char *)command.data(),command.count());
command += "\r\n";
ui->textEdit->insertPlainText(command);
cmdFlag |= CMD_SET_SERVER;
waitTime = 3;
}
}
void MainWindow::on_pushButton_6_clicked()
{
QString command = "AT+VERSION";
if(myserial.isOpen())
{
myserial.write((char *)command.data(),command.count());
command += "\r\n";
ui->textEdit->insertPlainText(command);
cmdFlag |= CMD_GET_VER;
waitTime = 3;
}
}