qreal a_max = 2;
int angle_step = 30;
int divisions = 4;
-qreal filter_k = 0.5;
+
+// Smoothing: 0 - none, 1 - light, 2 - medium, 3 - strong
+int smoothing = 1;
+qreal smoothing_k[] = {1, 0.5, 0.25, 0.125};
AMeterWidget::AMeterWidget(QWidget *parent)
: QWidget(parent)
return 0;
}
+// This method is called on every update, keep division operations out
+
void AMeterWidget::paintEvent(QPaintEvent *e)
{
QPainter paint(this);
bool AMeterWidget::filter(QAccelerometerReading *reading)
{
+ qreal k = 1;
bx = ax;
by = ay;
bz = az;
ay = reading->y() * r_g;
az = reading->z() * r_g;
- ax = ax * (1.0 - filter_k) + bx * filter_k;
- ay = ay * (1.0 - filter_k) + by * filter_k;
- az = az * (1.0 - filter_k) + bz * filter_k;
+ if (smoothing > 0 && smoothing < 4)
+ {
+ k = smoothing_k[smoothing];
+ ax = ax * k + bx * (1.0 - k);
+ ay = ay * k + by * (1.0 - k);
+ az = az * k + bz * (1.0 - k);
+ }
update();
return true;
}
+