CONVERSOR DECIMAL – BINARIO CON MANDO A DISTANCIA Descripción: El objetivo de la práctica es crear un conversor decimal a binario introduciendo los valores decimales a través de un mando a distancia. Los valores decimales a representar son desde el 0 al 9, por lo que serán necesarios 4 bits. Para ello, se hará uso de 4 LEDs y de un receptor IR. Objetivos: Con el presente ejercicio se intenta poner en práctica la conversión de decimal a binario. Además, el alumnado conocerá el funcionamiento de los receptores de infrarrojos. Ámbito de aplicación: informática / tecnología Nivel: avanzado Conocimientos previos: El alumnado debe ser capaz de convertir valores decimales a binario. Diagrama o Esquema: A continuación, son mostrados los diagramas: Material necesario: listado de todo el material requerido para la correcta realización de la práctica. 1 placa Arduino. 4 x LEDs 5mm. 5 x Resistencia de 220Ω 1 mando a distancia. 1 receptor IR. 8 cables. Desarrollo de la práctica: Para la representación en binario se emplea el registro DDR que determina si el pin es de entrada o salida. Al inicio de la ejecución se inicializa a 255 para que todos los pines estén a 1 y así utilizarlos como salida. Para la recepción de los valores decimales a través del mando a distancia, debemos identificar el código hexadecimal correspondiente a los botones 0 al 9. Para ello, se ha utilizado el ejemplo IRrecvdemo incluido en la librería IRremote. Botón 1 = 16724175; //Código correspondiente al botón 1 del mando a distancia. Botón 2 = 16718055; //Código correspondiente al botón 2 del mando a distancia. Botón 3 = 16743045; //Código correspondiente al botón 3 del mando a distancia. Botón 4 = 16716015; //Código correspondiente al botón 4 del mando a distancia. Botón 5 = 16726215; //Código correspondiente al botón 5 del mando a distancia. Botón 6 = 16734885; //Código correspondiente al botón 6 del mando a distancia. Botón 7 = 16728765; //Código correspondiente al botón 7 del mando a distancia. Botón 8 = 16730805; //Código correspondiente al botón 8 del mando a distancia. Botón 9 = 16732845; //Código correspondiente al botón 9 del mando a distancia. Botón 0 = 16738455; //Código correspondiente al botón 0 del mando a distancia. Una vez identificados los códigos hexadecimales de los botones, asignamos los valores de 0 a 9 según dichos códigos. Por último, el valor decimal correspondiente al botón pulsado, es almacenado en la variable PORTD. Ésta mapea los pines digitales del 0 al 7, de modo que, si asignamos el valor 5, se almacenará B00000101, activándose los pines 0 y 2. En la siguiente imagen se puede apreciar el resultado obtenido tras pulsar botón 9. En este ejemplo la variable PORTD representaría el valor B00001001. Código: Para el correcto funcionamiento del mando a distancia y del receptor IR, es necesario hacer uso de la librería IRremote. Dicha librería puede ser descargada desde su página oficial http://z3t0.github.io/Arduino-IRremote/ #include // Librería del receptor de IR (infrarrojos). int RECV_PIN = 8; // Pin al que conectamos el receptor de IR. int x = 0; // Valor decimal a representar en binario. Puede tomar los valores desde 0 a 9. IRrecv irrecv(RECV_PIN); // Pin al que conectamos el receptor de IR. decode_results results; // Variable donde almacenaremos el valor recibido a través del mando a distancia. long uno = 16724175; //Código correspondiente al botón 1 del mando a distancia. long dos = 16718055; //Código correspondiente al botón 2 del mando a distancia. long tres = 16743045; //Código correspondiente al botón 3 del mando a distancia. long cuatro = 16716015; //Código correspondiente al botón 4 del mando a distancia. long cinco = 16726215; //Código correspondiente al botón 5 del mando a distancia. long seis = 16734885; //Código correspondiente al botón 6 del mando a distancia. long siete = 16728765; //Código correspondiente al botón 7 del mando a distancia. long ocho = 16730805; //Código correspondiente al botón 8 del mando a distancia. long nueve = 16732845; //Código correspondiente al botón 9 del mando a distancia. long cero = 16738455; //Código correspondiente al botón 0 del mando a distancia. void setup() { DDRD=255; // Iniciación de los bits destinados a los LEDs como salida. irrecv.enableIRIn(); // Iniciación del lector de infrarrojos. } void loop() { // Si se recibe un código desde el mando a distancia... compruebo qué número decimal es. if (irrecv.decode(&results)) { // Comprobación del código leído desde el mando a distancia. if (results.value == uno){x = 1;} //Tecla 1 if (results.value == dos){x = 2;} //Tecla 2 if (results.value == tres){x = 3;} //Tecla 3 if (results.value == cuatro){x = 4;} //Tecla 4 if (results.value == cinco){x = 5;} //Tecla 5 if (results.value == seis){x = 6;} //Tecla 6 if (results.value == siete){x = 7;} //Tecla 7 if (results.value == ocho){x = 8;} //Tecla 8 if (results.value == nueve){x = 9;} //Tecla 9 if (results.value == cero){x = 0;} //Tecla 0 irrecv.resume(); // Recibe el siguiente valor. } delay(100); // Espera 100ms. PORTD = x; // Repesenta el valor en binario y enciende los LEDs. Ej: para el valor decimal 5 activaría los pines B00000101; } Enlaces de interés: Web oficial de la librería IRremote: http://z3t0.github.io/Arduino-IRremote/ Web oficial Arduino. Manipulación de puertos: https://www.arduino.cc/en/Reference/PortManipulation