čtení IR čidla

Odpovědět
aladin
Příspěvky: 337
Registrován: 12 kvě 2013, 06:43

čtení IR čidla

Příspěvek od aladin »

ahoj, nevím si rady jak zpracovat data, která získám z ir dálkáče.
pošlou se mi na seriák, ale když je chci přiřadit k nějaké proměnné, nevím jak ji nadeklarovat a pak zpracovat pomocí case.
dík

příklad kodu:

Kód: Vybrat vše

#include <IRremote.h>
int input_pin = 3; //set D3 as input signal pin
IRrecv irrecv(input_pin);
decode_results signals;
void setup()
{
	Serial.begin(9600);
	irrecv.enableIRIn(); // enable input from IR receiver
}
void loop() { //loop ------------------------------------
if (irrecv.decode(&signals)) {
		Serial.println(signals.value, HEX);  //výstup na seriak - jak zpracovat???
		irrecv.resume(); // get the next signal
	}


}   //konec loop ------------------------------------
fischertip.cz, Stavebnice.com, MerkurRobot.cz, KlubTechniku.cz
MartinL
Příspěvky: 252
Registrován: 24 úno 2013, 14:13
Kontaktovat uživatele:

Re: čtení IR čidla

Příspěvek od MartinL »

Tak tuhle knihovnu jsem nezkoumal, ale signals.value bude nějaké číslo (koukni do IRremote.h a budeš vědět jaké).
Takže nadeklarovat proměnnou pro danou velikost číslo a přiřadit.

word Kod; // tipuju, že by mělo stačit 16bitů, ale raději zkontrolovat, viz. výše

Kod = signals.value;
DavidO
Příspěvky: 1133
Registrován: 01 kvě 2013, 21:27

Re: čtení IR čidla

Příspěvek od DavidO »

Jak to bude zapojené? Tak, jak máš teď napsaný ten program, tak to vypadá, že máš Arduino s nějakým modulem, na který z dálkáče něco "blikneš". Arduino si to přečte, pošle po seriové lince do počítače a tam to chceš zpracovat. Je to tak? Anebo to chceš zpracovat už v tom Arduinu?

Pohledem do té knihovny se mi to jeví takhle:
decode_results je třída, její člen value obsahuje dekódovaná data. Podle deklarace je typu unsigned long a v komentáři v deklaraci je napsáno "Decoded value [max 32-bits]", čili tu proměnnou nadeklaruj tak, aby se tam těch 32 bitů vešlo, třeba zrovna ten unsigned long.
Vyhodnocování, co přišlo, bude nejspíš silně závislé na tom dálkáči, může to být nějaký kód klávesy anebo pole jednotlivých příznaků (nahozené budou ty použité).

Baj voko bych řekl, že tahle knihovna předpokládá, že decode vrátí 32 bitů - flagů v závislosti na typu dálkáče, pak by se to vyhodnocovalo líp ne ve switch+case ale pomocí série testů na ten který flag, např.:
if(hodnota & 1<<2) {co to má udělat, když je nahozený třetí bit zprava}
if(hodnota & 1<<13) {co to má udělat, když je nahozený čtrnáctý bit zprava}
atd.
(lépe než 1<<5 apod. by bylo nadefinovat si symbolické konstanty pro pojmenování toho kterého bitu). Ty jednotlivé flagy můžou znamenat, které tlačítko je zmáčknuté, takže když by jich bylo zmáčknutých víc najednou, tak by to vrátilo číslo, které v binárním zápisu bude mít jedničky na víc pozicích.

Jestli ta knihovna vrací nějaký kód (jako třeba ASCII kód zmáčknutého písmenka), pak je ten switch vhodný, vypadalo by to třeba takhle:
switch(hodnota) {
case 'A':
case 'a':
obsluha áčka
break;
case 'B':
obsluha béčka
break;
a tak dál pro všechny, co chceš obsloužit a pak je možno ještě dát
default:
když se neujme žádný case (to tam být může a nemusí)
}
(s výhodou můžeš psát 'A' místo abyste zjišťoval, jaký zrovna kód má to áčko)

Jestli to chceš zpracovávat na PC, tak tam ti z Arduina po seriové lince přijde řetězec, který bude hexadecimálním zápisem toho čísla, co pošleš do println. Když budeš posílat unsigned int, tak podle konkrétní hodnoty to bude 1-8 znaků a ukončené koncem řádku. To by bylo nejlepší převést zase na číslo do proměnné a pak s tím dál pracovat jak jsem napsal v minulém odstavci.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Odpovědět