acesso_teclado_lcd

                Never    
C/C++
       
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Endereço I2C do display LCD

String LINHA1;
char linha1[18];
String LINHA2;
char linha2[18];


#define LG 2
#define LR 12

String senha;
int caracteres = 0;
int tempo = 0;

void setup()
{
	//Pinos ligados aos pinos 1, 2, 3 e 4 do teclado - Linhas
	pinMode(3, 1); //1 é saida, 0 é entrada
	pinMode(4, 1);
	pinMode(5, 1);
	pinMode(6, 1);

	//Pinos ligados aos pinos 5, 6, 7 e 8 do teclado - Colunas
	pinMode(8, 0);
	pinMode(9, 0);
	pinMode(10, 0);
	pinMode(11, 0);

	//LED Vermelho
	pinMode(LR, 1);

	//LED Verde
	pinMode(LG, 1);


	Serial.begin(115200);

	lcd.begin(16, 2);
	for (int i = 0; i < 3; i++)
	{
		lcd.backlight();
		delay(250);
		lcd.noBacklight();
		delay(250);
	}
	lcd.backlight();

	Serial.println("Aguardando acionamento das teclas...");
	Serial.println();
}

void loop()
{
	if (caracteres == 0) {
		lcd.setCursor(0, 1);
		lcd.write("SENHA:          ");
	}
	//Serial.println(tempo);
	if (caracteres > 0) {
		tempo++;
		if (tempo > 1000) {
			Serial.println("Tempo esgotado, apagando senha digitada...");
			senha = "";
			caracteres = 0;
			tempo = 0;
			digitalWrite(LR, 1);
			digitalWrite(LG, 1);
			delay(300);
			digitalWrite(LR, 0);
			digitalWrite(LG, 0);
			delay(300);
			digitalWrite(LR, 1);
			digitalWrite(LG, 1);
			delay(300);
			digitalWrite(LR, 0);
			digitalWrite(LG, 0);
			delay(300);
			digitalWrite(LR, 1);
			digitalWrite(LG, 1);
			delay(300);
			digitalWrite(LR, 0);
			digitalWrite(LG, 0);
			delay(300);
			Serial.println(senha);
		}
	}
	digitalWrite(LR, 1);
	digitalWrite(LG, 0);
	for (int ti = 3; ti < 7; ti++)
	{
		//Alterna o estado dos pinos das linhas
		digitalWrite(3, 0);
		digitalWrite(4, 0);
		digitalWrite(5, 0);
		digitalWrite(6, 0);
		digitalWrite(ti, 1);
		//Verifica se alguma tecla da coluna 1 foi pressionada
		if (digitalRead(8) == 1)
		{
			imprime_linha_coluna(ti - 2, 1);
			while (digitalRead(8) == 1) {}
		}

		//Verifica se alguma tecla da coluna 2 foi pressionada    
		if (digitalRead(9) == 1)
		{
			imprime_linha_coluna(ti - 2, 2);
			while (digitalRead(9) == 1) {};
		}

		//Verifica se alguma tecla da coluna 3 foi pressionada
		if (digitalRead(10) == 1)
		{
			imprime_linha_coluna(ti - 2, 3);
			while (digitalRead(10) == 1) {}
		}

		//Verifica se alguma tecla da coluna 4 foi pressionada
		if (digitalRead(11) == 1)
		{
			imprime_linha_coluna(ti - 2, 4);
			while (digitalRead(11) == 1) {}
		}
	}
	delay(10);
	lcd.setCursor(0, 0);
	lcd.write("STATUS: ");
	lcd.setCursor(7, 0);
	lcd.write("TRANCADO ");
}

void imprime_linha_coluna(int x, int y)
{
	tempo = 0;
	Serial.print("Linha : ");
	Serial.print(x);
	Serial.print(" x Coluna : ");
	Serial.print(y);
	delay(10);
	Serial.println();
	if (x == 1) {
		if (y == 1) {
			senha = senha + '1';
		}
		else if (y == 2) {
			senha = senha + '2';
		}
		else if (y == 3) {
			senha = senha + '3';
		}
		else if (y == 4) {
			senha = senha + 'A';
		}
	}
	else if (x == 2) {
		if (y == 1) {
			senha = senha + '4';
		}
		else if (y == 2) {
			senha = senha + '5';
		}
		else if (y == 3) {
			senha = senha + '6';
		}
		else if (y == 4) {
			senha = senha + 'B';
		}
	}
	else if (x == 3) {
		if (y == 1) {
			senha = senha + '7';
		}
		else if (y == 2) {
			senha = senha + '8';
		}
		else if (y == 3) {
			senha = senha + '9';
		}
		else if (y == 4) {
			senha = senha + 'C';
		}
	}
	else if (x == 4) {
		if (y == 1) {
			senha = senha + 'X';
		}
		else if (y == 2) {
			senha = senha + '0';
		}
		else if (y == 3) {
			senha = senha + 'H';
		}
		else if (y == 4) {
			senha = senha + 'D';
		}
	}

	Serial.println(senha);	
	lcd.setCursor(0, 1);
	lcd.write("SENHA:");
	lcd.setCursor(6, 1);
	LINHA2 = senha;
	LINHA2.toCharArray(linha2, 5);
	lcd.write(linha2);

	caracteres++;

	if (caracteres == 4) {
		digitalWrite(LR, 1);
		digitalWrite(LG, 1);
		delay(300);
		digitalWrite(LR, 0);
		digitalWrite(LG, 0);
		delay(300);
		lcd.setCursor(0, 1);
		lcd.write("SENHA:          ");
		digitalWrite(LR, 1);
		digitalWrite(LG, 1);
		delay(300);
		digitalWrite(LR, 0);
		digitalWrite(LG, 0);
		delay(300);
		digitalWrite(LR, 1);
		digitalWrite(LG, 1);
		delay(300);
		digitalWrite(LR, 0);
		digitalWrite(LG, 0);
		delay(300);
		verifica_senha();
	}
	return;
}

void verifica_senha() {
	if (senha == "5A2B") {
		lcd.setCursor(7,0);
		lcd.write("LIBERADO!");
		digitalWrite(LR, 0);
		digitalWrite(LG, 1);
		delay(2000);
	}
	else {
		lcd.setCursor(0, 1);
		lcd.write("SENHA INVALIDA  ");
		delay(2000);
	}
	caracteres = 0;
	senha = "";
	return;
}

Raw Text