Skip to content

Commit 179f6ee

Browse files
committed
Added gauge window
1 parent 97eda17 commit 179f6ee

27 files changed

+4001
-5
lines changed

Gauges/currentgague.cpp

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#include "currentgague.h"
2+
3+
4+
currentGague::currentGague(QWidget *parent , float imax) : QWidget(parent)
5+
{
6+
7+
Imax = imax;
8+
9+
// Widget
10+
widget = new QcGaugeWidget(parent);
11+
widget->setMinimumWidth(125);
12+
widget->setMinimumHeight(125);
13+
14+
// Background
15+
bkg = widget -> addBackground(98 , DegreeStart , DegreeEnd);
16+
bkg->clearrColors();
17+
bkg->addColor(0 , Qt::white);
18+
bkg_center = widget -> addBackground(5 , 0 , 360);
19+
bkg_center->clearrColors();
20+
bkg_center->addColor(0 , Qt::black);
21+
22+
// Arc
23+
widget->addArc(98)->setDgereeRange(DegreeStart , DegreeEnd);
24+
25+
// Color Band
26+
ColorBand = widget->addColorBand(95);
27+
QList<QPair<QColor,float>> BandColors;
28+
for(int i=0; i< 4 ; i++){
29+
BandColors.append(pair[i]);
30+
}
31+
ColorBand->setColors(BandColors);
32+
ColorBand->setDgereeRange(DegreeStart , DegreeEnd);
33+
34+
35+
// Labels
36+
label = widget->addLabel(20);
37+
label->setText(label_str);
38+
ms_needle.label = widget->addLabel(20);
39+
ms_needle.label->setAngle(90);
40+
ms_needle.label->setText("True RMS");
41+
42+
//Needles
43+
peak_needle.label = widget->addLabel(35);
44+
peak_needle.label-> setText("Peak");
45+
peak_needle.label->setColor(Qt::red);
46+
peak_needle.label->setAngle(90);
47+
48+
ms_needle.Item = widget->addNeedle(85);
49+
peak_needle.Item = widget->addNeedle(85);
50+
ms_needle.Item->setColor(Qt::black);
51+
peak_needle.Item->setColor(Qt::red);
52+
ms_needle.Item->setNeedle(QcNeedleItem::TriangleNeedle);
53+
peak_needle.Item->setNeedle(QcNeedleItem::TriangleNeedle);
54+
peak_needle.Item->setDgereeRange(DegreeStart , DegreeEnd);
55+
ms_needle.Item->setDgereeRange(DegreeStart , DegreeEnd);
56+
57+
// Degree Items
58+
DegreeItem = widget->addDegrees(92.5);
59+
DegreeItem-> setDgereeRange(DegreeStart , DegreeEnd);
60+
DegreeItem-> setSubDegree(false);
61+
DegreeSubItem = widget->addDegrees(93);
62+
DegreeSubItem-> setDgereeRange(DegreeStart , DegreeEnd);
63+
DegreeSubItem-> setSubDegree(true);
64+
65+
//Values
66+
Values = widget->addValues(65);
67+
Values->setDgereeRange(DegreeStart , DegreeEnd);
68+
Values->setMinValue(0);
69+
Values->setMaxValue(Imax);
70+
setScale(Imax);
71+
widget->update();
72+
}
73+
74+
void currentGague::setScale(float I){
75+
Imax = I;
76+
float Imax_scale =scale_overcurrent*I;
77+
Values->setMaxValue(Imax_scale);
78+
if(Imax_scale>10){
79+
Values->setStep(5);
80+
DegreeSubItem->setStep(100/Imax_scale);
81+
DegreeItem->setStep(500/Imax_scale);
82+
}else if(I<1){
83+
Values->setStep(0.1f);
84+
DegreeSubItem->setStep(2/Imax_scale);
85+
DegreeItem->setStep(10/Imax_scale);
86+
}else if(I<3){
87+
Values->setStep(0.5f);
88+
DegreeSubItem->setStep(10/Imax_scale);
89+
DegreeItem->setStep(50/Imax_scale);
90+
}else{
91+
Values->setStep(1);
92+
DegreeSubItem->setStep(20/Imax_scale);
93+
DegreeItem->setStep(100/Imax_scale);
94+
}
95+
}
96+
97+
void currentGague::setCurrent(struct I_t *I){
98+
peak_needle.Item->setCurrentValue(I->peak * (100/(scale_overcurrent*Imax)));
99+
ms_needle.Item ->setCurrentValue(I->RMS * (100/(scale_overcurrent*Imax)));
100+
}

