Receptor infraroig¶
Llibreria Irremote¶
La llibreria Irremote afegeix a Arduino la capacitat de gestionar tant els emissors com els receptors de control remot d’infrarojos amb els protocols més comuns.
: Ref: Com afegir una llibreria nova a l'entorn Arduino pas a pas. <Add-library>
Conexió¶

Exercicis¶
Compareu i carregueu el programa següent a Arduino.
Un cop carregat, obriu el monitor de la sèrie i canvieu la velocitat de recepció de dades de manera que sigui igual a la velocitat de transmissió del programa.
Premeu diverses tecles del comandament a distància. Els codis de claus apareixeran al monitor de la sèrie i a la pantalla 7 -segment.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
/* Lee códigos de un mando a distancia con protocolo NEC desde un receptor de infrarrojos. Envía el código por el puerto de comunicaciones serie. Envía el código a un display de 7 segmentos. */ #include <Wire.h> #include <PC42.h> #include <IRremote.h> #include <Serial.h> const long SERIAL_BAUD = 19200; // Velocidad del puerto serie en baudios const int RECV_PIN = 2; // Pin de recepción de datos infrarrojos // Inicia un receptor de infrarrojos IRrecv ir_recv(RECV_PIN); decode_results result; // Extrae el código de tecla de del receptor de infrarrojos. int ir_read(void) { int code; // Si se ha recibido un código if (ir_recv.decode(&result)) { // Si el código es de protocolo NEC, devuelve el código if (result.decode_type == NEC) { // Prepara para recibir el siguiente código code = result.value; ir_recv.resume(); return code; } ir_recv.resume(); } return -1; // Devuelve un código de error } // Inicia todos los componentes void setup() { Serial.begin(SERIAL_BAUD); // Inicia las comunicaciones serie ir_recv.enableIRIn(); // Inicia el receptor de infrarrojos pc.begin(); // Inicializar el módulo PC42 } // Bucle principal void loop() { int code; // Lee el código recibido por el receptor de infrarrojos code = ir_read(); // Si es un código válido, envía el código al puerto serie y al display if (code != -1) { Serial.println(code, HEX); code = (unsigned)code >> 8; pc.dispWrite(code); } delay(50); }
Modifiqueu el programa anterior perquè el LED D1 s’encengui quan es premeu el número 1 al comandament a distància.
A continuació, es mostra un exemple de codi incomplet per realitzar la tasca.
1 2 3 4
// Enciende el led D1 cuando se presione // el número '1' del mando a distancia if (code == ) { pc.ledWrite(1, LED_ON);
Modifiqueu el programa anterior per desactivar tots els LED quan es prem el botó zero.
Modifiqueu el primer programa per activar i desactivar una columna de LEDs amb els botons "+" i "--" del comandament a distància.
En prémer '+' del comandament a distància, un nou LED de columna s'encendrà. A mesura que es pressiona '+', totes les làmines s'encendran un per un. En prémer '-' del comandament a distància, l'últim LED s'apagarà. A mesura que premeu "-" Tots els LED seran apagats un per un.
Per programar el codi, cal crear una variable que compti amb el nombre de LEDs que han d’estar en marxa. Aquesta variable s’incrementarà o disminuirà amb els clústers del control. Una instrucció per a cada LED comprovarà si la variable és superior a un valor determinat, s'encendrà el LED. En cas contrari, el LED s’apagarà.
Abans de la `` configuració () ``:
int num_leds; // Declara la variable num_leds como un número entero
Dins del `` bucle () `` `` `` `` `, la variable s'ha d'augmentar i disminuir en funció del codi rebut del comandament a distància:
// Si se presiona '+' aumenta el número de ledes encendidos if (code == ) num_leds = num_leds + 1;
A continuació, els LED s’han d’encendre o desactivar segons el valor de la variable:
// Si se presiona '+' aumenta el número de ledes encendidos if (num_leds > 0) pc.ledWrite(1, LED_ON); else pc.ledWrite(1, LED_OFF);
Modifica l'exercici anterior de manera que la variable no augmenta més que el nombre total de LED i que no disminueix per sota de zero. S’afegiran dues condicions, una condició limitarà la variable si augmenta massa i una altra condició limitarà la variable si es redueix per sota de zero