Salve ho scritto un codice per la decodifica di un generico segnale di un telecomando a IR (ho visto che ci sono vari argomenti a riguardo sul forum ...) l'ho testato prima su MATLAB con dei segnali registrati e funziona perfettamente , l'ho quindi riadattato per l'esecuzione su arduino pero mi trovo in difficoltà nella misura dei tempi fra le operazioni , dato che ho la necessita di eseguire tutte le operazioni in tempi stretti in modo da decodificare tutti i bit.
ho misurato la durata dei vari bit del segnale IR:
il bit 0 è composto da LV basso 1/3ms LV alto 1/3ms
il bit 1 è composto da LV basso 1/3ms LV alto 2/3ms
questo è il codice
byte b0=1;
byte b1=1;
byte a1=1;
byte start=0;
int n=1;
byte BitCode[32];
byte bitn=1;
byte in1=7;
byte ou1=2;
void setup() {
pinMode(in1,INPUT);
pinMode(ou1,OUTPUT);
Serial.begin(9600);
}
void loop() {
while(start==0){
a1=digitalRead(in1);
b1=digitalRead(in1);
if(a1==0 && b1==1 || a1==1 && b0==0){
start=1;
}
b0=b1;
}
while(bitn<=32){
a1=digitalRead(in1);
b1=digitalRead(in1);
if(a1==0 && b1==1 || a1==1 && b0==0){
while(b1==1){
n=n+1;
b1=digitalRead(in1);
}
if (n<=??){//misurare (quanti campioni prende in 2/3 ms??)
BitCode[bitn-1]=0;
}else{
BitCode[bitn-1]=1;
}
n=1;
bitn=bitn+1;
}
b0=b1;
}
b0=1;
b1=1;
a1=1;
start=0;
n=1;
bitn=1;
digitalWrite(ou1,HIGH);
delay(2000);
digitalWrite(ou1,LOW);
Serial.println(BitCode[0]);
Serial.println(BitCode[1]);
delay(2000);
}
dove ci sono i ''??'' significa che non so che valore mettere
il b0 serve per evitare il caso in cui a1 e b1 sorpassino il fronte di salita insieme a vadano alti.
(utilizzando come ing un pulsante funziona)
come faccio a capire il tempo fra ogni operazione ? ho provato ad usare micros ma diventa troppo ingarbugliata la cosa ... esiste un metodo alternativo? un debug ?
in allegato un segnale tipico...

