Contenido del curso

Proyecto Final 1 

 

Control de acceso con contraseña

Trabajas en una empresa de tecnología que está creciendo y han creado un espacio para los servidores que se usan a diario. Tu tarea es programar el control de acceso a ese espacio, utilizando una contraseña.

Deberás programar el MentorBit para que reciba y verifique una contraseña de 4 dígitos que tu elegirás. Esta se introducirá usando un potenciómetro. El funcionamiento se indica a continuación:

  • El usuario gira el potenciómetro para seleccionar un número del 0 al 9, que se verá en la pantalla OLED. Cuando el número que aparece es el deseado, el usuario presionará un botón para confirmarlo. El número elegido se añadirá a la contraseña que se mostrará en la pantalla LCD.

  • Si el usuario comete un error, podrá usar otro botón para borrar el último número introducido.

  • Una vez que el usuario haya introducido la contraseña completa, deberá presionar un botón adicional para verificarla. Si la contraseña es correcta, se encenderá el LED Verde y el sistema dará acceso. Si la contraseña es incorrecta, se encenderá el LED Rojo y el Zumbador emitirá un sonido de alerta.

  • Una vez verificada la contraseña el sistema de acceso vuelve al estado inicial, esperando que el mismo usuario u otro diferente vuelva a introducir una contraseña que verificar para dar o no acceso a los servidores.

Para ello vamos a utilizar los siguientes componentes del MentorBit:

  • 3 Pulsadores

  • Pantalla LCD y OLED

  • Potenciómetro

  • 2 LEDs

  • Zumbador

// Proyecto - Control de acceso con Contraseña

// Incluimos las librerías necesarias
#include <MentorBit.h> // Necesaria para los LEDs, Potenciómetro, Pulsadores y Zumbador
#include <MentorBitPantallas.h> // Necesaria para las pantallas LCD y OLED

// Creamos los objetos que nos permitan trabajar con las clases
MentorBit miMentorBit;
MentorBitPantallas misPantallas;

// Variable para llevar el control del índice del número que se introduce
int indice_actual = 0;

// Variable con el máximo número de caracteres permitido en la contraseña
const int longitud_contrasena = 4;

// Variables con la contraseña correcta y la introducida por el usuario
int contrasena_correcta[longitud_contrasena] = {1234};
int contrasena_introducida[longitud_contrasena];

// Variables para guardar con nombres más intuitivos los pulsadores
int pulsador_confirmacion = miMentorBit.PULSADOR_PULLDOWN_DIGITAL;
int pulsador_borrado = miMentorBit.PULSADOR_PULLDOWN_ANALOGICO;
int pulsador_verificacion = miMentorBit.PULSADOR_PULLUP_DIGITAL;

// Inicialización del código
void setup() {

    // Inicializamos y configuramos ambas pantallas (LCD y OLED)
    misPantallas.inicializarLCD();
    misPantallas.lcd.backlight();
    misPantallas.inicializarOLED();
    misPantallas.oled.setTextColor(SSD1306_WHITE);

    // Mostramos un mensaje inicial por la pantalla LCD
    misPantallas.lcd.setCursor(30);
    misPantallas.lcd.print("Control de");
    misPantallas.lcd.setCursor(51);
    misPantallas.lcd.print("Acceso");

    // Configuramos el estado por defecto de los LEDs y el Zumbador
    digitalWrite(miMentorBit.LED_ROJO, LOW);
    digitalWrite(miMentorBit.LED_VERDE, LOW);
    noTone(miMentorBit.ZUMBADOR);
    // Esperamos un poco antes de empezar
    delay(2000);
    // Mostramos el mensaje por defecto en la pantalla LCD
    misPantallas.lcd.clear();
    misPantallas.lcd.setCursor(00);
    misPantallas.lcd.print("Introduce la");
    misPantallas.lcd.setCursor(01);
    misPantallas.lcd.print("Contrasena:");

}

