#include "mainwindow.h"
#include "ui_mainwindow.h"
bool isOpen = false;
static const char blankString[] = QT_TRANSLATE_NOOP("SettingsDialog", "N/A");
const QString ORDER_ERROR = "警告:请先打开串口!";
const QString OPEN_ERROR = "错误:打开串口失败,请检查是否被其他程序占用或接线错误";
const QString CLOSE_ERROR = "错误:关闭串口失败,请检查是否已关闭串口或接线断开";
const QString OPEN_SUCCESS = "串口打开成功";
const QString CLOSE_SUCCESS = "\n串口成功关闭";
const QString OPERATION_TIPS = "提示信息:选择读卡模式后可自动寻卡!";
const QString READCARD_TIPS = "等待读卡:";
const QString CLOSEANTENNA_TIPS = "关闭天线:";
const QString READCARD_SUCCESS = "刷卡成功,可继续操作!";
const QString CLOSEANTENNA_SUCCESS = "天线已关闭,退出读卡模式!";
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
current = new QSerialPort;
QString description;
QString manufacturer;
QString serialNumber;
uiHelper = new UiHelper();
mysqlUtil = new MysqlUtil();
mysqlUtil->openDatabase();
//test
//mysqlUtil->openDatabase();
//mysqlUtil->testInsert("lyy","111");
//获取可以用的串口
QList<QSerialPortInfo> serialPortInfos = QSerialPortInfo::availablePorts();
//输出当前系统可以使用的串口个数
qDebug() << "Total numbers of ports: " << serialPortInfos.count();
//将所有可以使用的串口设备添加到ComboBox中
for (const QSerialPortInfo &serialPortInfo : serialPortInfos) {
QStringList list;
description = serialPortInfo.description();
manufacturer = serialPortInfo.manufacturer();
serialNumber = serialPortInfo.serialNumber();
list << serialPortInfo.portName()
<< (!description.isEmpty() ? description : blankString)
<< (!manufacturer.isEmpty() ? manufacturer : blankString)
<< (!serialNumber.isEmpty() ? serialNumber : blankString)
<< serialPortInfo.systemLocation()
<< (serialPortInfo.vendorIdentifier() ? QString::number(serialPortInfo.vendorIdentifier(), 16) : blankString)
<< (serialPortInfo.productIdentifier() ? QString::number(serialPortInfo.productIdentifier(), 16) : blankString);
ui->comboBox_serialPort->addItem(list.first(), list);
}
//设置波特率
ui->comboBox_baudRate->addItem(QStringLiteral("1200"), QSerialPort::Baud1200);
ui->comboBox_baudRate->addItem(QStringLiteral("2400"), QSerialPort::Baud2400);
ui->comboBox_baudRate->addItem(QStringLiteral("4800"), QSerialPort::Baud4800);
ui->comboBox_baudRate->addItem(QStringLiteral("9600"), QSerialPort::Baud9600);
ui->comboBox_baudRate->addItem(QStringLiteral("19200"), QSerialPort::Baud19200);
ui->comboBox_baudRate->addItem(QStringLiteral("38400"), QSerialPort::Baud38400);
ui->comboBox_baudRate->addItem(QStringLiteral("57600"), QSerialPort::Baud57600);
ui->comboBox_baudRate->addItem(QStringLiteral("115200"), QSerialPort::Baud115200);
ui->comboBox_baudRate->setCurrentIndex(3);
//显示区条件初始化
//ui->isHexRead->setCheckState(Qt::CheckState::Checked);
ui->isReadLine->setCheckState(Qt::CheckState::Checked);
ui->isReadPortError->setCheckState(Qt::CheckState::Checked);
ui->isReadPortStatus->setCheckState(Qt::CheckState::Checked);
ui->isReadTips->setCheckState(Qt::CheckState::Checked);
ui->isReadTime->setCheckState(Qt::CheckState::Checked);
ui->le_cardID->setReadOnly(true);//卡号显示区不可编辑
ui->le_balance->setReadOnly(true);//余额不可直接修改
ui->text_read->setReadOnly(true);//显示区不可直接修改
}
MainWindow::~MainWindow()
{
mysqlUtil->closeDatabase();
delete mysqlUtil;
delete ui;
delete temp;
delete current;
delete uiHelper;
}
void MainWindow::on_btn_openPort_clicked()
{
qDebug() << ui->btn_openPort->text();
if(ui->btn_openPort->text()==tr("打开串口")){
//设置串口名字
current->setPortName(ui->comboBox_serialPort->currentText());
//设置波特率
current->setBaudRate(ui->comboBox_baudRate->currentText().toInt());
//设置数据位
current->setDataBits(QSerialPort::Data8);
//设置奇偶校验位
current->setParity(QSerialPort::NoParity);
//设置停止位
current->setStopBits(QSerialPort::OneStop);
//设置流控
current->setFlowControl(QSerialPort::NoFlowControl);
if(current->open(QIODevice::ReadWrite)){
//尝试打开串口
textEditFormat(OPEN_SUCCESS,0);
textEditFormat(OPERATION_TIPS,2);
ui->comboBox_serialPort->setEnabled(false);
ui->comboBox_baudRate->setEnabled(false);
ui->btn_checkPort->setEnabled(false);
ui->btn_openPort->setText("关闭串口");
isOpen = true;
connect(current,&QSerialPort::readyRead,this,&MainWindow::readData);
} else {
textEditFormat(OPEN_ERROR,1);
qDebug() << "打开串口异常";
}
} else {
current->close();
if(!current->isOpen()){
textEditFormat(CLOSE_SUCCESS,0);
isOpen = false;
} else {
textEditFormat(CLOSE_ERROR,1);
qDebug() << "关闭串口异常";
}
ui->comboBox_serialPort->setEnabled(true);
ui->comboBox_baudRate->setEnabled(true);
ui->btn_checkPort->setEnabled(true);
ui->btn_openPort->setText("打开串口");
}
}
void MainWindow::readData(){
QByteArray readBuffer;
qDebug() << "readData:" << endl;
readBuffer = current->readAll();
if(!readBuffer.isEmpty()){
//ui->text_read->append(QString::fromUtf8(readBuffer));
readByteArray(readBuffer);
}
}
void MainWindow::on_btn_checkPort_clicked()
{
//设置串口名字
current->setPortName(ui->comboBox_serialPort->currentText());
//设置波特率
current->setBaudRate(ui->comboBox_baudRate->currentText().toInt());
//设置数据位
current->setDataBits(QSerialPort::Data8);
//设置奇偶校验位
current->setParity(QSerialPort::NoParity);
//设置停止位
current->setStopBits(QSerialPort::OneStop);
//设置流控
current->setFlowControl(QSerialPort::NoFlowControl);
if(current->open(QIODevice::ReadWrite)){
QMessageBox::warning(this,"提示","串口打开正常",QMessageBox::Ok);
qDebug() << "打开串口正常";
} else {
QMessageBox::warning(this,"警告","串口打开失败",QMessageBox::Ok);
qDebug() << "打开串口异常";
}
current->close();
if(!current->isOpen()){
QMessageBox::warning(this,"提示","串口关闭正常",QMessageBox::Ok);
qDebug() << "关闭串口正常";
} else {
QMessageBox::warning(this,"警告","串口关闭失败",QMessageBox::Ok);
qDebug() << "关闭串口异常";
}
}
void MainWindow::readByteArray(QByteArray readBuffer){
if(ui->isHexRead->isChecked()){
//直接输出16进制数据
textEditFormat(uiHelper->byteArrayToHexStr(readBuffer),216);
} else {
if(currentCMD == readCard)
{
int len = readBuffer.length();
if(len != 6)
{
textEditFormat("错误:数据长度异常!",1);
}
else
{
byte temp = readBuffer[0];
for (int i = 1; i < 5; i++) {
temp ^= readBuffer[i];
}
byte bcc = readBuffer[5];
if(temp != bcc)
RF ID原理与应用课程大作业课程资源-嵌入式
版权申诉
42 浏览量
2022-06-19
16:20:52
上传
评论
收藏 12KB ZIP 举报
处处清欢
- 粉丝: 154
- 资源: 2500
最新资源
- 课设毕设基于SSM的校园餐厅管理 LW+PPT+源码可运行.zip
- Python井字棋代码
- 课设毕设基于SSM的书店仓库管理系统2021 LW+PPT+源码可运行.zip
- 课设毕设基于SSM的沙县小吃点餐系统 LW+PPT+源码可运行.zip
- 课设毕设基于SSM的旅游景点线路网站 LW+PPT+源码可运行.zip
- EDA实验计数器CNT9999-DTCNT9999实验源代码
- 课设毕设基于SSM的抗疫医疗用品销售平台 LW+PPT+源码可运行.zip
- 基于Halcon的仿照VisonPro的机器视觉软件.zip
- battery-percentage-detector 使用 Javascript 的电池百分比检测器
- 毕业设计基于Qt+FFmpeg+SDL实现的音视频播放器源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