#include <Wire.h> // Biblioteca para comunicação I2C
#include <LiquidCrystal_I2C.h> // Biblioteca para controle do LCD I2C
#include <EEPROM.h> // Biblioteca EEPROM para ESP32
LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço do display I2C e suas dimensões
const int buttonPlus = 15; // Pino do botão de adição
const int buttonMinus = 2; // Pino do botão de subtração
const int buttonReset = 0; // Pino do botão de reset
const int buttonSave = 4; // Pino do botão de salvar na EEPROM
const int buttonLoad = 16; // Pino do botão de carregar da EEPROM
int count = 0; // Variável para armazenar a contagem
void setup() {
lcd.init(); // Inicializa o LCD
lcd.backlight(); // Liga o backlight do LCD
lcd.clear(); // Limpa o conteúdo do LCD
pinMode(buttonPlus, INPUT_PULLUP); // Configura os pinos dos botões como entrada com pull-up interno
pinMode(buttonMinus, INPUT_PULLUP);
pinMode(buttonReset, INPUT_PULLUP);
pinMode(buttonSave, INPUT_PULLUP);
pinMode(buttonLoad, INPUT_PULLUP);
EEPROM.begin(1024); // Inicializa a EEPROM com 1KB (1024 bytes)
EEPROM.get(0, count); // Lê o valor da EEPROM na posição 0
updateDisplay(); // Atualiza o conteúdo do LCD
}
void loop() {
if (digitalRead(buttonPlus) == LOW) { // Se o botão de adição for pressionado
count++; // Incrementa a contagem
updateDisplay(); // Atualiza o conteúdo do LCD
delay(200); // Delay para debounce
}
if (digitalRead(buttonMinus) == LOW) { // Se o botão de subtração for pressionado
count--; // Decrementa a contagem
updateDisplay(); // Atualiza o conteúdo do LCD
delay(200); // Delay para debounce
}
if (digitalRead(buttonReset) == LOW) { // Se o botão de reset for pressionado
count = 0; // Reseta a contagem
updateDisplay(); // Atualiza o conteúdo do LCD
delay(200); // Delay para debounce
}
if (digitalRead(buttonSave) == LOW) { // Se o botão de salvar for pressionado
EEPROM.put(0, count); // Salva o valor da contagem na posição 0 da EEPROM
EEPROM.commit(); // Salva as alterações na EEPROM
delay(200); // Delay para debounce
}
if (digitalRead(buttonLoad) == LOW) { // Se o botão de carregar for pressionado
EEPROM.get(0, count); // Lê o valor da EEPROM na posição 0
updateDisplay(); // Atualiza o conteúdo do LCD
delay(200); // Delay para debounce
}
}
void updateDisplay() {
lcd.clear(); // Limpa o conteúdo do LCD
lcd.setCursor(0, 0); // Posiciona o cursor na primeira linha
lcd.print("Decimal: ");
lcd.print(count); // Imprime a contagem no formato decimal
lcd.setCursor(0, 1); // Posiciona o cursor na segunda linha
lcd.print("Hex: ");
lcd.print(String(count, HEX)); // Imprime a contagem no formato hexadecimal
lcd.setCursor(9, 1);
lcd.print("Bin: ");
lcd.print(String(count, BIN)); // Imprime a contagem no formato binário
}