/*----------------------------------------------------------------------
Aniela Joaquina Ubillus Peña 20226663
-----------------------------------------------------------------------*/
uint8_t pinesFilas[] = {13, 12, 11, 10};
uint8_t pinesColumnas[] = {7, 6, 5, 4};
uint8_t teclas[4][4] = {{1, 2, 3, 'A'},
{4, 5, 6, 'B'},
{7, 8, 9, 'C'},
{'*', 0, '#', 'D'}};
uint32_t clave = 0;
uint8_t indice = 0;
char modo;
int contador = 0;
int centinela = 0;
void setup() {
for (int nL = 0; nL < 4; nL++) {
pinMode(pinesFilas[nL], OUTPUT);
digitalWrite(pinesFilas[nL], HIGH);
}
for (int nC = 0; nC < 4; nC++) {
pinMode(pinesColumnas[nC], INPUT_PULLUP);
}
Serial.begin(115200);
Serial.println("Por favor ingrese la clave de 6 dígitos");
}
void loop() {
for (uint8_t nL = 0; nL < 4; nL++) {
digitalWrite(pinesFilas[nL], LOW); // Activar fila
for (uint8_t nC = 0; nC < 4; nC++) { // Revisar columnas
if (digitalRead(pinesColumnas[nC]) == LOW) {
uint8_t tecla = teclas[nL][nC];
if (tecla >= 0 && tecla <= 9 && indice < 6) {
clave = clave * 10 + tecla;
indice++;
Serial.println(clave);
} else if (centinela == 1) {
if (tecla == 'C') {
contador = 0;
indice=0;
centinela = 0; // Reinicia el modo
Serial.println("Reiniciado. Vuelva a ingresar su clave...");
} else if (tecla == 'B') {
modo = 'B'; // Modo descendente
Serial.println("Modo: descendente");
} else if (tecla == 'A') {
modo = 'A'; // Modo ascendente
Serial.println("Modo: ascendente");
}
}
// Verificar clave correcta
if (clave == 131175) {
clave = 0;
centinela = 1;
Serial.println("Clave correcta. Ingrese A, B o C.");
} else if (clave >= 100000 && centinela == 0) {
Serial.println("Clave incorrecta. Vuelva a ingresar su clave...");
clave = 0;
indice = 0;
}
// Esperar que la tecla se suelte
while (digitalRead(pinesColumnas[nC]) == LOW) {}
}
}
digitalWrite(pinesFilas[nL], HIGH); // Desactivar fila
}
// Lógica del contador
if (centinela == 1) {
if (modo == 'B' ) {
if(contador>0 && contador<=10){
contador-=1;
Serial.println(contador);
delay(900);
}
else {
modo == 'A';
centinela=0;
contador=0;
indice=0;
Serial.println("Vuelva a ingresar su clave...");
}
} else if (modo == 'A' ) {
if(contador>=0 && contador<10){
contador+=1;
Serial.println(contador);
delay(900);
}
else {
modo == 'A';
centinela=0;
contador=0;
indice=0;
Serial.println("Vuelva a ingresar su clave...");
}
}
else if (contador >= 0 && contador < 10) {
if(contador>=0 && contador<10){
contador+=1;
Serial.println(contador);
delay(500);
}
else {
modo == 'A';
centinela=0;
contador=0;
indice=0;
Serial.println("Vuelva a ingresar su clave...");
}
// Reduce el tiempo de espera
}
}
}