#include <Keypad.h>
const byte filas = 4;
const byte columnas = 4;
char keys[filas] [columnas] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'},
};
byte pinesFilas[filas] = {13, 12, 11, 10};
byte pinesColumnas[columnas] = {9, 8, 7, 6};
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, filas, columnas);
char tecla;
char clave[7]; // clave de 6 dígitos y 1 más, que es null
char clave_maestra[7] = "123456"; // la correcta
byte indice = 0;
#define PIN_TRIG 2
#define PIN_ECHO 3
#define PIN_BUZZER 5
#define PIN_LED 4
int distMin = 60;
int distMax = 30;
void setup() {
pinMode(PIN_BUZZER, OUTPUT);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
Serial.begin(9600);
}
void loop() {
float distance = readDistance();
bool cerca = distance <= distMax;
bool masoCerca = distance <= distMin;
tecla = teclado.getKey();
if (masoCerca) {
digitalWrite(PIN_LED, HIGH);
} else {
digitalWrite(PIN_LED, LOW);
}
if(cerca) {
digitalWrite(PIN_BUZZER, HIGH);
digitalWrite(PIN_LED, HIGH);
} else {
digitalWrite(PIN_BUZZER, LOW);
digitalWrite(PIN_LED, LOW);
}
// CLAVE:
if (tecla && tecla != '#') { // Se excluye el carácter '#' para indicar el final de la clave
clave[indice] = tecla;
indice++;
Serial.print(tecla);
}
if (tecla == '#') { // Si se presiona el carácter '#', se inicia la comparación de la clave
clave[indice] = '\0'; // Agrega el carácter nulo al final de la clave
Serial.println(); // Salto de línea para mejorar la visualización
if (!strcmp(clave, clave_maestra)) {
Serial.println("Correcta");
digitalWrite(PIN_BUZZER, LOW);
digitalWrite(PIN_LED, LOW);
} else {
Serial.println("Incorrecta");
indice = 0;
digitalWrite(PIN_BUZZER, HIGH);
digitalWrite(PIN_LED, HIGH);
}
}
}
float readDistance() {
// Inicia uma nova medição:
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
// Devolve o resultado:
int duration = pulseIn(PIN_ECHO, HIGH);
return (duration / 58.0);
}