add sensors classes: push button, potentiometer, pressure sensor

This commit is contained in:
Adrien Marquès 2020-05-30 19:05:35 +02:00
parent 13e3f9dae7
commit c368a1f209
Signed by: xdrm-brackets
GPG Key ID: D75243CA236D825E
2 changed files with 102 additions and 0 deletions

58
twinmax/sensors.cpp Normal file
View File

@ -0,0 +1,58 @@
#include <Arduino.h>
#include <string.h>
#include "sensors.h"
void PushButton::setup(const int pin){
pinMode(pin, INPUT);
_pin = pin;
}
bool PushButton::tick(){
const bool pushed = (digitalRead(_pin) == 0);
const bool toggle = (pushed != _pushed);
_pushed = pushed;
if( toggle && pushed ){ // button has been pressed
_pushStart = millis();
}
return toggle;
}
bool PushButton::tap(){
const bool toggle = tick();
// released and last less than hold threshold
return toggle && !_pushed && (millis()-_pushStart) < HOLD_MS_THRESHOLD;
}
bool PushButton::hold(){
const bool toggle = tick();
// released and last at ;east hold threshold
return toggle && !_pushed && (millis()-_pushStart) >= HOLD_MS_THRESHOLD;
}
void Potentiometer::setup(const int pin){
pinMode(pin, INPUT);
_pin = pin;
}
short Potentiometer::range(){
return 1023 - analogRead(_pin);
}
// pressure sensors
void Pressure::setup(const int pin){
pinMode(pin, INPUT);
_pin = pin;
}
short Pressure::value(){
return analogRead(_pin);
}

44
twinmax/sensors.h Normal file
View File

@ -0,0 +1,44 @@
#ifndef _SENSORS_H_DEF_
#define _SENSORS_H_DEF_
#define HOLD_MS_THRESHOLD 2000
// push button non-blocking state
class PushButton {
public:
void setup(const int pin);
bool tap(); // button has been pushed for a short amount of time
bool hold(); // button has been pushed for at least HOLD_MS_THRESHOLD milliseconds
private:
// returns whether the button state changed
bool tick();
// value of millis() when the button is down
unsigned long _pushStart { 0 };
bool _pushed { false };
int _pin { 0 };
};
// potentiometer value
class Potentiometer {
public:
void setup(const int pin);
short range();
private:
int _pin { 0 };
};
// pressure sensors
class Pressure {
public:
void setup(const int pin);
short value();
private:
int _pin { 0 };
};
#endif