Gauges/currentgague.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#ifndef CURRENTGAGUE_H
2+
#define CURRENTGAGUE_H
3+
4+
#include <QWidget>
5+
#include "qcgaugewidget.h"
6+
7+
struct needle_t{
8+
QcLabelItem* label;
9+
QcNeedleItem* Item;
10+
};
11+
12+
struct I_t{
13+
float peak;
14+
float RMS;
15+
float i;
16+
};
17+
18+
class currentGague : public QWidget
19+
{
20+
Q_OBJECT
21+
public:
22+
explicit currentGague(QWidget *parent = nullptr, float imax=25.0f);
23+
QcGaugeWidget* widget;
24+
signals:
25+
26+
public slots:
27+
void setCurrent(struct I_t *I);
28+
void setScale(float I);
29+
30+
31+
private:
32+
QcBackgroundItem *bkg;
33+
QcBackgroundItem *bkg_center;
34+
needle_t peak_needle;
35+
needle_t ms_needle;
36+
QcValuesItem* Values;
37+
QcDegreesItem* DegreeSubItem;
38+
QcDegreesItem* DegreeItem;
39+
int DegreeStart = 0;
40+
int DegreeEnd = 180;
41+
QPair<QColor,float> pair[4]={{Qt::green , 20},{Qt::darkGreen , 70},{Qt::yellow , 80},{Qt::red , 100}};
42+
QcColorBand* ColorBand;
43+
QcLabelItem* label;
44+
const QString label_str = "CoilCurrent [A]";
45+
float Imax;
46+
float scale_overcurrent=100.0f/pair[2].second; // How much larger is the scale compared to Imax;
47+
48+
};
49+
50+
#endif // CURRENTGAGUE_H

Gauges/gaugewindow.cpp

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#include "gaugewindow.h"
2+
#include "mainwindow.h"
3+
#include <QDebug>
4+
5+
6+
GaugeWindow::GaugeWindow(QWidget *parent) :
7+
QMainWindow(parent)
8+
{
9+
setWindowTitle("Gauges");
10+
top_layout = new QGridLayout(this);
11+
top_box = new QGroupBox(this);
12+
13+
currentGauge = new currentGague(this);
14+
tempGauge = new tempgauge(this);
15+
angleGauge = new QEgauge(this);
16+
tachometerGauge = new tachometer(this);
17+
18+
top_layout->addWidget(currentGauge->widget , 1,1);
19+
top_layout->addWidget(tempGauge->widget , 2,1);
20+
top_layout->addWidget(tachometerGauge->widget , 1, 2);
21+
top_layout->addWidget(angleGauge->widget , 2 ,2);
22+
top_box->setLayout(top_layout);
23+
top_box->setTitle("Gauges");
24+
this->setCentralWidget(top_box );
25+
this->show();
26+
27+
// ******** For testing purpose ***************
28+
29+
struct I_t I ={1.0f , 0.0f};
30+
float T=0 , deg=0 , RPM=0;
31+
32+
33+
/*
34+
while(1){
35+
wait(16);
36+
tempGauge->setTemp(T+20.0f);
37+
angleGauge->setAngle(deg);
38+
currentGauge->setCurrent(&I);
39+
tachometerGauge->setSpeed(RPM);
40+
41+
I.peak = fmodf(I.peak+0.1f , 25.0f);
42+
I.ms = fmodf(I.ms+0.1f , 25.0f);
43+
T = fmodf(T+0.25f , 100.0f);
44+
RPM = fmodf(RPM+5 , 3000.0f);
45+
deg = fmodf(deg+ 1.0f , 360.0f);
46+
//readCOMdata();
47+
48+
}
49+
*/
50+
}
51+
52+
void GaugeWindow::setShaftAngle(float angle){
53+
angleGauge->setAngle(angle);
54+
}
55+
56+
void GaugeWindow::setcurrentGauge(struct I_t I[]){
57+
I_t Imax={0,0};
58+
float Ia=I[IA].peak;
59+
float Ib=I[IB].peak;
60+
float Ic=I[IC].peak;
61+
if(Ia > Ic)
62+
Imax.peak = Ia;
63+
else
64+
Imax.peak = Ic;
65+
if(Ib > Imax.peak)
66+
Imax.peak = Ib;
67+
68+
Ia = sqrtf(I[IA].RMS);
69+
Ib = sqrtf(I[IB].RMS);
70+
Ic = sqrtf(I[IC].RMS);
71+
Imax.RMS = (Ia + Ib + Ic )/3; // Add RMS currents
72+
//qDebug()<< Imax.RMS;
73+
currentGauge->setCurrent(&Imax);
74+
};
75+
76+
GaugeWindow::~GaugeWindow()
77+
{
78+
}

Gauges/gaugewindow.h

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#ifndef GAUGEWINDOW_H
2+
#define GAUGEWINDOW_H
3+
4+
#include <QtWidgets>
5+
#include <QMainWindow>
6+
#include "currentgague.h"
7+
#include "tempgauge.h"
8+
#include "qegauge.h"
9+
#include "tachometer.h"
10+
11+
12+
class GaugeWindow : public QMainWindow
13+
{
14+
Q_OBJECT
15+
16+
public:
17+
explicit GaugeWindow(QWidget *parent = nullptr);
18+
~GaugeWindow();
19+
20+
public slots:
21+
void setcurrentGauge(I_t I[]);
22+
void setShaftAngle(float angle);
23+
24+
private:
25+
QGridLayout* top_layout;
26+
QGroupBox* top_box;
27+
tempgauge* tempGauge;
28+
QEgauge* angleGauge;
29+
tachometer* tachometerGauge;
30+
currentGague* currentGauge;
31+
};
32+
33+
#endif // MAINWINDOW_H

0 commit comments

Comments
 (0)