#include <LiquidCrystal.h>
#define SLC 0
#define LFT 1
#define RGH 2
#define LED 13
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void initLCD();
byte menu();
void acenderLed();
void apagarLed();
void piscarLed();
void setup() {
initLCD();
pinMode(SLC, INPUT_PULLUP);
pinMode(LFT, INPUT_PULLUP);
pinMode(RGH, INPUT_PULLUP);
pinMode(LED, OUTPUT);
}
void loop() {
switch(menu()){
case 0:
ligarLed();
break;
case 1:
apagarLed();
break;
case 2:
piscarLed();
break;
case 3:
setup();
break;
}
}
void initLCD(){
lcd.begin(16, 2);
lcd.setCursor(16,0);
lcd.print("Menu Arduino");
for (int i=0; i < 16; i++) {
lcd.scrollDisplayLeft();
delay(80);
}
delay(1000);
for (int i = 0; i < 16; i++) {
lcd.scrollDisplayRight();
delay(80);
}
delay(1000);
}
byte menu() {
int opt = 0;
const int maxOpt = 4;
lcd.clear();
bool key = false;
while (digitalRead(SLC)){ // Mantém o menu enquanto SLC não for pressionado
lcd.setCursor(2,0);
lcd.print("< Escolha >");
if (key && !digitalRead(RGH)) {
lcd.clear();
opt++;
}
if (key && !digitalRead(LFT)) {
lcd.clear();
opt--;
}
switch (opt) {
case 0:
lcd.setCursor(0,1);
lcd.print("Ligar led");
break;
case 1:
lcd.setCursor(3,1);
lcd.print("Apagar led");
break;
case 2:
lcd.setCursor(3,1);
lcd.print("Piscar led");
break;
case 3:
lcd.setCursor(4,1);
lcd.print("Reset");
break;
case maxOpt:
opt = 0;
break;
case -1:
opt = maxOpt - 1;
break;
}
// Trava dos botoes
key = true;
if (!digitalRead(LFT) || !digitalRead(RGH)) key = false;
delay(90);
}
lcd.clear();
while(!digitalRead(SLC));
lcd.setCursor(0,1);
lcd.print("Executando...");
delay(1000);
return opt;
}
void ligarLed(){
digitalWrite(LED, HIGH);
}
void apagarLed() {
digitalWrite(LED, LOW);
}
void piscarLed() {
for(int i=0;i<5;i++){
ligarLed();
delay(500);
apagarLed();
delay(500);
}
}