Ciao a tutti,
grazie ad un sensore IR opportunamente collegato al mio fido arduino (e seguendo questo link: Arduino Playground - InfraredReceivers)
ho captato il segnale emesso da tasto di un telecomando IR. Ora ho la stringa di bit:
0 0
128 0
128 1
232 1
232 0
1372 0
1372 1
1684 1
1684 0
1824 0
1824 1
1924 1
1924 0
3064 0
3064 1
3384 1
3384 0
3516 0
3516 1
3620 1
3620 0
3900 0
3900 1
5068 1
ecc ecc.
Però ora non ho ben chiaro come fare per farla riprodurre all'arduino. Ho già in mente lo schema per collegare l'emettitore IR all'arduino ma non so come scrivere lo sketch per farlo..mi aiutereste?
Stavo pensando una cosa, nel caso non si riuscisse con la libreria di ken shirrif, si potrebbe analizzare la sequenza di bit per trovare un pattern preciso, che corrisponde alle tempistiche del telecomando, a quel punto si possono memorizzare i codici anche dei telecomandi sconosciuti
è un lavoraccio ma sono curioso di vedere se funziona, quindi rinnovo la richiesta, puoi postare per piacere tutta la sequenza di intervalli che ti ha dato il tuo programma? magari registrata dalla pressione di un tasto per almeno 5 secondi
Tobo:
è un lavoraccio ma sono curioso di vedere se funziona, quindi rinnovo la richiesta, puoi postare per piacere tutta la sequenza di intervalli che ti ha dato il tuo programma? magari registrata dalla pressione di un tasto per almeno 5 secondi
Il tuo telecomando usa un protocollo che non è supportato dalla libreria (la libreria ne supporta 3 o 4).... probabilmente è uno delle centinaia di protocolli che ogni produttore implementa.
Non ti resta altro che leggere bene la documentazione postata sul sito: A Multi-Protocol Infrared Remote Library for the Arduino
Ad esempio cito:
Handling raw codes
The library provides support for sending and receiving raw durations. This is intended mainly for debugging, but can also be used for protocols the library doesn't implement, or to provide universal remote functionality.
The raw data for received IR measures the duration of successive spaces and marks in 50us ticks. The first measurement is the gap, the space before the transmission starts. The last measurement is the final mark.
The raw data for sending IR holds the duration of successive marks and spaces in microseconds. The first value is the first mark, and the last value is the last mark.
There are two differences between the raw buffers for sending and for receiving. The send buffer values are in microseconds, while the receive buffer values are in 50 microsecond ticks. The send buffer starts with the duration of the first mark, while the receive buffer starts with the duration of the gap space before the first mark. The formats are different because I considered it useful for the library to measure gaps between transmissions, but not useful for the library to provide these gaps when transmitting. For receiving, 50us granularity is sufficient for decoding and avoids overflow of the gaps, while for transmitting, 50us granularity is more than 10% error so 1us granularity seemed better.
Credo che in questo momento il telecomando ricominci la trasmissione del segnale segue circa questo pattern:
l'unità di misura del tempo dipende dall'unità di misura usata nella lista che hai scritto sopra, i tempi che scrivo non sono precisi, ci vorrebbero più misurazioni del telecomando per fare una media:
il segnale è a 0 per 140
il segnale è a 1 per 96
il segnale è a 0 per 1200
il segnale è a 1 per 256 e continua così
152
80
1196
268
140
96
340
1128
128
100
344
1116
132
108
336
1108
144
104
336
1128
128
100
352
1112
132
100
344
1112
136
104
1196
256
140
100
340
1120
132
108
332
1116
144
96
340
pausa di 7904
Bisognerebbe fare una media perchè quando il codice ricomincia i tempi cambiano di qualcosina
ma che telecomando è?
io mi sono sbattuto come l'acqua di mare per tentare di decodificare il telecomando di un condizionatore, poi ho lasciato perdere per mancanza di tempo, ma era un incubo =(
Trasmetteva anche la data e l'ora per qualsiasi pressione di tasto oltre che tutto il resto della configurazione, anche solo per fare +1 alla temperatura.
sparava 256 bit con la pressione di un tasto che sembravano ogni volta diversi all'inizio.... poi ho scoperto che mandava anche l'ora con tanto di secondi! per quello che era sempre diverso.
Il mio telecomando in questione è un accendi-spegni luce e ventola del lampadario...
l'ho aperto e ho visto che tra i vari componenti c'è un chip marcato così: SM5021BL..
tra l'altro mi ricordo che quando avevo la "vecchia" tv LCD Sony da 32" se schiacciavo il tasto "2" del telecomando a volte si accendeva la luce del lampadario
si, erano essenziali perchè il condizionatore controllava la quantità di dati ricevuti.
Probabilmente il telecomando del ventilatore non usa nessun protocollo conosciuto e per questo non riesci a decodificare i tasti.
Quindi devi spostarti nuovamente sull'analisi raw dei dati e cercare sequenze ricorrenti alla pressione degli stessi tasti e poi scriverti un parser partendo da quelli.
edit:
nel datasheet dell'ic c'è spiegata la codifica http://pdf1.alldatasheet.com/datasheet-pdf/view/124369/ANALOGICTECH/SM5021B.html
Tobo:
Credo che in questo momento il telecomando ricominci la trasmissione del segnale segue circa questo pattern:
l'unità di misura del tempo dipende dall'unità di misura usata nella lista che hai scritto sopra, i tempi che scrivo non sono precisi, ci vorrebbero più misurazioni del telecomando per fare una media:
il segnale è a 0 per 140
il segnale è a 1 per 96
il segnale è a 0 per 1200
il segnale è a 1 per 256 e continua così
........
pausa di 7904
Bisognerebbe fare una media perchè quando il codice ricomincia i tempi cambiano di qualcosina :)
Scusa Tobo ci stavo ragionando su ma ancora non mi è chiaro...
stanotte ci penserò su...