#include "mainwindowgps.h"
#include "ui_mainwindowgps.h"
#include<QDebug>
#include <QList>
#include <QWidget>
#include <QtGui>
#include <QComboBox>
#include <QMessageBox>
#include <QString>
#include <QPainter>
#include <QPoint>
#include <QtMath>
MainWindowGPS::MainWindowGPS(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindowGPS)
{
path = new QPainterPath;
timer = new QTimer(this);
ui->setupUi(this);
ui->radarWidget->installEventFilter(this); // 使之能够直接在radarWidget中绘图
this->setFixedSize(this->width(),this->height());//固定窗口大小
setWindowTitle(tr("无人船导航定位系统"));
QStringList strBaud;
strBaud<<"4800"<<"9600"<<"115200";
ui->baudcomboBox->addItems(strBaud);
initSeialPort();
connect(timer,SIGNAL(timeout()),this,SLOT(uptime()));
connect(ui->biaojiBT, SIGNAL(clicked()), this, SLOT(Button()));
connect(ui->help, SIGNAL(clicked()), this, SLOT(Button2()));
ui->radarWidget->setAutoFillBackground(true); //Widget在画图前先填充背景。
QPalette palette=ui->radarWidget->palette();
palette.setBrush(QPalette::Window, QPixmap(":/BJ"));
ui->radarWidget->setPalette(palette);
}
MainWindowGPS::~MainWindowGPS()
{
delete ui;
delete timer;
}
int dcFlag = 0; // 标志位,当其为1的时候代表在radarwidget上显示出图点
double latData;
double longData;
int rflag = 0;
int flag;
//获取计算机上所有可用串口并添加到comboBox中
void MainWindowGPS::initSeialPort()
{
connect(&serial,SIGNAL(readyRead()),this,SLOT(serialRead())); //连接槽
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
if(infos.isEmpty())
{
ui->portcomboBox->addItem("无串口");
return;
}
foreach (QSerialPortInfo info, infos) {
ui->portcomboBox->addItem(info.portName());
qDebug() <<"可选的串口有:"<< info.portName();
}
}
void MainWindowGPS::serialRead()
{
int byteLen = serial.bytesAvailable(); //返回串口缓冲区字节
if(byteLen<=0) return; //减小内存占用
qDebug("缓冲的字节数byteLen=%d\n",byteLen); //
QByteArray qa = serial.readAll();//读取设备数据
ui->textEdit->append(qa); //读取的数据用textedit来显示
gpsParse(qa); //读取的数据给gpsParse用来解析
ui->statusLabel->setText("读取中...");
}
void MainWindowGPS::gpsParse(QByteArray GPSBuffer)
{
ui->radarWidget->update(); //刷新坐标系,实时显示图形
if(GPSBuffer.contains("$GNRMC") )
{
dcFlag = 1;
qDebug()<<"Start to go 接受数据"<<endl;
rflag = 1; // can receive frame(能够接受帧)
GPSBuffer=GPSBuffer.remove(0,GPSBuffer.indexOf("$GNRMC"));
QList<QByteArray> gpsByteArrays = GPSBuffer.split(',');
//纬度修改如下:
ui->latlineEdit->setText(gpsByteArrays.value(1));
ui->latlineEdit->setAlignment(Qt::AlignCenter);
QByteArray string;
string =gpsByteArrays.value(1);
latData = string.toDouble();
//经度修改如下:
ui->longlineEdit->setText(gpsByteArrays.value(2));
ui->longlineEdit->setAlignment(Qt::AlignCenter);
QByteArray string2;
string2 =gpsByteArrays.value(2);
longData = string2.toDouble();
ui->headlineEdit->setText(gpsByteArrays.value(3));//航向角
ui->headlineEdit->setAlignment(Qt::AlignCenter);
/*舵角反馈*/
QByteArray string8;
string8 =gpsByteArrays.value(4);
char *mm=string8.data();
dj1=QString(QLatin1String(mm));
DJ1=QString("%1°").arg(dj1);
ui->duojiao1->setText(DJ1);//°
ui->duojiao1->setAlignment(Qt::AlignCenter);
QByteArray string9;
string9 =gpsByteArrays.value(5);
char *nn=string9.data();
dj2=QString(QLatin1String(nn));
DJ2=QString("%1°").arg(dj2);
ui->duojiao2->setText(DJ2);//°
ui->duojiao2->setAlignment(Qt::AlignCenter);
/*主机反馈*/
QByteArray string3;
string3 =gpsByteArrays.value(6);
/* int zj1 = static_cast<int>(string3.toDouble());
if(zj1<=25&&zj1>=-25)
ZJ=QString("怠速");
else if(zj1>25&&zj1<=50)
ZJ=QString("正一");
else if(zj1>50&&zj1<=75)
ZJ=QString("正二");
else if(zj1>75&&zj1<=100)
ZJ=QString("正三");
else if(zj1>=-50&&zj1<-25)
ZJ=QString("倒一");
else if(zj1>=-75&&zj1<-50)
ZJ=QString("倒二");
else
ZJ=QString("倒三");*/
ui->zhuji1->setText(gpsByteArrays.value(6));
ui->zhuji1->setAlignment(Qt::AlignCenter);
QByteArray string4;
string4 =gpsByteArrays.value(7);
/* int zj2 = static_cast<int>(string4.toDouble());
if(zj2<=25&&zj2>=-25)
ZJ2=QString("怠速");
else if(zj2>25&&zj2<=50)
ZJ2=QString("正一");
else if(zj2>50&&zj2<=75)
ZJ2=QString("正二");
else if(zj2>75&&zj2<=100)
ZJ2=QString("正三");
else if(zj2>=-50&&zj2<-25)
ZJ2=QString("倒一");
else if(zj2>=-75&&zj2<-50)
ZJ2=QString("倒二");
else
ZJ2=QString("倒三"); */
ui->zhuji2->setText(gpsByteArrays.value(7));
ui->zhuji2->setAlignment(Qt::AlignCenter);
// if(!gpsByteArrays.at(8).isEmpty())
/*双主机*/
QByteArray string5;
string5 =gpsByteArrays.value(8);
int zj3 = static_cast<int>(string5.toDouble());
SZJ=QString::number(zj3,10);
if(zj3==6)
{
//ZJ=ZJ2;
ui->zhuji1->setText(gpsByteArrays.value(6));//以左主机为准
ui->zhuji2->setText(gpsByteArrays.value(6));
}
if(!zj3==6)
{
ui->zhuji1->setText(gpsByteArrays.value(6));
ui->zhuji2->setText(gpsByteArrays.value(7));
}
/*船速*/
/* QByteArray string6;
string6 =gpsByteArrays.value(9);
qDebug()<<"东向速度:"<<gpsByteArrays.value(9);
double V1 = static_cast<int>(string6.toDouble());
qDebug()<<"V1:"<<V1;
QByteArray string7;
string7 =gpsByteArrays.value(10);
double V2 = static_cast<int>(string7.toDouble());
double V3 = sqrt(V1*V1+V2*V2);
V4=QString("%1").arg(V3);
V=QString("%1 km/h").arg(V4);
ui->speed->setText(V);
ui->speed->setAlignment(Qt::AlignCenter); */
}
else
{
qDebug()<<"receive"<<endl;
rflag = 0;
serial.readAll(); // 读取缓冲区剩余数据
dcFlag = 0;
}
rflag = 0;
}
void MainWindowGPS::on_connectBtn_clicked()
{
timer->start(1000);
QSerialPortInfo info;
QList<QSerialPortInfo> infos = QSerialPortInfo::availablePorts();
int i = 0;
foreach (info, infos) {
if(info.portName() == ui->portcomboBox->currentText()) break;
i++;
}
if(i != infos.size ()){//can find
ui->statusLabel->setText("串口打开成功");
serial.close();
serial.setPort(info);
serial.open(QIODevice::ReadWrite); //读写打开
serial.flush(); //存入缓冲区内待读取
switch (ui->baudcomboBox->currentIndex()) {
case 0:
serial.setBaudRate(QSerialPort::Baud4800);
break;
case 1:
serial.setBaudRate(QSerialPort::Baud9600);
qDebug()<<"设置的波特率�
评论0
最新资源