Proyecto Arduino con pulsadores Descifrar el código

Un sencillo proyecto de Arduino con pulsadores que te pide que adivines el código generado por el microcontrolador. Si se desea, se pueden conectar LEDs a la placa Arduino para indicar la entrada correcta o incorrecta del código. Toda la información (el número que se ha generado y la respuesta del usuario) se mostrará en el monitor del puerto IDE de Arduino. Si se desea, se puede conectar una pantalla Arduino OLED de 128×64 opcional.

Para esta actividad necesitaremos:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • 3 pulsadores;
  • LEDs y resistencias de 220 Ohm;;
  • placa de pruebas;
  • cables de conexion.

Proyecto Arduino con pulsadores «Descifrar el código»

Miniproyecto con pulsadores Descifrar el código
Miniproyecto Arduino con pulsadores Descifrar el código

La imagen de arriba muestra el montaje del circuito del proyecto con los pulsadores en el código de adivinación. 2 Tenga en cuenta que los pulsadores están conectados al Arduino sin resistencias, ya que los pines de la placa están configurados con INPUT_PULLUP, que tirará de las resistencias de 20kOhm a los puertos en el propio placa. Al pulsar el botón correspondiente, los números «1», «2» o «3» se añadirán a la cadena String otv = «»;

Programme Arduino miniproyecto «Descifrar el código»


byte x;
byte w = 1;
String otv = "";
String KOD = "";
// un conjunto de variantes de código
char* kod[6] = {"123", "132", "231", "213", "321", "312"};
boolean button1WasUp = true;
boolean button2WasUp = true;
boolean button3WasUp = true;

void setup() {
  Serial.begin(9600);
  // pines para la conexión de los botones
  pinMode(5, INPUT_PULLUP);
  pinMode(4, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  // pines para la conexión de los LEDs
  pinMode(13, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop() {

/// FUNCIÓN DE GENERACIÓN DE CÓDIGO ///
  while (w == 1) {
    delay(500);
    digitalWrite(13, HIGH); digitalWrite(10, HIGH);
    delay(100);
    digitalWrite(13, LOW); digitalWrite(10, LOW);
    x = random(0, 5);
    KOD = String(kod[x]);
    Serial.print("Kode - "); 
    Serial.println(KOD);
    Serial.println("");
    Serial.print("Respuesta - ");
    w = 2;
  }

/// INTRODUZCA EL PRIMER NÚMERO ///
  while (w == 2) {
   // conocer el estado de los botones
   boolean button1IsUp = digitalRead(5);
   boolean button2IsUp = digitalRead(4);
   boolean button3IsUp = digitalRead(3);
    
   // si se ha pulsado el botón, añada "1" a la línea
   if (button1WasUp && !button1IsUp) {
     delay(10);
     button1IsUp = digitalRead(5);
     if (!button1IsUp) { otv = otv + "1"; Serial.print("1"); w = 3;}
   }
   button1WasUp = button1IsUp;
   
   // si se ha pulsado el botón, añada "2" a la línea
   if (button2WasUp && !button2IsUp) {
     delay(10);
     button2IsUp = digitalRead(4);
     if (!button2IsUp) { otv = otv + "2"; Serial.print("2"); w = 3;}
   }
   button2WasUp = button2IsUp;
    
   // si se ha pulsado el botón, añada "3" a la línea
   if (button3WasUp && !button3IsUp) {
     delay(10);
     button3IsUp = digitalRead(3);
     if (!button3IsUp) { otv = otv + "3"; Serial.print("3"); w = 3;}
   }
   button3WasUp = button3IsUp;
  }

/// INTRODUZCA EL SEGUNDO NÚMERO ///
  while (w == 3) {
   // conocer el estado de los botones
   boolean button1IsUp = digitalRead(5);
   boolean button2IsUp = digitalRead(4);
   boolean button3IsUp = digitalRead(3);
    
   // si se ha pulsado el botón, añada "1" a la línea
   if (button1WasUp && !button1IsUp) {
     delay(10);
     button1IsUp = digitalRead(5);
     if (!button1IsUp) { otv = otv + "1"; Serial.print("1"); w = 4;}
   }
   button1WasUp = button1IsUp;
   
   // si se ha pulsado el botón, añada "2" a la línea
   if (button2WasUp && !button2IsUp) {
     delay(10);
     button2IsUp = digitalRead(4);
     if (!button2IsUp) { otv = otv + "2"; Serial.print("2"); w = 4;}
   }
   button2WasUp = button2IsUp;
    
   // si se ha pulsado el botón, añada "3" a la línea
   if (button3WasUp && !button3IsUp) {
     delay(10);
     button3IsUp = digitalRead(3);
     if (!button3IsUp) { otv = otv + "3"; Serial.print("3"); w = 4;}
   }
   button3WasUp = button3IsUp;
  }

/// INTRODUZCA EL TERCER NÚMERO ///
  while (w == 4) {
   // conocer el estado de los botones
   boolean button1IsUp = digitalRead(5);
   boolean button2IsUp = digitalRead(4);
   boolean button3IsUp = digitalRead(3);
    
   // si se ha pulsado el botón, añada "1" a la línea
   if (button1WasUp && !button1IsUp) {
     delay(10);
     button1IsUp = digitalRead(5);
     if (!button1IsUp) { otv = otv + "1"; Serial.println("1"); w = 5;}
   }
   button1WasUp = button1IsUp;
   
   // si se ha pulsado el botón, añada "2" a la línea
   if (button2WasUp && !button2IsUp) {
     delay(10);
     button2IsUp = digitalRead(4);
     if (!button2IsUp) { otv = otv + "2"; Serial.println("2"); w = 5;}
   }
   button2WasUp = button2IsUp;
    
   // si se ha pulsado el botón, añada "3" a la línea
   if (button3WasUp && !button3IsUp) {
     delay(10);
     button3IsUp = digitalRead(3);
     if (!button3IsUp) { otv = otv + "3"; Serial.println("3"); w = 5;}
   }
   button3WasUp = button3IsUp;
  }

/// COMPARAR LA RESPUESTA CON EL CÓDIGO ///
  if (KOD == otv ) {
    Serial.println(""); Serial.println("SI !"); Serial.println("");
    digitalWrite(10, HIGH); delay(1000); digitalWrite(10, LOW);
    otv = "";  // eliminar la línea
    w = 1;     // generar un nuevo código
  }
  else  {
    Serial.println(""); Serial.println("NO !"); Serial.println("");
    Serial.print("Respuesta - ");
    digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW);
    otv = "";  // eliminar la línea
    w = 2;     // nuevo intento de incautación
  }
}

Explicación del código para proyecto «Adivina la clave»:

  1. el programa utiliza seis variantes de código, que se seleccionan al azar. Para adivinar el código hay que pulsar cada botón una sola vez, pero no hay límite de pulsaciones en el programa;
  2. después de introducir tres números (los botones se han pulsado tres veces), el código generado se compara con la respuesta introducida.

Conclusión. Este programa se puede utilizar en varios proyectos, por ejemplo para hacer una alarma en el Arduino, donde el zumbador sólo se apagará cuando se introduzca la clave correctamente. O para hacer una cerradura de código, pero en este caso el cifrado no debe generarse cada vez (de lo contrario puede ser abierto por cualquiera) y el cifrado puede hacerse más complejo, compuesto por más de tres números.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *