/*imprime una clave en el monitor serial y coloca si es correcta o incorrecta
//imprime en el teclado correcto o incorrecto
#include <Keypad.h> // importa libreria Keypad
const byte FILAS = 4; // define numero de filas
const byte COLUMNAS = 4; // define numero de columnas
char keys[FILAS][COLUMNAS] = { // define la distribucion de teclas
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {13,12,14,27}; // Pines correspondientes a las filas
byte pinesColumnas[COLUMNAS] = {26,25,33,32}; // Pines correspondientes a las columnas2
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS); // crea objeto
char TECLA; // almacena la tecla presionada
char CLAVE[7]; // almacena en un array 6 digitos ingresados
char CLAVE_MAESTRA[7] = "123456"; // almacena en un array la contraseña maestra
byte INDICE = 0; // indice del array
void setup()
{
Serial.begin(9600); // inicializa comunicacion serie
}
void loop(){
TECLA = teclado.getKey(); // obtiene tecla presionada y asigna a variable
if (TECLA) // comprueba que se haya presionado una tecla
{
CLAVE[INDICE] = TECLA; // almacena en array la tecla presionada
INDICE++; // incrementa indice en uno
Serial.print(TECLA); // envia a monitor serial la tecla presionada
}
if(INDICE == 6) // si ya se almacenaron los 6 digitos
{
if(!strcmp(CLAVE, CLAVE_MAESTRA)) // compara clave ingresada con clave maestra
Serial.println(" Correcta"); // imprime en monitor serial que es correcta la clave
else
Serial.println(" Incorrecta"); // imprime en monitor serial que es incorrecta la clave
INDICE=0;
}
}*/
/*-------------------------------------------------*/
/*#include<Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // dependiendo del fabricante del LCD el codigo 0x27 puede cambiar
// 0x3F , 0x20 , 0x38 ,
void setup() {
lcd.init();
lcd.backlight(); // Enciende el led de la pantalla
lcd.clear(); // Limpia la pantalla
}
void loop() {
lcd.setCursor(0,0); // Empieza a escribir en la fila cero columna cero
lcd.print(". ALEX ALCIDES ."); // Mensaje a desplegar
lcd.setCursor(0,1); // Empieza a escribir en la fila cero columna uno
lcd.print("BARRANCA CAVERO "); // Mensaje 2 a desplegar
delay(3000); // espera 3 segundos con el mensaje estático
for(int c=0;c<10;c++){
lcd.scrollDisplayLeft(); // Desplaza el mensaje a la Izquierda
delay(500);
}
}*/
/*-------------------------------------------------*/
/*
#include <Wire.h> // Librería para comunicación I2C (permite que el Arduino se comunique con dispositivos como pantallas LCD mediante solo 2 pines: SDA y SCL)
#include <LiquidCrystal_I2C.h> // Librería específica para controlar pantallas LCD con interfaz I2C
LiquidCrystal_I2C lcd(0x27,16,2); // Se crea un objeto "lcd" indicando la dirección I2C (0x20), y el tamaño de la pantalla (16 columnas x 2 filas)
// Nota: Dependiendo del módulo I2C, la dirección puede ser 0x27, 0x3F, 0x38, etc.
int numero = 0; // Variable entera para contar (inicia en 0)
void setup() {
lcd.init(); // Inicializa el LCD (obliga al Arduino a reconocer la pantalla)
lcd.backlight(); // Enciende la luz de fondo de la pantalla LCD
lcd.clear(); // Limpia cualquier texto previo en el LCD
Serial.begin(9600); // Inicia la comunicación serial a 9600 baudios (para enviar datos al monitor serial)
}
void loop() {
while (numero < 100) { // Mientras la variable numero sea menor a 100, repite este bloque de código
numero++; // Incrementa en 1 la variable "numero"
lcd.setCursor(0,0); // Coloca el cursor en la columna 0, fila 0 (arriba a la izquierda del LCD)
lcd.print(numero); // Muestra en la pantalla el número actual
lcd.print(")NO DEBO LLEGAR"); // Imprime la frase a continuación en la misma línea
lcd.setCursor(0,1); // Mueve el cursor a la columna 0, fila 1 (segunda línea del LCD)
lcd.print(" TARDE A CLASE"); // Imprime el texto en la segunda línea del LCD
Serial.print(numero); // Envía el número por el puerto serial
Serial.println(") NO DEBO LLEGAR TARDE A CLASE DE EPT ELECTRONICA"); // Envía la frase completa por serial (cada vez en nueva línea)
delay(500); // Espera 500 milisegundos (medio segundo) antes de continuar
lcd.clear(); // Limpia el LCD para que el siguiente texto no se sobreponga
}
}
*/
//---------------------------------------------------------------------
#include<Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h> // importa libreria Keypad
#include <ESP32Servo.h>
LiquidCrystal_I2C lcd(0x27,16,2); // dependiendo del fabricante del LCD el codigo 0x27 puede cambiar
// 0x3F , 0x20 , 0x38 ,
const byte FILAS = 4; // define numero de filas
const byte COLUMNAS = 4; // define numero de columnas
char keys[FILAS][COLUMNAS] = { // define la distribucion de teclas
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte pinesFilas[FILAS] = {13,12,14,27}; // Pines correspondientes a las filas
byte pinesColumnas[COLUMNAS] = {26,25,33,32}; // Pines correspondientes a las columnas2
Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS); // crea objeto
char TECLA; // almacena la tecla presionada
char CLAVE[9]; // almacena en un array 6 digitos ingresados
char CLAVE_MAESTRA[9] = "*88AB00#"; // almacena en un array la contraseña maestra
byte INDICE = 0; // indice del array
Servo miServo; // Crea un objeto Servo
const int PIN_SERVOMOTOR = 23; // Define el pin al que está conectado el servomotor
void setup(){
Serial.begin(115200); // Inicializa comunicación serie
lcd.init(); // Inicializa el LCD
lcd.backlight(); // Enciende la luz de fondo del LCD
lcd.clear(); // Limpia la pantalla LCD
lcd.setCursor(0, 0); // Establece el cursor en la primera línea
lcd.print("Ingrese clave:"); // Mensaje inicial en la LCD
miServo.attach(PIN_SERVOMOTOR); // Conecta el servomotor al pin definido
miServo.write(90); // Inicializa el servomotor en la posición 90°
}
void loop(){
TECLA = teclado.getKey(); // Obtiene la tecla presionada
if (TECLA) // Verifica si se ha presionado una tecla
{
if (INDICE < 8) { // Asegura que no se sobrepasen los 6 dígitos
CLAVE[INDICE] = TECLA; // Almacena la tecla presionada
INDICE++; // Incrementa el índice
Serial.print(TECLA); // Envia la tecla al monitor serial
lcd.setCursor(0, 1); // Establece el cursor en la segunda línea
lcd.print(" "); // Limpia la línea
lcd.setCursor(0, 1); // Establece el cursor en la segunda línea
for (byte i = 0; i < INDICE; i++) {
lcd.print(CLAVE[i]); // Muestra la clave en construcción en la LCD
}
}
}
if(INDICE == 8) // Si se han ingresado 6 dígitos
{
CLAVE[INDICE] = '\0'; // Termina la cadena de clave
lcd.clear(); // Limpia la pantalla LCD
lcd.setCursor(0, 0); // Establece el cursor en la primera línea
lcd.print("Clave: "); // Mensaje de inicio en la LCD
lcd.setCursor(0, 1); // Establece el cursor en la segunda línea
lcd.print(CLAVE); // Muestra la clave completa en la LCD
delay(2000); // Muestra la clave ingresada por 2 segundos
lcd.clear(); // Limpia la pantalla LCD para mostrar el resultado de la verificación
if(strcmp(CLAVE, CLAVE_MAESTRA) == 0) { // Compara la clave ingresada con la clave maestra
Serial.println("Correcta"); // Imprime en el monitor serial que la clave es correcta
lcd.setCursor(0, 0);
lcd.print("CLAVE CORRECTA");
miServo.write(180); // Mueve el servomotor a 180°
delay(5000); // Espera 2 segundos
miServo.write(90); // Mueve el servomotor de vuelta a 90°
delay(2000);
}
else {
Serial.println("Incorrecta"); // Imprime en el monitor serial que la clave es incorrecta
lcd.setCursor(0, 0);
lcd.print("CLAVE INCORRECTA");
}
delay(3000); // Espera 3 segundos
INDICE = 0; // Reinicia el índice para permitir una nueva entrada
lcd.clear(); // Limpia la pantalla LCD para el próximo uso
lcd.setCursor(0, 0); // Establece el cursor en la primera línea
lcd.print("Ingrese clave:"); // Mensaje inicial en la LCD
}
}