Lembra-se das antigas fechaduras de cofres? Elas podem ser imitadas com o Arduino, um potenciômetro, alguns LEDs e um display LCD que indica se a senha foi colocada corretamente.
Dificuldade:
Montagem:
Programação:
Material Utilizado:
A Montagem
O Sketch
#include <LiquidCrystal.h> //Inclui a biblioteca LiquidCrystal.h
#define botao 8 //Define botao como 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Instância o LCD com os respectivos pinos que serão utilizados
int map_pot; //Variável para armazenar o valor da escla de 0 a 5 do potenciômetro
int i=0; //Variável para contagem
char senha[] = "0000"; //Variável para armazernar os digitos da combinação
char senhadesejada[] = "4242"; //Variável para armazenar a senha desejada
void setup()
{
lcd.begin(16,2); //Inicia o LCD
pinMode(A1, OUTPUT); //Configura o pino A1 como saída
pinMode(A2, OUTPUT); //Configura o pino A2 como saída
pinMode(A3, OUTPUT); //Configura o pino A3 como saída
pinMode(A4, OUTPUT); //Configura o pino A4 como saída
pinMode(A5, OUTPUT); //Configura o pino A5 como saída
}
void loop()
{
lcd.setCursor(0,0); //Limpa a tela do LCD
lcd.print("Senha: "); //Escreve a frase "Digite a Senha: "
map_pot = map(analogRead(A0), 0,1023, 0,5); //Pega o valor do potenciômetro e converte para uma escala de 0 a 5
if(map_pot > 0 )
digitalWrite(A1, HIGH); //Se o valor aferido for maior que 0
else digitalWrite(A1, LOW); //Acende o primeiro LED
if(map_pot > 1 ) digitalWrite(A2, HIGH); //Se o valor aferido for maior que 1
else digitalWrite(A2, LOW); //Acende o segundo LED
if(map_pot > 2 ) digitalWrite(A3, HIGH); //Se o valor aferido for maior que 2
else digitalWrite(A3, LOW); //Acende o terceiro LED
if(map_pot > 3 ) digitalWrite(A4, HIGH); //Se o valor aferido for maior que 3
else digitalWrite(A4, LOW); //Acende o quarto LED
if(map_pot > 4 ) digitalWrite(A5, HIGH); //Se o valor aferido for maior que 4
else digitalWrite(A5, LOW); //Acende o quinto LED
if(!digitalRead(botao)) //Se o botão for pressionado
{
lcd.setCursor(i+7,0); //Posiciona o cursor na segunda linha
lcd.print("*"); //Imprime o caractere "*"
if(map_pot == 0) senha[i] = '0'; //Se o digito for 0, armazena na respectiva posição da senha
else if(map_pot == 1) senha[i] = '1'; //Se o digito for 1, armazena na respectiva posição da senha
else if(map_pot == 2) senha[i] = '2'; //Se o digito for 2, armazena na respectiva posição da senha
else if(map_pot == 3) senha[i] = '3'; //Se o digito for 3, armazena na respectiva posição da senha
else if(map_pot == 4) senha[i] = '4'; //Se o digito for 4, armazena na respectiva posição da senha
else if(map_pot == 5) senha[i] = '5'; //Se o digito for 5, armazena na respectiva posição da senha
i++; //Incrementa a posição da senha
while(!digitalRead(botao)){
} //Aguarda o botão ser despressionado
}
if(i>3) //Se os 4 dígitos forem recebidos
{
//Compara todos os digitos da senha]
//E se tiver algum digito não correspondente
if(senha[0] != senhadesejada[0] || senha[1] != senhadesejada[1] || senha[2] != senhadesejada[2] || senha[3] != senhadesejada[3])
{
//Efeito de entrada da frase "SENHA INCORRETA"
lcd.clear(); //Limpa a tela do LCD
lcd.setCursor(0,0); //Posiciona o cursor na primeira coluna da primeira linha
lcd.print("S"); //Imprime na tela a lembra "S"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(1,0 ); //Posiciona o cursor na segunda coluna da primeira linha
lcd.print("E"); //Imprime na tela a lembra "E"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(2,0); //Posiciona o cursor na terceira coluna da primeira linha
lcd.print("N"); //Imprime na tela a lembra "N"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(3,0); //Posiciona o cursor na quarta coluna da primeira linha
lcd.print("H"); //Imprime na tela a lembra "H"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(4,0); //Posiciona o cursor na quinta coluna da primeira linha
lcd.print("A "); //Imprime na tela a lembra "A"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(6,0); //Posiciona o cursor na sétima coluna da primeira linha
lcd.print("I"); //Imprime na tela a lembra "I"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(7,0); //Posiciona o cursor na oitava coluna da primeira linha
lcd.print("N"); //Imprime na tela a lembra "N"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(8,0); //Posiciona o cursor na nona coluna da primeira linha
lcd.print("C"); //Imprime na tela a lembra "C"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(9,0); //Posiciona o cursor na décima coluna da primeira linha
lcd.print("O"); //Imprime na tela a lembra "O"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(10,0); //Posiciona o cursor na décima primeira coluna da primeira linha
lcd.print("R"); //Imprime na tela a lembra "R"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(11,0); //Posiciona o cursor na décima segunda coluna da primeira linha
lcd.print("R"); //Imprime na tela a lembra "R"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(12,0); //Posiciona o cursor na décima terceira coluna da primeira linha
lcd.print("E"); //Imprime na tela a lembra "E"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(13,0); //Posiciona o cursor na décima quarta coluna da primeira linha
lcd.print("T"); //Imprime na tela a lembra "T"
delay(200); //Aguarda 200 milissegundos
lcd.setCursor(14,0); //Posiciona o cursor na décima quinta coluna da primeira linha
lcd.print("A"); //Imprime na tela a lembra "A"
delay(200); //Aguarda 200 milissegundos
//==================================================================
//Laço para o efeito de piscagem da frase "SENHA INCORRETA"
for(int i=0;i<3;i++)
{
lcd.clear(); //Limpa a tela do LCD
lcd.setCursor(0,0); //Posiciona o cursor na primeira coluna da primeira linha
delay(500); //Aguarda 200 milissegundos
lcd.print("SENHA INCORRETA"); //Imprime a frase "SENHA INCORRETA"
delay(500); //Aguarda 500 milissegundos
}
}
//===========================================================
else //Senão
{
//Laço para o efeito de piscagem da frase "SENHA CORRETA"
for(int i=0;i<3;i++)
{
lcd.clear(); //Limpa a tela do LCD
lcd.setCursor(0,0); //Posiciona o cursor na primeira coluna da primeira linha
delay(500); //Aguarda 200 milissegundos
lcd.print(" SENHA CORRETA"); //Imprime a frase "SENHA CORRETA"
delay(500); //Aguarda 500 milissegundos
}
}
i=0; //Zera a variável de contagem das posições
}
}