#include "ExponentialFilter.h"
#define BUTTON_PIN A0
#define MIN_INPUT 0.0
#define MAX_INPUT 1.0
const float lowerThreshold = 0.293 * (MAX_INPUT - MIN_INPUT);
const float upperThreshold = 0.707 * (MAX_INPUT - MIN_INPUT);
ExpTrigger trigger {
lowerThreshold, upperThreshold, LTGT
};
ExponentialFilter expButton;
bool toggle;
void OnTrigger(ExpEventArgs e);
void setup() {
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
expButton.mode(AUTO); // Exponential Filter in Auto Mode
expButton.cutoffTime(MS2S(5000)); // Debounce Period = 20 milliseconds
expButton.init(1.0); // INPUT/INPUT_PULLUP = 1.0
expButton.eventOnTrigger(0, OnTrigger);
}
void loop() {
expButton.filter(digitalRead(BUTTON_PIN));
expButton.schmittTrigger(&trigger);
digitalWrite(LED_BUILTIN, toggle);
SerialPrint();
}
void OnTrigger(ExpEventArgs e) {
switch (e.state) {
case UPPER_TRIGGER:
toggle = !toggle;
break;
}
}
void SerialPrint() {
Serial.println(
"Input:" + String(expButton.input, 3)
+ ", Output:" + String(expButton.output, 3)
+ ", Lower Threshold:" + String(trigger.lowerThreshold, 3)
+ ", Upper Threshold:" + String(trigger.upperThreshold, 3)
+ ", Trigger:" + String(trigger.trigger, 3)
);
}