// LCD1602 to Arduino Uno connection example
#include <LiquidCrystal.h>
uint8_t number = 0, previous = 1;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
const char* words[] = {"Led Switch", "One", "Two", "Three", "Four", "Five"}; // Array of words
const char* words2[] = {"Led Switch", "two", "pin 13 Toggle", "analogread", "Four", "Five"}; // Array of words
bool ledstate = LOW;
volatile bool goback = false;
void functionZero();
void functionOne() {
Serial.println("Function One is called.");
// Add code for function one here
}
void functionTwo() {
Serial.println("Function Two is called.");
digitalWrite(13, ledstate);
ledstate = !ledstate;
}
void functionThree() {
Serial.println("Function Three is called.");
// Add code for function three here
}
void functionFour() {
Serial.println("Function Four is called.");
// Add code for function four here
}
void analogread() {
char buffer[12];
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("A0: ");
lcd.setCursor(0, 1);
lcd.print("Voltage V");
float volt = 0;
for (;;) {
goback = false;
lcd.setCursor(12, 0);
sprintf(buffer, "%4d", analogRead(A0));
lcd.print(buffer);
lcd.setCursor(10, 1);
volt = (analogRead(A0) * 5.0) / 1023.0;
lcd.setCursor(11, 1);
lcd.print(volt);
if (goback == true) {
delay(200);
Serial.println("Going Back");
goback = false;
return;
}
}
}
void (*functionList2[])() = {functionOne, functionZero, functionTwo, analogread, functionFour};
void (*functionList1[])() = {functionZero, functionOne, functionTwo, functionThree, functionFour};
void callFunction(int number, void (*functionList[])()) {
void (*selectedFunction)() = functionList[number];
selectedFunction(); // Call the selected function
}
// Define your functions
void functionZero() {
Serial.println("Function Zero is called.");
goback = false;
uint8_t number2 = 0, previous2 = 1;
delay(100);
for (;;) {
menu1(words2, number2, previous2);
getbutton(number2, previous2, functionList2);
if (goback == true) {
delay(200);
Serial.println("Going Back");
goback = false;
return;
}
}
// Add code for function one here
}
void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(13, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), interrupt, FALLING);
lcd.begin(16, 2);
}
void loop() {
menu1(words, number, previous);
getbutton(number, previous, functionList1);
}
void menu1(char* words[], uint8_t& number, uint8_t& previous) {
if (previous != number) {
lcd.clear();
if (number % 2 == 0) {
lcd.setCursor(1, 0);
lcd.print(words[number]);
lcd.setCursor(1, 1);
lcd.print(words[number + 1]);
lcd.setCursor(0, 0);
} else {
lcd.setCursor(1, 0);
lcd.print(words[number - 1]);
lcd.setCursor(1, 1);
lcd.print(words[number]);
lcd.setCursor(0, 1);
}
lcd.write(126);
previous = number;
}
}
void getbutton(uint8_t& number, uint8_t& previous, void (*functionList[])()) {
if (digitalRead(3) == LOW) {
number++;
if (number == 6) {
number = 5;
}
delay(100);
}
if (digitalRead(5) == LOW) {
number--;
if (number == 255) {
number = 0;
}
delay(100);
}
if (digitalRead(4) == LOW) {
previous = 100;
callFunction(number, functionList);
delay(100);
}
}
void interrupt() {
goback = true;
}