CONTENIDO ►
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»

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»:
- 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;
- 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