Browse Source

filled in curve calibrator functions

QGC4.4
Bryan Godbolt 15 years ago
parent
commit
7c101d1775
  1. 2
      src/ui/RadioCalibration/AbstractCalibrator.cc
  2. 2
      src/ui/RadioCalibration/AbstractCalibrator.h
  3. 60
      src/ui/RadioCalibration/CurveCalibrator.cc
  4. 18
      src/ui/RadioCalibration/CurveCalibrator.h

2
src/ui/RadioCalibration/AbstractCalibrator.cc

@ -17,7 +17,7 @@ float AbstractCalibrator::logAverage()
float total = 0; float total = 0;
for (int i=0; i<log->size(); ++i) for (int i=0; i<log->size(); ++i)
total += log->value(i); total += log->value(i);
return (total/log->size()); return floor(total/log->size());
} }
float AbstractCalibrator::logExtrema() float AbstractCalibrator::logExtrema()

2
src/ui/RadioCalibration/AbstractCalibrator.h

@ -5,6 +5,8 @@
#include <QString> #include <QString>
#include <QLabel> #include <QLabel>
#include <math.h>
class AbstractCalibrator : public QWidget class AbstractCalibrator : public QWidget
{ {
Q_OBJECT Q_OBJECT

60
src/ui/RadioCalibration/CurveCalibrator.cc

@ -2,9 +2,8 @@
CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) : CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) :
AbstractCalibrator(parent), AbstractCalibrator(parent),
setpoints(QVector<double>(5)), setpoints(new QVector<double>(5)),
positions(QVector<double>()) positions(new QVector<double>())
{ {
QGridLayout *grid = new QGridLayout(this); QGridLayout *grid = new QGridLayout(this);
QLabel *title = new QLabel(titleString); QLabel *title = new QLabel(titleString);
@ -18,10 +17,10 @@ CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) :
grid->addLayout(pulseLayout, 1, 0, 1, 5, Qt::AlignHCenter); grid->addLayout(pulseLayout, 1, 0, 1, 5, Qt::AlignHCenter);
for (int i=0; i<=100; i=i+100/4) for (int i=0; i<=100; i=i+100/4)
positions.append(static_cast<double>(i)); positions->append(static_cast<double>(i));
setpoints.fill(1500); setpoints->fill(1500);
plot = new QwtPlot(); plot = new QwtPlot();
@ -29,13 +28,62 @@ CurveCalibrator::CurveCalibrator(QString titleString, QWidget *parent) :
plot->setAxisScale(QwtPlot::yLeft, 1000, 2000, 200); plot->setAxisScale(QwtPlot::yLeft, 1000, 2000, 200);
plot->setAxisScale(QwtPlot::xBottom, 0, 100, 25);
curve = new QwtPlotCurve(); curve = new QwtPlotCurve();
curve->setData(positions, setpoints); curve->setPen(QPen(QColor(QString("lime"))));
curve->setData(*positions, *setpoints);
curve->attach(plot); curve->attach(plot);
plot->replot(); plot->replot();
QPushButton *zero = new QPushButton(tr("0 %"));
QPushButton *twentyfive = new QPushButton(tr("25 %"));
QPushButton *fifty = new QPushButton(tr("50 %"));
QPushButton *seventyfive = new QPushButton(tr("75 %"));
QPushButton *hundred = new QPushButton(tr("100 %"));
grid->addWidget(zero, 3, 0);
grid->addWidget(twentyfive, 3, 1);
grid->addWidget(fifty, 3, 2);
grid->addWidget(seventyfive, 3, 3);
grid->addWidget(hundred, 3, 4);
this->setLayout(grid); this->setLayout(grid);
signalMapper = new QSignalMapper(this);
signalMapper->setMapping(zero, 0);
signalMapper->setMapping(twentyfive, 1);
signalMapper->setMapping(fifty, 2);
signalMapper->setMapping(seventyfive, 3);
signalMapper->setMapping(hundred, 4);
connect(zero, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(twentyfive, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(fifty, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(seventyfive, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(hundred, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(setSetpoint(int)));
}
CurveCalibrator::~CurveCalibrator()
{
delete setpoints;
delete positions;
}
void CurveCalibrator::setSetpoint(int setpoint)
{
if (setpoint == 0 || setpoint == 4)
{
setpoints->replace(setpoint, static_cast<double>(logExtrema()));
}
else
{
setpoints->replace(setpoint, static_cast<double>(logAverage()));
}
plot->replot();
emit setpointChanged(setpoint, static_cast<float>(setpoints->value(setpoint)));
} }

18
src/ui/RadioCalibration/CurveCalibrator.h

@ -9,6 +9,11 @@
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QLabel> #include <QLabel>
#include <QPushButton> #include <QPushButton>
#include <QPen>
#include <QColor>
#include <QString>
#include <QSignalMapper>
#include <QDebug>
#include "AbstractCalibrator.h" #include "AbstractCalibrator.h"
@ -17,15 +22,20 @@ class CurveCalibrator : public AbstractCalibrator
Q_OBJECT Q_OBJECT
public: public:
explicit CurveCalibrator(QString title = QString(), QWidget *parent = 0); explicit CurveCalibrator(QString title = QString(), QWidget *parent = 0);
~CurveCalibrator();
signals: signals:
void setpointChanged(float[5]); void setpointChanged(int setpoint, float raw);
protected slots:
void setSetpoint(int setpoint);
protected: protected:
QVector<double> setpoints; QVector<double> *setpoints;
QVector<double> positions; QVector<double> *positions;
QwtPlot *plot; QwtPlot *plot;
QwtPlotCurve *curve; QwtPlotCurve *curve;
QSignalMapper *signalMapper;
}; };
#endif // CURVECALIBRATOR_H #endif // CURVECALIBRATOR_H

Loading…
Cancel
Save