#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define Ancho 128
#define Alto 64
#define display_Reset -1
Adafruit_SSD1306 display(Ancho, Alto, &Wire, display_Reset);
const byte Filas = 4;
const byte Column = 4;
char keys[Filas][Column] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte PinsFil[Filas] = {13, 12, 14, 27};
byte PinsCol[Column] = {26, 25, 33, 32};
void setup() {
Wire.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
char claveKey = getKey();
if (claveKey != '\0') {
if (claveKey == '*') {
checkcontra();
}
}
}
char getKey() {
for (byte i = 0; i < Column; i++) {
pinMode(PinsCol[i], OUTPUT);
digitalWrite(PinsCol[i], LOW);
for (byte j = 0; j < Filas; j++) {
pinMode(PinsFil[j], INPUT_PULLUP);
if (digitalRead(PinsFil[j]) == LOW) {
delay(50);
while (digitalRead(PinsFil[j]) == LOW);
return keys[j][i];
}
}
digitalWrite(PinsCol[i], HIGH);
}
return '\0';
}
void checkcontra() {
String contra = "";
while (contra.length() < 4) {
char key = getKey();
if (key != '\0') {
contra += key;
display.clearDisplay();
display.setCursor(0, 0);
display.println("Introducir Contrasena");
display.println(contra);
display.display();
}
}
if (contra == "1234") {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Acceso Concedido");
display.display();
delay(2000);
} else {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Acceso Denegado");
display.display();
delay(2000);
}
// Limpiar contraseña
contra = "";
}