mmm.. forse allora è proprio questo il problema.. perchè ti spiego subito.. ho trovato in giro un altra libreria: "NECIRrcv.h"
Con essa riesco a captare i segnali di uno dei telecomandi (a dire il vero non ho fatto prove con altri perchè ho visto che mi riconosce questo e ho lasciato).
Insomma con questa libreria ho caricato questo codice:
#include <WProgram.h>
#include <NECIRrcv.h>
#define IRPIN 5 // pin that IR detector is connected to
NECIRrcv ir(IRPIN) ;
void setup()
{
Serial.begin(9600) ;
Serial.println("NEC IR code reception") ;
ir.begin() ;
}
void loop()
{
unsigned long ircode ;
while (ir.available()) {
ircode = ir.read() ;
Serial.print("got code: 0x") ;
Serial.println(ircode,DEC) ;
}
}
Effettivamente dal terminale premendo qualsiasi tasto del telecomando mi da un numero diverso (la conversione in decimale l'ho messa io per comodità)
Esempio:
tasto POWER: 64217440
tasto 3: 399761760
Risolto questo ho proseguito nel fare qualche altro tentativo, tipo accendere un led.. caricato il codice.. e funziona, alla pressione del tasto il led si accende.
Ora però.. volevo provare a fare in modo che alla pressione di un tasto parte in loop una funzione che, in modo random mi da diversi colori su un led RGB.
il codice è questo:
#include <WProgram.h>
#include <NECIRrcv.h>
#define IRPIN 5 // sensore IR
NECIRrcv ir(IRPIN) ;
//setto i PIN dell'arduino e altri parametri..
int redLed = 9;
int greenLed = 10;
int blueLed = 11;
int red = 255;
int green = 255;
int blue = 255;
void setup()
{
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
ir.begin() ; //inizializzo IR
}
void loop()
{
unsigned long ircode=0;
unsigned long aux=0;
//while (ir.available())
//{
ircode = ir.read() ;
aux=(ircode);
if (aux == 64217440)
{
RGBloop(); //richiamo la funzione
}
}
void RGBloop()
{
randomSeed(3);
int redNew;
int greenNew;
int blueNew;
{
redNew = random(256);
greenNew = random(256);
blueNew = random(256);
analogWrite(redLed, red+(redNew-red));
analogWrite(greenLed, green+(greenNew-green));
analogWrite(blueLed, blue+(blueNew-blue));
}
red = redNew;
green = greenNew;
blue = blueNew;
}
Il problema sta nel fatto che premendo il tasto assegnato, lo sketche entra nel ciclo (perchè il LED RGB si accende), xò poi non continua..cioè si ferma lì, con il led acceso in quella posizione.
Ho provato anche a mettere un controllo di tipo while ma niente.. stessa cosa..
Cioè dovrebbe richiamare sempre la funzione e cambiare colore ma non lo fa!
Quindi a questo punto, sto effettuando un errore di logica nello sketch, oppure il problema sto proprio nel fatto che il ricevitore IR funziona ad impulsi?!
Grazie mille!!