VizBlocks
Potentiometer.h
Go to the documentation of this file.
1 #ifndef POTENTIOMETER_h
2 #define POTENTIOMETER_h
3 
4 class Potentiometer {
5 
6  int EMA_S = 0; //initialization of EMA S
7  float EMA_a = 0.6;
8 
9  int _pin;
10  int _id;
11 
12  int _value;
13  int _previousReading;
14 
15  bool _inputFlag = false;
16  bool _changeFlag = false;
17 
18  unsigned long _previousTimer;
19  int _interval = 200;
20 
21  void (*_cb)(Potentiometer*, uint8_t, uint8_t); // Callback function
22 
23  int _read() {
24  int sensorValue = analogRead(_pin); //read the sensor value using ADC
25  EMA_S = (EMA_a*sensorValue) + ((1-EMA_a)*EMA_S); //run the EMA
26  int mappedValue = map(EMA_S, 5, 1023, 0, 100);
27 
28  return mappedValue;
29  }
30 
31  void _setValue(int x) {
32  _value = x;
33  }
34 
35  public:
36 
37  static const uint8_t kEventStableUpdate = 0;
38  static const uint8_t kEventUnstableUpdate = 1;
39 
40  Potentiometer(int pin, int id = 99) : _pin(pin), _id(id) {
41  pinMode(pin, INPUT);
42  EMA_S = analogRead(_pin); //set EMA S for t=1
43  _value = EMA_S;
44  _previousReading = EMA_S;
45 
46  _previousTimer = millis();
47  _inputFlag = true;
48  };
49 
50  void setEventHandler(void(*function)(Potentiometer*, uint8_t, uint8_t)) {
51  _cb = function;
52  }
53 
54  int getValue() {
55  return _value;
56  }
57 
58  int getId() {
59  return _id;
60  }
61 
62  void check() {
63  unsigned long timer = millis();
64  unsigned long deltaTime = timer - _previousTimer;
65 
66  int reading = _read();
67  int deltaValue = abs(reading - _value);
68 
69  if (reading != _value) {
70  _inputFlag = true;
71  }
72 
73  if (_inputFlag == true && deltaValue > 1) {
74  _inputFlag = false;
75  _changeFlag = true;
76  _previousTimer = timer;
77  _setValue(reading);
78  _cb(this, kEventUnstableUpdate, getValue());
79  }
80 
81  if (_changeFlag == true && deltaTime > _interval) {
82  _changeFlag = false;
83  _cb(this, kEventStableUpdate, getValue());
84  }
85  }
86 };
87 
88 #endif
Potentiometer::check
void check()
Definition: Potentiometer.h:62
Potentiometer::kEventStableUpdate
static const uint8_t kEventStableUpdate
Definition: Potentiometer.h:37
Potentiometer::Potentiometer
Potentiometer(int pin, int id=99)
Definition: Potentiometer.h:40
Potentiometer
Definition: Potentiometer.h:4
Potentiometer::getId
int getId()
Definition: Potentiometer.h:58
Potentiometer::setEventHandler
void setEventHandler(void(*function)(Potentiometer *, uint8_t, uint8_t))
Definition: Potentiometer.h:50
Potentiometer::kEventUnstableUpdate
static const uint8_t kEventUnstableUpdate
Definition: Potentiometer.h:38
Potentiometer::getValue
int getValue()
Definition: Potentiometer.h:54