#include <Servo.h>
#include <LiquidCrystal.h>
#define UP_BUTTON 6
#define DOWN_BUTTON 5
#define OK_BUTTON 4
#define RED_LED 3
#define GREEN_LED 2
#define BUZZER_PIN 13
#define SERVO_PIN A0
int debounceDuration = 150;
unsigned long upButtonTime = 0;
unsigned long downButtonTime = 0;
unsigned long okButtonTime = 0;
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
Servo tap;
String menu[8] = {"Red Led ON", "Red Led OFF",
"Green Led ON", "Green Led OFF", "Servo ON",
"Servo OFF", "Buzzer ON", "Buzzer OFF"};
int counter = 0;
int nextCounter = 1;
void setup() {
pinMode(UP_BUTTON, INPUT);
pinMode(DOWN_BUTTON, INPUT);
pinMode(OK_BUTTON, INPUT);
pinMode(RED_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
lcd.begin(16, 2);
tap.attach(SERVO_PIN);
noTone(BUZZER_PIN);
printMenu();
}
void loop() {
if (millis() - upButtonTime > debounceDuration) {
if (digitalRead(UP_BUTTON) == 1) {
counter--;
nextCounter--;
if (counter == -1) {
counter = 7;
}
else if (nextCounter == -1) {
nextCounter = 7;
}
upButtonTime = millis();
printMenu();
}
}
if (millis() - downButtonTime > debounceDuration) {
if (digitalRead(DOWN_BUTTON) == 1) {
counter++;
nextCounter++;
if (counter == 7) {
nextCounter = 0;
}
else if (counter == 8) {
counter = 0;
}
downButtonTime = millis();
printMenu();
}
}
if (millis() - okButtonTime > debounceDuration) {
if (digitalRead(OK_BUTTON) == 1) {
if (counter == 0) {
digitalWrite(RED_LED, HIGH);
}
else if (counter == 1) {
digitalWrite(RED_LED, LOW);
}
else if (counter == 2) {
digitalWrite(GREEN_LED, HIGH);
}
else if (counter == 3) {
digitalWrite(GREEN_LED, LOW);
}
else if (counter == 4) {
tap.write(180);
}
else if (counter == 5) {
tap.write(90);
}
else if (counter == 6) {
tone(BUZZER_PIN, 1000);
}
else if (counter == 7) {
noTone(BUZZER_PIN);
}
okButtonTime = millis();
}
}
}
void printMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(">");
lcd.print(counter + 1);
lcd.print("-");
lcd.print(menu[counter]);
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(nextCounter + 1);
lcd.print("-");
lcd.print(menu[nextCounter]);
}