#include <LiquidCrystal.h>
#include <Toggle.h>
const byte buttonPin = 8; // the number of the pushbutton pin
Toggle selectButton;
LiquidCrystal lcd( 7, 6, 5, 4, 3, 2);
const byte sequenceCount = 6;
byte currentSequence = 0;
// prototypes to declare the arrays
void initSequence0();
void initSequence1();
void initSequence2();
void initSequence3();
void initSequence4();
void initSequence5();
void Sequence0();
void Sequence1();
void Sequence2();
void Sequence3();
void Sequence4();
void Sequence5();
void endSequence0();
void endSequence1();
void endSequence2();
void endSequence3();
void endSequence4();
void endSequence5();
// arrays of functions pointers
void (*initSequence[])() = {initSequence0, initSequence1, initSequence2, initSequence3, initSequence4, initSequence5};
void (*sequence[])() = {Sequence0, Sequence1, Sequence2, Sequence3, Sequence4, Sequence5};
void (*endSequence[])() = {endSequence0, endSequence1, endSequence2, endSequence3, endSequence4, endSequence5};
// some heartbeat for the current sequence
void heartbeat() {
static unsigned long chrono = 0;
if (millis() - chrono >= 5000) {
chrono = millis();
Serial.print("In sequence #");Serial.println(currentSequence+1);
}
}
// Implementation of the functions for the sequences
void initSequence0() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence1() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence2() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence3() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence4() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void initSequence5() {Serial.print("configuring for sequence #"); Serial.println(currentSequence+1);}
void Sequence0() {heartbeat();}
void Sequence1() {heartbeat();}
void Sequence2() {heartbeat();}
void Sequence3() {heartbeat();}
void Sequence4() {heartbeat();}
void Sequence5() {heartbeat();}
void endSequence0() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence1() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence2() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence3() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence4() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void endSequence5() {Serial.print("Ending sequence #"); Serial.println(currentSequence+1);}
void displayCurrentSequence() {
lcd.clear();
lcd.print("Sequence ");
lcd.print(currentSequence + 1);
lcd.setCursor(0, 1);
lcd.print("Count to ");
lcd.print(currentSequence + 4);
}
void handleSelectButton() {
selectButton.poll();
if (selectButton.onPress()) {
endSequence[currentSequence]();
currentSequence = (currentSequence + 1) % sequenceCount;
displayCurrentSequence();
initSequence[currentSequence]();
}
}
void setup() {
selectButton.begin(buttonPin);
Serial.begin(115200);
lcd.begin(16, 2);
lcd.print("-- SEQUENCING --");
delay(1000);
displayCurrentSequence();
initSequence[currentSequence]();
}
void loop() {
handleSelectButton(); // are we switching sequence ?
sequence[currentSequence](); // call in a loop the function for the sepcific sequence
}