// definitie van de statussen
#define BTN_SETUP 0
#define BTN_READ 1
#define BTN_START_TIMER 2
#define BTN_WACHT 3
#define BTN_INGEDRUKT 4
#define BTN_LOSGELATEN 5
//declaratie van de pinnen
#define PIN_BUT1 7
#define PIN_BUT2 6
#define PIN_LED 8
//declaratie constanten
#define INTERVAL 25 //tijdsduur in msec
#define MAX_AANTAL_BUTTONS 8
//declaratie variabelen
typedef struct {
byte btnState;
unsigned long timer;
bool toggle;
byte pin;
byte btnOldState;
} Button;
//Button but1;
Button buttonlijst [MAX_AANTAL_BUTTONS] ;
//Declaratie van de fucnties
void printButton ( Button knop);
void addButton(byte pinNr, byte btnNr);
void setup( ) {
pinMode(PIN_BUT1, INPUT );
pinMode(PIN_BUT2, INPUT);
pinMode(PIN_LED, OUTPUT);
Serial.begin(115200);
addButton(7, 0);
addButton(6, 1);
}
void loop( ) {
for (int i = 0; i < sizeof(buttonlijst); i++)
{if (button[i].btnState != button[i].btnOldState) {
Serial.print( " de status is ");
Serial.println (button[i].btnState);
button[i].btnOldState = button[i].btnState;
}
switch (button[i].btnState) {
case BTN_SETUP://0
button[i].btnState = BTN_READ;
break;
case BTN_READ : //1
if (digitalRead(but1.pin) == LOW) {
button[i].btnState = BTN_START_TIMER;
}
break;
case BTN_START_TIMER: //2
button[i].timer = millis();
button[i].btnState = BTN_WACHT;
break;
case BTN_WACHT: //3
if ( digitalRead(button[i].pin) == HIGH) {
button[i].btnState = BTN_SETUP;
} else {
if ((millis() - button[i].timer) > INTERVAL) {
button[i].btnState = BTN_INGEDRUKT;
}
}
break;
case BTN_INGEDRUKT: //4
digitalWrite(PIN_LED, !digitalRead(PIN_LED));
if ( digitalRead(button[i].pin) == HIGH) {
button[i].btnState = BTN_LOSGELATEN;
}
break;
case BTN_LOSGELATEN: //5
button[i].btnState = BTN_SETUP;
break;
default:
Serial.println("er is een foute status opgetreden");
break;
}
}
}
void printButton (Button knop) {
Serial.println(knop.btnState);
Serial.println(knop.pin);
}
void addButton(byte pinNr, byte btnNr) {
Button but; // maak een nieuwe knop met naam 'but'
// geef nu een pinNr, een timer, een btnstate en een buttonoldstate aan deze nieuwe button
but.pin = pinNr;
but.timer = millis();
bbut.btnState = BTN_SETUP;
but.btnOldState = BTN_SETUP;
but.toggle = false;
buttons[btnNr]=but;
}