#include <LiquidCrystal_I2C.h>
#define PIN_BUTTON 2
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define DELAY_DEBOUNCE 50
#define DELAY_APERTOS 2000
typedef enum {
INICIAL,
FRASES,
DADO,
SIMNAO,
JOGO
} OpMenu;
void displayWrite(String var1, String var2);
void botao();
void frases();
OpMenu checagemMenu();
LiquidCrystal_I2C lcd(0x27, LCD_COLUMNS, LCD_ROWS);
bool botaoPressionado = false;
OpMenu menuAtual;
void setup() {
pinMode(PIN_BUTTON, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN_BUTTON), botao, CHANGE);
randomSeed(analogRead(0));
lcd.init();
lcd.backlight();
displayWrite(" Bem vindo artt ", " :) ");
delay(3000);
}
void loop(){
menuAtual = checagemMenu();
switch (menuAtual){
case INICIAL:
displayWrite("Inicial", " :) ");
break;
case FRASES:
displayWrite("Frases", " :) ");
break;
case DADO:
displayWrite("Dado", " :) ");
break;
case SIMNAO:
displayWrite("Simnao", " :) ");
break;
case JOGO:
displayWrite("Jogo", " :) ");
break;
}
}
void frases() {
int op;
char texto1[17], texto2[17];
if(botaoPressionado){
op = random(1,5);
switch (op){
case 1:
strcpy(texto1, "abalo");
strcpy(texto2, "nengue");
break;
case 2:
strcpy(texto1, "ai");
strcpy(texto2, "viado");
break;
case 3:
strcpy(texto1, "nt");
strcpy(texto2, "paizao");
break;
case 4:
strcpy(texto1, "ai eh");
strcpy(texto2, "foda");
break;
case 5:
strcpy(texto1, "fala isso");
strcpy(texto2, "não");
break;
}
displayWrite(texto1, texto2);
delay(100);
}
}
void botao(){
botaoPressionado = !botaoPressionado;
delay(DELAY_DEBOUNCE);
}
OpMenu checagemMenu(){
int tempoAtual;
int tempoMax = millis() + DELAY_APERTOS;
int quantApertos = 0;
bool botaoEstavaPressionado = false;
while(true){
while (tempoAtual < tempoMax){
if (botaoPressionado && !botaoEstavaPressionado){
quantApertos++;
botaoEstavaPressionado = true;
}
if (!botaoPressionado){
botaoEstavaPressionado = false;
}
tempoAtual = millis();
}
switch (quantApertos){
case 0: return INICIAL;
case 1: return FRASES;
case 2: return DADO;
case 3: return SIMNAO;
case 4: return JOGO;
}
quantApertos = 0;
}
}
void displayWrite(String var1, String var2){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(var1);
lcd.setCursor(0, 1);
lcd.print(var2);
return;
}