Está en la página 1de 16

#include <LiquidCrystal.

h>

#include <Servo.h>

#include <EEPROM.h>

//pinos do lcd

byte rs = 13, e = 12, db4 = 11, db5 = 10, db6 = 9, db7 = 8;

LiquidCrystal lcd(rs, e, db4, db5, db6, db7);

//pinos do teclado matricial

byte linha0 = 7, linha1 = 6, linha2 = 5, linha3 = 4;

byte coluna0 = 3, coluna1 = 2, coluna2 = 1, coluna3 = 0;

//pino servo

Servo fechadura;

//endereço de contagens

const byte addr = 2;

const byte addr2 = 3;

const byte addr_pass[4] = {0, 1, 2, 3};

byte contAbertura = EEPROM.read(addr);

byte contMestre = EEPROM.read(addr2);

char tecla = 's';

String senha_mestre = "0000";

String senha_cadastrada = "";

byte tentativas = 0;
void setup() {

lcd.begin(16, 2);

fechadura.attach(A0);

//linhas do teclado

pinMode(linha0, INPUT_PULLUP);

pinMode(linha1, INPUT_PULLUP);

pinMode(linha2, INPUT_PULLUP);

pinMode(linha3, INPUT_PULLUP);

//colunas do teclado

pinMode(coluna0, OUTPUT);

pinMode(coluna1, OUTPUT);

pinMode(coluna2, OUTPUT);

pinMode(coluna3, OUTPUT);

trancar(true);

apresentacao();

void loop() {

MenuInicial();

//***********FUNÇÕES***********

//FUNÇÃO QUE GERENCIA TECLADO

void teclado() {

byte x = 0;

while (x < 4) {

if (x == 0) {

digitalWrite(coluna0, LOW);
digitalWrite(coluna1, HIGH);

digitalWrite(coluna2, HIGH);

digitalWrite(coluna3, HIGH);

if (!digitalRead(linha0)) {

tecla = '1'; return;

if (!digitalRead(linha1)) {

tecla = '4'; return;

if (!digitalRead(linha2)) {

tecla = '7'; return;

if (!digitalRead(linha3)) {

tecla = '*'; return;

if (x == 1) {

digitalWrite(coluna0, HIGH);

digitalWrite(coluna1, LOW);

digitalWrite(coluna2, HIGH);

digitalWrite(coluna3, HIGH);

if (!digitalRead(linha0)) {

tecla = '2'; return;

if (!digitalRead(linha1)) {

tecla = '5'; return;

if (!digitalRead(linha2)) {

tecla = '8'; return;


}

if (!digitalRead(linha3)) {

tecla = '0'; return;

if (x == 2) {

digitalWrite(coluna0, HIGH);

digitalWrite(coluna1, HIGH);

digitalWrite(coluna2, LOW);

digitalWrite(coluna3, HIGH);

if (!digitalRead(linha0)) {

tecla = '3'; return;

if (!digitalRead(linha1)) {

tecla = '6'; return;

if (!digitalRead(linha2)) {

tecla = '9'; return;

if (!digitalRead(linha3)) {

tecla = '#'; return;

if (x == 3) {

digitalWrite(coluna0, HIGH);

digitalWrite(coluna1, HIGH);

digitalWrite(coluna2, HIGH);

digitalWrite(coluna3, LOW);

if (!digitalRead(linha0)) {
tecla = 'A'; return;

if (!digitalRead(linha1)) {

tecla = 'B'; return;

if (!digitalRead(linha2)) {

tecla = 'C'; return;

if (!digitalRead(linha3)) {

tecla = 'D'; return;

x++;

tecla = 's';

/***Funções dos Menus***/

void MenuInicial() {

lcd.clear();

lcd.home();

String header = "A - B - C - D";

lcd.print("Menu Inicial");

lcd.setCursor(0, 1);

lcd.print(header);

while (true) {

char press = ReceberTecla();

if (press) {

if (press == 'A') {

lcd.setCursor(0, 1);
lcd.blink();

delay(150);

lcd.noBlink();

MenuAbrirCofre();

break;

else if (press == 'B') {

lcd.setCursor(4, 1);

lcd.blink();

delay(150);

lcd.noBlink();

MenuCadastrarSenha();

break;

else if (press == 'C') {

lcd.setCursor(8, 1);

lcd.blink();

delay(150);

lcd.noBlink();

MenuLogAcesso();

break;

else if (press == 'D') {

bateria();

break;

else if (press == '*') {

trancar(true);

break;

tecla = 0;
}

void MenuAbrirCofre() {

Senha1:

byte i = 0;

lcd.clear();

lcd.home();

lcd.print("Menu Abertura");

lcd.setCursor(0, 1);

lcd.cursor();

String temp_senha = "";

char press;

byte x = 0;

while (x < 4) {

press = ReceberTecla();

delay(30);

if (VerificarTecla(press, 'l')) {

if (press == 'D') {

goto Senha1;

if (press == '*') {

lcd.noCursor();

senha_cadastrada = "";

MenuInicial();

if (!VerificarTecla(press, 'l')) {

temp_senha += press;

lcd.print(press);
delay(50);

lcd.setCursor(i, 1);

lcd.print("");

lcd.print('*');

x++;

i++;

press = ReceberTecla();

if (press == '#') {

lcd.clear();

if (temp_senha == senha_cadastrada) {

lcd.print("ABERTO");

EEPROM.write(addr, ++contAbertura);

trancar(false);

lcd.noCursor();

delay(500);

else {

lcd.print("ERRADA");

trancar(true);

lcd.noCursor();

delay(500);

tentativas++;

if (tentativas == 3) {

Senha:

String run_senha = "";

lcd.clear();

lcd.print("Senha Mestre:");

lcd.setCursor(0, 1);

lcd.cursor();
char press;

byte i = 0;

byte x = 0;

while (x < 4) {

press = ReceberTecla();

delay(30);

if (!VerificarTecla(press, 'l')) {

run_senha += press;

lcd.print(press);

delay(50);

lcd.setCursor(i, 1);

lcd.print("");

lcd.print('*');

x++;

i++;

else if (press == 'C') {

lcd.noCursor();

goto Senha;

if (run_senha == senha_mestre) {

tentativas = 0;

lcd.noCursor();

MenuInicial();

else{

goto Senha;

}
}

else if (press == 'D') {

goto Senha1;

void MenuCadastrarSenha() {

lcd.clear();

lcd.print("CADASTRAR SENHA");

delay(500);

Senha:

senha_cadastrada = "";

String run_senha = "";

lcd.clear();

lcd.print("Senha Mestre:");

lcd.setCursor(0, 1);

lcd.cursor();

char press;

byte i = 0;

byte x = 0;

while (x < 4) {

press = ReceberTecla();

delay(30);

if (!VerificarTecla(press, 'l')) {

run_senha += press;

lcd.print(press);

delay(50);

lcd.setCursor(i, 1);

lcd.print("");
lcd.print('*');

x++;

i++;

else if (press == 'C') {

lcd.noCursor();

goto Senha;

else if (press == '*') {

lcd.noCursor();

senha_cadastrada = "";

MenuInicial();

if (run_senha == senha_mestre) {

EEPROM.write(addr2, ++contMestre);

Senha1:

senha_cadastrada = "";

String run_senha = "";

lcd.clear();

lcd.print("Nova senha:");

lcd.setCursor(0, 1);

lcd.cursor();

char press;

byte i = 0;

byte x = 0;

while (x < 4) {

press = ReceberTecla();

delay(30);

if (!VerificarTecla(press, 'l')) {

senha_cadastrada += press;
lcd.print(press);

delay(50);

lcd.setCursor(i, 1);

lcd.print("");

lcd.print('*');

x++;

i++;

else if (press == 'C') {

lcd.noCursor();

goto Senha1;

else if (press == '*') {

lcd.noCursor();

senha_cadastrada = "";

MenuInicial();

lcd.noCursor();

lcd.blink();

press = ReceberTecla();

if (press == '#') {

lcd.clear();

lcd.print("CADASTRADA");

lcd.noBlink();

delay(500);

else {

lcd.clear();

lcd.print("Senha incorreta");
lcd.noBlink();

delay(500);

void MenuLogAcesso() {

lcd.clear();

lcd.print("Acessos: ");

lcd.print(contAbertura);

lcd.setCursor(0, 1);

lcd.print("Mestre: ");

lcd.print(contMestre);

delay(4000);

char ReceberTecla() {

while (true) {

teclado();

while (tecla == 's') {

teclado();

while (tecla != 's') {

teclado();

delay(50);

return tecla;

bool VerificarTecla(char val, char modo) {


String nums = "0123456789";

String letters = "ABCD*#";

if (modo == 'n') {

if (nums.indexOf(val) != -1)

return true;

else

return false;

else if (modo == 'l') {

if (letters.indexOf(val) != -1)

return true;

else

return false;

void trancar(bool estado) {

if (estado)

fechadura.write(180);

else

fechadura.write(90);

void apresentacao() {

lcd.setCursor(0, 0);

lcd.print("Centro Universit.");

lcd.setCursor(0, 1);

lcd.print("Eniac");

delay(2000);
lcd.clear();

lcd.setCursor(0, 0);

lcd.print("Engenharia da");

lcd.setCursor(0, 1);

lcd.print("Computacao");

delay(2000);

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("Sistemas");

lcd.setCursor(0, 1);

lcd.print("Embarcados");

delay(2000);

lcd.setCursor(0, 0);

lcd.print("Felipe Barreiros");

lcd.setCursor(0, 1);

lcd.print("200652017");

delay(2000);

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("Janayna Ribeiro");

lcd.setCursor(0, 1);

lcd.print("224512017");

delay(2000);

lcd.clear();

lcd.setCursor(0, 0);

lcd.print("Israel Souza");

lcd.setCursor(0, 1);

lcd.print("218782017");

delay(2000);

lcd.clear();

}
void bateria() {

lcd.clear();

lcd.setCursor(0, 0);

lcd.print(0.0087976539589443 * analogRead(A1));

lcd.setCursor(14, 1);

lcd.print("*R");

delay(4000);

También podría gustarte