🧠 Aplicação Estendida: Menu com Submenus e Ações no LCD 16x2
📌 Componentes:

  • Display LCD 16x2 (com interface I2C ou pinos diretos, usando Adafruit_LiquidCrystal)

  • 3 Botões (Navegar, Selecionar e Voltar)

  • 1 LED (acionado pelo menu)

  • Sensor de temperatura LM35 (opcional para leitura no submenu)

  • Arduino Uno





Código Arduino Atualizado


#include <Adafruit_LiquidCrystal.h>
Adafruit_LiquidCrystal lcd(0); // Endereço 0 para placas com backpack I2C integrado
// Pinos dos botões
const int botaoNavegar = 2;
const int botaoSelecionar = 3;
const int botaoVoltar = 4;
// LED de teste
const int ledPin = 13;
// Menu
int menuIndex = 0;
int subMenuIndex = 0;
bool inSubMenu = false;
String opcoesMenu[] = {"LED", "Sensor", "Sobre"};
const int totalOpcoes = 3;
void setup() {
lcd.begin(16, 2);
pinMode(botaoNavegar, INPUT_PULLUP);
pinMode(botaoSelecionar, INPUT_PULLUP);
pinMode(botaoVoltar, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
lcd.print("Menu Principal");
delay(1000);
mostrarMenu();
}
void loop() {
if (!digitalRead(botaoNavegar)) {
if (!inSubMenu) {
menuIndex = (menuIndex + 1) % totalOpcoes;
mostrarMenu();
delay(200);
} else {
subMenuIndex = (subMenuIndex + 1) % 2;
mostrarSubMenu();
delay(200);
}
}
if (!digitalRead(botaoSelecionar)) {
if (!inSubMenu) {
inSubMenu = true;
mostrarSubMenu();
delay(200);
} else {
executarAcao();
delay(200);
}
}
if (!digitalRead(botaoVoltar)) {
if (inSubMenu) {
inSubMenu = false;
subMenuIndex = 0;
mostrarMenu();
delay(200);
}
}
}
void mostrarMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Menu:");
lcd.setCursor(0, 1);
lcd.print("> " + opcoesMenu[menuIndex]);
}
void mostrarSubMenu() {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(opcoesMenu[menuIndex]);
lcd.setCursor(0, 1);
if (opcoesMenu[menuIndex] == "LED") {
lcd.print(subMenuIndex == 0 ? "> Ligar" : "> Desligar");
} else if (opcoesMenu[menuIndex] == "Sensor") {
lcd.print("> Mostrar Temp");
} else if (opcoesMenu[menuIndex] == "Sobre") {
lcd.print("> Eletrocondutor!");
}
}
void executarAcao() {
if (opcoesMenu[menuIndex] == "LED") {
if (subMenuIndex == 0) {
digitalWrite(ledPin, HIGH);
lcd.clear();
lcd.print("LED Ligado");
} else {
digitalWrite(ledPin, LOW);
lcd.clear();
lcd.print("LED Desligado");
}
} else if (opcoesMenu[menuIndex] == "Sensor") {
int leitura = analogRead(A0);
float temperatura = leitura * 0.488; // conversão para LM35
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(0, 1);
lcd.print(temperatura);
lcd.print(" C");
} else if (opcoesMenu[menuIndex] == "Sobre") {
lcd.clear();
lcd.print("Eletrocondutor");
lcd.setCursor(0, 1);
lcd.print("Arduino Rocks!");
}
delay(1500);
mostrarSubMenu();
}




🔚 Spoiler Criativo do Próximo Conteúdo

🚀 Spoiler: No próximo projeto, o display LCD vai sair da zona de conforto e ganhar vida dinâmica com barras de progresso, animações e feedback visual em tempo real. Não será mais apenas texto: será movimento, interatividade e impacto visual direto no LCD. Fique ligado — vai ser show! 🎉📟⚙️

Comentários

Postagens mais visitadas deste blog

contador 9999 com pic 16f628

CNC fotos cordenadas x y z dicas

codigo assembler braço mecanico para 5 motores