sto progettando un dispositivo che comanderà un videoplayer in base alle informazioni ricevute da più emettitori infrarossi, un telecomando al contrario insomma.
Quindi ecco che comincio a capire come funzioni un telecomando "normale".
Le librerie IR per Arduino IRremote le trovate QUI, ovviamente dovete impazzire per caricarle, un giorno scriverò due righe in merito...
Per quanto riguarda lo schema elettrico ho adoperato come ricevitore IR uno di quegli extender per i tv (il più del lavoro è stato individuare i pin giusti...), va bene qualunque ricevitore Infrarossi a tre pin, se volete saperne di più cliccate QUI.
Poi ho collegato i tre Led alle prime tre uscite non PWM, ho messo una resistenza a casaccio come al solito ed il gioco è fatto. Ho caricato lo sketch, che trovate in fondo, ho aperto il monitor seriale ed ho letto i valori dei primi tre tasti di un telecomando Samsung per poterli riportare correttamente nel programmino. A quasto punto, avendo associato ad ogni pulsante l'accensione di un led, non restava che fare il test, lo trovate in questo filmato, non male come inizio!
#include <IRremote.h>
int RECV_PIN = 3; // il pin del ricevitore
int led1 = 2;
int led2 = 4;
int led3 = 7;
int itsONled[] = {0,0,0,0};
/* the initial state of LEDs is OFF (zero)
the first zero must remain zero but you can
change the others to 1's if you want a certain
led to light when the board is powered */
#define code1 55848 // codice primo pulsante
#define code2 26210 // codice secondo pulsante
#define code3 2500 // codice terzo pulsante
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch(value) {
case code1:
if(itsONled[1] == 1) { // if first led is on then
digitalWrite(led1, LOW); // turn it off when button is pressed
itsONled[1] = 0; // and set its state as off
} else { // else if first led is off
digitalWrite(led1, HIGH); // turn it on when the button is pressed
itsONled[1] = 1; // and set its state as on
}
break;
case code2:
if(itsONled[2] == 1) {
digitalWrite(led2, LOW);
itsONled[2] = 0;
} else {
digitalWrite(led2, HIGH);
itsONled[2] = 1;
}
break;
case code3:
if(itsONled[3] == 1) {
digitalWrite(led3, LOW);
itsONled[3] = 0;
} else {
digitalWrite(led3, HIGH);
itsONled[3] = 1;
}
break;
}
Serial.println(value);
irrecv.resume(); // Receive the next value
}
}
int RECV_PIN = 3; // il pin del ricevitore
int led1 = 2;
int led2 = 4;
int led3 = 7;
int itsONled[] = {0,0,0,0};
/* the initial state of LEDs is OFF (zero)
the first zero must remain zero but you can
change the others to 1's if you want a certain
led to light when the board is powered */
#define code1 55848 // codice primo pulsante
#define code2 26210 // codice secondo pulsante
#define code3 2500 // codice terzo pulsante
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch(value) {
case code1:
if(itsONled[1] == 1) { // if first led is on then
digitalWrite(led1, LOW); // turn it off when button is pressed
itsONled[1] = 0; // and set its state as off
} else { // else if first led is off
digitalWrite(led1, HIGH); // turn it on when the button is pressed
itsONled[1] = 1; // and set its state as on
}
break;
case code2:
if(itsONled[2] == 1) {
digitalWrite(led2, LOW);
itsONled[2] = 0;
} else {
digitalWrite(led2, HIGH);
itsONled[2] = 1;
}
break;
case code3:
if(itsONled[3] == 1) {
digitalWrite(led3, LOW);
itsONled[3] = 0;
} else {
digitalWrite(led3, HIGH);
itsONled[3] = 1;
}
break;
}
Serial.println(value);
irrecv.resume(); // Receive the next value
}
}