// ************************************************************** //
// ***** Sistema com senha usando 3 botões e um display I2C ***** //
// ***** 23/04/2024 - JONATHAN SERENA ***** //
// ************************************************************** //
// Biblioteca para utilizar o display I2C
#include <LiquidCrystal_I2C.h>
// Define o pino de cada botão
#define BOTAO_ESQ 2
#define BOTAO_MEIO 0
#define BOTAO_DIR 4
// Define a senha
#define SENHA "2000"
// Define o endereço I2C para 0x27 e o tamanho para 16x2
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
lcd.init(); // Inicializa o display LCD
lcd.backlight(); // Liga a luz de fundo do LCD
// Configura os pinos dos botões como entrada
pinMode(BOTAO_ESQ, INPUT_PULLUP);
pinMode(BOTAO_MEIO, INPUT_PULLUP);
pinMode(BOTAO_DIR, INPUT_PULLUP);
}
void loop() {
// Limpa o display
lcd.clear();
// Solicita a senha
lcd.setCursor(0, 0);
lcd.print("DIGITE A SENHA:");
lcd.setCursor(0, 1);
lcd.print("[0***]");
// Array para armazenar a senha digitada
char senhaDigitada[4] = {'0', '0', '0', '0'};
int posicaoCursor = 1;
// Loop para a entrada da senha
while (posicaoCursor < 5) {
int estadoBotao1 = digitalRead(BOTAO_ESQ);
int estadoBotao2 = digitalRead(BOTAO_MEIO);
int estadoBotao3 = digitalRead(BOTAO_DIR);
if (estadoBotao1 == LOW) {
senhaDigitada[posicaoCursor - 1] = ((senhaDigitada[posicaoCursor - 1] - '0' - 1 + 10) % 10) + '0'; // Decrementa o dígito
lcd.setCursor(posicaoCursor, 1);
lcd.print(senhaDigitada[posicaoCursor - 1]);
} else if (estadoBotao3 == LOW) {
senhaDigitada[posicaoCursor - 1] = ((senhaDigitada[posicaoCursor - 1] - '0' + 1) % 10) + '0'; // Incrementa o dígito
lcd.setCursor(posicaoCursor, 1);
lcd.print(senhaDigitada[posicaoCursor - 1]);
} else if (estadoBotao2 == LOW) {
posicaoCursor++;
if (posicaoCursor <= 4) {
lcd.setCursor(posicaoCursor, 1);
if (senhaDigitada[posicaoCursor - 1] != '0') {
lcd.print("0");
} else {
lcd.print(senhaDigitada[posicaoCursor - 1]);
}
}
}
delay(150); // Pequeno atraso para evitar leituras erráticas
}
// Se a senha for igual a pre definida, a função strcmp retorna 0 e a mensagem "SENHA CORRETA" é exibida no LCD.
// Caso contrário, a mensagem "SENHA INCORRETA" é exibida.
if (strcmp(senhaDigitada, SENHA) == 0) {
// Senha correta
lcd.clear();
lcd.print("SENHA CORRETA");
delay(1500);
} else {
// Senha incorreta
lcd.clear();
lcd.print("SENHA INCORRETA");
delay(1500);
}
}