// Bucle principal de funcionamiento
void loop() {

    // Tomamos el valor del potenciómetro (0 a 1023) y lo mapeamos a un número entre 0 y 9
    int numero_seleccionado = map(analogRead(miMentorBit.POTENCIOMETRO)0102309);

    // Mostramos el valor leído por la pantalla OLED
    misPantallas.oled.clearDisplay();
    misPantallas.oled.setTextSize(4);
    misPantallas.oled.setCursor(5020);
    misPantallas.oled.print(numero_seleccionado);
    misPantallas.oled.display();

    // Comprobamos que se ha confirmado el número con el pulsador
    if(digitalRead(pulsador_confirmacion) == HIGH) {
        // Comprobamos que no se ha superado la longitud máxima de la contraseña
        if(indice_actual < longitud_contrasena) {

            // Guardamos el número introducido
            contrasena_introducida[indice_actual] = numero_seleccionado;
            // Aumentamos el índice actual
            indice_actual++;
            // Mostramos la contraseña introducida por la pantalla LCD
            for(int i = 0 ; i < indice_actual ; i++) {
                misPantallas.lcd.setCursor(12 + i, 1);
                misPantallas.lcd.print(contrasena_introducida[i]);
            }

        }
        // Esperamos un poco antes de continuar
        delay(200);
    }

    // Comprobamos que se quiere eliminar el último número introducido
    if(digitalRead(pulsador_borrado) == HIGH) {
        // Comprobamos que tengamos al menos 1 número introducido
        if(indice_actual > 0) {

            // Disminuimos en 1 el índice de números introducidos
            indice_actual--;
            // Borramos el último número introducido
            misPantallas.lcd.setCursor(12 + indice_actual, 1);
            misPantallas.lcd.print(" ");

        }
        // Esperamos un poco antes de continuar
        delay(200);
    }

    // Comprobamos que se quiere verificar la contraseña introducida
    if(digitalRead(pulsador_verificacion) == LOW) {

        // Comparamos la contraseña introducida con la correcta
        bool la_contrasena_es_correcta = true;
        for(int i = 0 ; i < longitud_contrasena ; i++) {
            if(contrasena_introducida[i] != contrasena_correcta[i]){
                la_contrasena_es_correcta = false;
                break;
            }
        }
        // Comprobamos que la comparación de las contraseñas fue un éxito
        if(la_contrasena_es_correcta) {

            // Encendemos el LED Verde, apagamos el LED Rojo y generamos un tono agudo corto
            digitalWrite(miMentorBit.LED_VERDE, HIGH);
            digitalWrite(miMentorBit.LED_ROJO, LOW);
            tone(miMentorBit.ZUMBADOR4000250);
            // Mostramos por pantalla un mensaje de éxito
            misPantallas.lcd.clear();
            misPantallas.lcd.setCursor(00);
            misPantallas.lcd.print("Acceso permitido");

        // Comprobamos que la comparación de las contraseñas fue fallido
        } else {

            // Encendemos el LED Rojo, apagamos el LED Verde y generamos un tono grave largo
            digitalWrite(miMentorBit.LED_ROJO, HIGH);
            digitalWrite(miMentorBit.LED_VERDE, LOW);
            tone(miMentorBit.ZUMBADOR1000500);
            // Mostramos por pantalla un mensaje de fallo
            misPantallas.lcd.clear();
            misPantallas.lcd.setCursor(00);
            misPantallas.lcd.print("Acceso denegado");

        }

        // Esperamos 3 segundos antes de reiniciar el sistema
        delay(3000);
        // Mostramos de nuevo el mensaje por defecto en la pantalla LCD
        misPantallas.lcd.clear();
        misPantallas.lcd.setCursor(00);
        misPantallas.lcd.print("Introduce la");
        misPantallas.lcd.setCursor(01);
        misPantallas.lcd.print("Contrasena:");
        // Apagamos todos los LEDs y el Zumbador
        digitalWrite(miMentorBit.LED_ROJO, LOW);
        digitalWrite(miMentorBit.LED_VERDE, LOW);
        noTone(miMentorBit.ZUMBADOR);
        // Reiniciamos el índice para volver a introducir una nueva contraseña
        indice_actual = 0;
       
        // Reseteamos la contraseña introducida
        contrasena_introducida[0] = 0;
        contrasena_introducida[1] = 0;
        contrasena_introducida[2] = 0;
        contrasena_introducida[3] = 0;


    }

}
Vistas
20 Número de vistas
20 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.