ř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