#include <Arduino.h>
// button states
#define BUT_SETUP 0
#define BUT_START 1
#define BUT_START_TIMER 2
#define BUT_WACHT 3
#define BUT_INGEDRUKT 4
#define BUT_GELOST 5
#define PIN_BUT 5
#define DEBOUCE_INTERVAL 5 // in millis
// VARIABELEN
bool butPressed = false;
unsigned long timer = 0;
unsigned long interval = DEBOUCE_INTERVAL;
byte buttonState = BUT_SETUP;
byte oldState = BUT_SETUP;
String buttoSTates[] = {"BUT_SETUP", "BUT_START", "BUT_START_TIMER", "BUT_WACHT", "BUT_INGEDRUKT", "BUT_GELOST"};
// FUNCTIONS
void printStates();
void checkButton(byte pin);
void actOnButton(byte pin);
void changeState(byte state);
void setup()
{
Serial.begin(115200);
pinMode(PIN_BUT, INPUT);
}
void loop()
{
printStates();
checkButton(PIN_BUT);
actOnButton(PIN_BUT);
}
void checkButton(byte pin){
switch (buttonState){
case BUT_SETUP: // 0
changeState(BUT_START);
break;
case BUT_START: // 1
if (digitalRead (pin) == HIGH)
{
//Serial.println("wachtend");
}
else
{
timer = millis();
changeState(BUT_WACHT);
}
break;
/*case BUT_START_TIMER: // 2
break; */
case BUT_WACHT: // 3
if(millis() - timer > interval){
changeState(BUT_INGEDRUKT);
} else {
if(digitalRead(pin)==HIGH){
changeState(BUT_SETUP) ;
}
}
break;
case BUT_INGEDRUKT: // 4
butPressed = true;
if(digitalRead(pin)==HIGH){
changeState(BUT_GELOST) ;
}
break;
case BUT_GELOST: // 5
butPressed = false;
buttonState = BUT_SETUP ;
break;
default:
Serial.print("Er gebeurde iets vreemd met de button :");
Serial.print(pin);
}
}
void actOnButton(byte pin){
if(butPressed){
Serial.print(".");
}
}
void printStates(){
if (buttonState != oldState){
Serial.println(buttoSTates[buttonState]);
oldState = buttonState;
}
}
void changeState(byte state){
oldState = buttonState;
buttonState = state;
}