#include <Wire.h>
#include <hd44780.h>
#include <hd44780ioClass/hd44780_I2Cexp.h> //Library for LCD Screen
#include <OneButton.h> //Library for changing screen after a button press
hd44780_I2Cexp lcd; //LCD Screen Display
OneButton coffeeButton(4); //Changes display to coffee brew screen with button (Touch Sensor) connected to port 4
enum t_screenType : byte {WELCOME_SCREEN, COFFEE_SCREEN}; //LCD screen environments
t_screenType currentScreen = WELCOME_SCREEN; //Current screen when turned on
void welcomeScreen() {
lcd.clear();
lcd.print(F("Coffee Machine")); //Loads current screen when on
currentScreen = WELCOME_SCREEN;
}
void coffeeScreen() {
lcd.clear();
lcd.print(F("Brewing Coffee")); //Loads coffee screen when button is pressed
currentScreen = COFFEE_SCREEN;
}
void checkButtons() {
coffeeButton.tick(); //Checks if the button has been pressed to print the coffee screen
}
void setup() {
Serial.begin(115200); Serial.println();
int status = lcd.begin(16,2); //LCD screen status (16 characters by 2 lines)
if (status) hd44780::fatalError(status); //Status if error occurs
welcomeScreen(); //Prints current screen
coffeeButton.attachClick(coffeeScreen); //Prints coffee screen when button is pressed
}
void loop() {
checkButtons(); //Callback to check if coffee button has been pressed
switch (currentScreen) { //Current screen is dependent on if the button has been pressed or not
case WELCOME_SCREEN: break;
case COFFEE_SCREEN: break;
}
}