-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAkta3d_Potentiometer.cpp
45 lines (37 loc) · 1.28 KB
/
Akta3d_Potentiometer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "Arduino.h"
#include "Akta3d_Potentiometer.h"
Akta3d_Potentiometer::Akta3d_Potentiometer(uint16_t pin, int minValue, int maxValue, int minA /*= 0*/, int maxA /*= 1024*/, float lowPassBCoeff /*= 0.2*/, int updateValueEachMs /*=50*/) {
_pin = pin;
_minValue = minValue;
_maxValue = maxValue;
_minA = minA;
_maxA = maxA;
_bCoeff = lowPassBCoeff;
if(_bCoeff < 0) _bCoeff = 0;
if(_bCoeff > 1) _bCoeff = 1;
_lastAnalogValue = _minA;
_newComputedValue = _minValue;
_lastComputedValue = _minValue;
_updateValueEachMs = updateValueEachMs;
_lastUpdate = millis();
}
void Akta3d_Potentiometer::update() {
if((_updateValueEachMs > 0) && (_lastUpdate + _updateValueEachMs < millis())) {
_lastUpdate = millis();
int newAnalogValue = analogRead(_pin);
newAnalogValue = (1 - _bCoeff) * _lastAnalogValue + _bCoeff * newAnalogValue;
_lastAnalogValue = newAnalogValue;
_lastComputedValue = map(newAnalogValue, _minA, _maxA, _minValue, _maxValue);
}
}
bool Akta3d_Potentiometer::changed() {
bool changed = false;
if (_lastComputedValue != _newComputedValue) {
changed = true;
_newComputedValue = _lastComputedValue;
}
return changed;
}
int Akta3d_Potentiometer::value() {
return _newComputedValue;
}