#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Servo.h>
const uint8_t ROWS = 4;
const uint8_t COLS = 3;
char keys[ROWS][COLS] = {
{ '1', '2', '3'},
{ '4', '5', '6'},
{ '7', '8', '9'},
{ '*', '0', '#'}
};
uint8_t colPins[COLS] = { 4, 3, 2 }; // C1, C2, C3
uint8_t rowPins[ROWS] = { 8, 7, 6, 5 }; // R1, R2, R3, R4
int pos = 0;
const int QTDE_APTOS = 5;
String aptos[QTDE_APTOS] = { "10", "11", "12", "13", "14" };
String senhas[QTDE_APTOS] = { "102030", "112233", "122436", "132639", "142842" };
int i;
String teclaAcumulada = "";
int aptoOuSenha = 0; //0- Apto / 1-Senha
int qtdeTeclas = 0;
bool encontrou = false;
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2);
Servo servo[QTDE_APTOS];
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Informe o Apto.:");
Serial.begin(9600);
servo[0].attach(9);
servo[1].attach(10);
servo[2].attach(11);
servo[3].attach(12);
servo[4].attach(13);
for (i = 0; i < QTDE_APTOS; i += 1) {
servo[i].write(0);
}
}
void loop() {
char tecla = keypad.getKey();
if (teclaAcumulada == "") {
pos = 0;
if (aptoOuSenha == 0) {
lcd.setCursor(0, 0);
lcd.print("Informe o Apto.:");
lcd.setCursor(0,1);
lcd.print(" ");
}
}
//servo5.write(180);
if (tecla != NO_KEY) {
if (qtdeTeclas >= 16 || tecla == '#') {
encontrou = false;
for (i = 0; i < QTDE_APTOS; i += 1) {
if (aptoOuSenha == 0) {
if (aptos[i] == teclaAcumulada) {
lcd.setCursor(0,0);
lcd.print("Informe a senha:");
lcd.setCursor(0,1);
lcd.print(" ");
encontrou = true;
aptoOuSenha = 1;
break;
}
} else {
if (senhas[i] == teclaAcumulada) {
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print("LIBERADO!!!");
encontrou = true;
aptoOuSenha = 0;
servo[i].write(180);
delay(3000);
servo[i].write(0);
break;
}
}
}
if (!encontrou) {
if (aptoOuSenha == 0) {
lcd.setCursor(0,0);
lcd.print("Apto. Incorreto!!!");
lcd.setCursor(0,1);
lcd.print("Tente novamente!!!");
delay(3000);
} else {
lcd.setCursor(0,0);
lcd.print("Senha Incorreta!!!");
lcd.setCursor(0,1);
lcd.print("Tente novamente!!!");
delay(3000);
}
aptoOuSenha = 0;
}
teclaAcumulada = "";
} else if (tecla == '*') {
teclaAcumulada = "";
lcd.setCursor(0,1);
lcd.print(" ");
} else {
teclaAcumulada += tecla;
if (aptoOuSenha == 0) {
lcd.setCursor(pos,1);
lcd.print(tecla);
} else {
lcd.setCursor(pos,1);
lcd.print("*");
}
pos++;
}
//Serial.println(teclaAcumulada);
//Serial.println(tecla);
}
}