#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int maxTemperature = 37;
int minTemperature = 34;
boolean backlight = true;
int contrast = 50;
// item do menu, començando pelo primeiro da tela atual
int menuitem = 1;
// tela atual
int page = 1;
volatile boolean up = false;
volatile boolean down = false;
volatile boolean middle = false;
// Estado do botão para descer
int downButtonState = 0;
// Estado do botão para subir
int upButtonState = 0;
// Estado do botão para selecionar
int selectButtonState = 0;
// Último estado do botão para descer
int lastDownButtonState = 0;
// Último estado do botão para subir
int lastSelectButtonState = 0;
// Último estado do botão para selecionar
int lastUpButtonState = 0;
void setup() {
pinMode(A0, INPUT_PULLUP); // Botão de descer
pinMode(A1, INPUT_PULLUP); // Botão de selecionar
pinMode(A2, INPUT_PULLUP); // Botão de subir
pinMode(3, OUTPUT); // Backlight do LCD
digitalWrite(3, HIGH); // Ligar o backlight
// Inicializando o display LCD
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Menu:");
lcd.setCursor(0, 1);
lcd.print("1. Opção 1");
}
void loop() {
// Atualizando o menu / Desenhando o menu
drawMenu();
// Verificando cada botão para saber se ele pressionado
downButtonState = digitalRead(A0);
selectButtonState = digitalRead(A1);
upButtonState = digitalRead(A2);
checkIfDownButtonIsPressed();
checkIfUpButtonIsPressed();
checkIfSelectButtonIsPressed();
// Se o botão para cima for pressionado e estiver na página 1
if (up && page == 1)
{
up = false;
menuitem--;
if (menuitem == 0) {
menuitem = 3;
}
}
// Se o botão para cima for pressionado e estiver na página 2
else if (up && page == 2)
{
up = false;
contrast--;
setContrast();
}
// Se o botão para baixo for pressionado e estiver na página 1
if (down && page == 1)
{
down = false;
menuitem++;
if (menuitem == 4) {
menuitem = 1;
}
}
// Se o botão para baixo for pressionado e estiver na página 2
else if (down && page == 2)
{
down = false;
contrast++;
setContrast();
}
// Se o botão do meio for pressionado
if (middle)
{
middle = false;
// Verificar ações com base na página e no item do menu selecionado
if (page == 1 && menuitem == 2)
{
if (backlight) {
backlight = false;
turnBacklightOff();
} else {
backlight = true;
turnBacklightOn();
}
}
if (page == 1 && menuitem == 3)
{
resetDefaults();
}
else if (page == 1 && menuitem == 1) {
page = 2;
} else if (page == 2) {
page = 1;
}
}
}
void drawMenu() {
lcd.clear();
lcd.setCursor(0, 0);
if (menuitem == 1) {
lcd.setTextColor(WHITE); // Cor do texto para a opção selecionada
lcd.setBackColor(BLACK); // Cor do fundo para a opção selecionada
} else {
lcd.setTextColor(BLACK); // Cor do texto para outras opções
lcd.setBackColor(WHITE); // Cor do fundo para outras opções
}
lcd.print("Max: ");
lcd.print(maxTemperature);
lcd.print(" ");
lcd.print((char)223); // Grau Celsius
lcd.setCursor(0, 1);
if (menuitem == 2) {
lcd.setTextColor(WHITE); // Cor do texto para a opção selecionada
lcd.setBackColor(BLACK); // Cor do fundo para a opção selecionada
} else {
lcd.setTextColor(BLACK); // Cor do texto para outras opções
lcd.setBackColor(WHITE); // Cor do fundo para outras opções
}
lcd.print("Min: ");
lcd.print(minTemperature);
lcd.print(" ");
lcd.print((char)223); // Grau Celsius
}
void checkIfUpButtonIsPressed() {
if (upButtonState != lastUpButtonState) {
if (upButtonState == LOW) {
// Botão pressionado
if (menuitem == 1) {
maxTemperature++;
drawMenu();
} else if (menuitem == 2) {
minTemperature++;
drawMenu();
}
}
lastUpButtonState = upButtonState;
}
}
void checkIfDownButtonIsPressed() {
if (downButtonState != lastDownButtonState) {
if (downButtonState == LOW) {
// Botão pressionado
if (menuitem == 1) {
maxTemperature--;
drawMenu();
} else if (menuitem == 2) {
minTemperature--;
drawMenu();
}
}
lastDownButtonState = downButtonState;
}
}
void checkIfSelectButtonIsPressed() {
if (selectButtonState != lastSelectButtonState) {
if (selectButtonState == LOW) {
// Botão pressionado
if (page == 1) {
if (menuitem == 1 || menuitem == 2) {
// Mudar para a próxima tela
page = 2;
drawMenu(); // Atualizar a tela
} else if (menuitem == 3) {
// Salvar as configurações
saveSettings();
// Retornar à tela anterior
page = 1;
drawMenu(); // Atualizar a tela
}
} else if (page == 2) {
// Retornar à tela anterior
page = 1;
drawMenu(); // Atualizar a tela
}
}
lastSelectButtonState = selectButtonState;
}
}