NEC IR komunikace se jeví jako UNKNOW
Napsal: 03 dub 2018, 16:06
Ahoj,
řeším situaci, kdy na vzdálenost kolem 8 m potřebuju přenést integer pomocí IR.
Používám na to dálkový ovladač s možností "naučit se" libovolný povel. Takže si mohu zvolit libovolný protokol, vybral jsem si NEC, ale nijak na tom netrvám.
Mám jedno arduino uno (klon), s IR diodou TSAL6100 připojenou přímo na pin arduina, bez rezistoru. Z ní ovladač "učím" příkazy, např. pro požadovaný int=106:
Ovladač samotný je tovární výrobek a funguje na velkou vzdálenost. Po každém "naučení se" povelu signalizuje, že tato operace proběhla korektně.
Pak mám druhé arduino uno (klon), s receiverem VS1838B připojeným přímo na pin arduina, bez rezistoru. Dle popisu by měl fungovat až na 18 m. Zde bych chtěl přečíst integer odeslaný ovladačem.
Čtu jej takto:
Pokud jsem s ovladačem ve vzdálenosti cca do 1 m, funguje příklad výborně, nejprve se dumpne int 106, potom se dumpne decode_type NEC.
Problém nastane, pokud se s ovladačem vzdálím, s rostoucí vzdáleností se častěji a častěji začne objevovat decode_type UNKNOW a integer různé, patrně náhodné hodnoty (např. 304861). Kolem vzdálenosti 3 m už jsou všechny přijaté zprávy typu UNKNOW.
Kde hledat chybu? Předpokládám, že je vše na 38 kHz, nevím ale, zda by se případná nesourodost mohla projevovat tak, že by to na malou vzdálenost fungovalo a na větší už ne.
Díky
řeším situaci, kdy na vzdálenost kolem 8 m potřebuju přenést integer pomocí IR.
Používám na to dálkový ovladač s možností "naučit se" libovolný povel. Takže si mohu zvolit libovolný protokol, vybral jsem si NEC, ale nijak na tom netrvám.
Mám jedno arduino uno (klon), s IR diodou TSAL6100 připojenou přímo na pin arduina, bez rezistoru. Z ní ovladač "učím" příkazy, např. pro požadovaný int=106:
Kód: Vybrat vše
#include <IRremote.h>
IRsend irsend;
[ ... ]
irsend.sendNEC(106, 32);
Pak mám druhé arduino uno (klon), s receiverem VS1838B připojeným přímo na pin arduina, bez rezistoru. Dle popisu by měl fungovat až na 18 m. Zde bych chtěl přečíst integer odeslaný ovladačem.
Čtu jej takto:
Kód: Vybrat vše
#include <IRremote.h>
IRrecv irrecv(PIN_LED_IR);
decode_results results;
void setup() {
irrecv.enableIRIn();
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);
Serial.println(results.decode_type);
irrecv.resume();
}
delay(100);
}
Problém nastane, pokud se s ovladačem vzdálím, s rostoucí vzdáleností se častěji a častěji začne objevovat decode_type UNKNOW a integer různé, patrně náhodné hodnoty (např. 304861). Kolem vzdálenosti 3 m už jsou všechny přijaté zprávy typu UNKNOW.
Kde hledat chybu? Předpokládám, že je vše na 38 kHz, nevím ale, zda by se případná nesourodost mohla projevovat tak, že by to na malou vzdálenost fungovalo a na větší už ne.
Díky