Podem fer servir un comandament a distància que tinguem a mà per enviar ordres al microcontrolador. Per fer-ho ens caldrà un receptor (fotodíode o fototransistor). En aquest cas hem fet servir el LTR-301 però la majoria dels que hi ha al mercat ens serviran. En la imatge següent el podem veure (és el que porta la taca vermella) acompanyat d'un emissor (aquest distribuïdor els comercialitza conjuntament.

El connexionat és molt senzill.

El següent programa llegeix els polsos que arriben emprant un sensor connectat a la pota 7 i ens dóna el valor rebut i el fabricant del comandament (si s'ha pogut identificar).
#include <IRremote.h> #define RECV_PIN 7
IRrecv irrecv(RECV_PIN); decode_results resultats;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
}
void loop(){
if (irrecv.decode(&resultats)){
Serial.println(resultats.value, HEX);
switch (resultats.decode_type){
case NEC: Serial.println("NEC"); break ;
case SONY: Serial.println("SONY"); break ;
case RC5: Serial.println("RC5"); break ;
case RC6: Serial.println("RC6"); break ;
case DISH: Serial.println("DISH"); break ;
case SHARP: Serial.println("SHARP"); break ;
case JVC: Serial.println("JVC"); break ;
case SANYO: Serial.println("SANYO"); break ;
case MITSUBISHI: Serial.println("MITSUBISHI"); break ;
case SAMSUNG: Serial.println("SAMSUNG"); break ;
case LG: Serial.println("LG"); break ;
case WHYNTER: Serial.println("WHYNTER"); break ;
case AIWA_RC_T501: Serial.println("AIWA_RC_T501"); break ;
case PANASONIC: Serial.println("PANASONIC"); break ;
case DENON: Serial.println("DENON"); break ;
default:
case UNKNOWN: Serial.println("UNKNOWN"); break ;
}
irrecv.resume();
}
}
Fent servir el botó d'incrementar el canal d'un comandament de televisor que m'han deixat he obtingut el següent:
E0E048B7 SAMSUNG
El següent programa espera rebre algun codi. Quan el rep, mira si és el d'incrementar el canal i en cas afirmatiu encén un LED connectat a la sortida 8.
#include <IRremote.h> #define RECV_PIN 7 #define LED_PIN 8
IRrecv irrecv(RECV_PIN); decode_results resultats;
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
pinMode(LED_PIN, OUTPUT);
}
void loop(){
if (irrecv.decode(&resultats)){
Serial.println(resultats.value, HEX);
if (resultats.value == 0xE0E048B7){
digitalWrite(LED_PIN, true);
delay(500);
digitalWrite(LED_PIN, false);
delay(500);
}
irrecv.resume();
}
}
De manera semblant, podem fer servir qualsevol botó del nostre comandament per activar una sortida, enviar un missatge a la xarxa, etc.
En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.