KURZ: Příjem a vyhodnocení zprávy
- Podrobnosti
- Mgr. Jan Baťko
- Aktualizováno: 30.03.2014
- Zobrazení: 5201
Zprávy odeslané pomocí Bluetooth zařízení (popsáno v kapitole Zasílání zpráv pomocí Bluetooth) musí následně druhé připojené zařízení přijmout a vyhodnotit. Přijatá zpráva musí být nejprve uložena. Stejně jako jsou klasické dopisy při přijetí vhozeny do poštovní schránky, existuje i v programování robotické stavebnice schránka, která slouží k přijetí pomocí Bluetooth zasílané zprávy. Následně se vyhodnocuje, zda zpráva byla skutečně přijata je úspěšně připravena ke čtení. Postupně přijaté zprávy se ukládají do fronty, ve které čekají na zpracování. Po zpracování je pouze na uživateli, jak s nimi bude dále nakládáno. Zda budou smazány či nikoliv.
Přijímání zpráv V PROGRAMOVACÍCH PROSTŘEDÍCH
NXT-G
Blok pro příjem zpráv
Rozcestník
UMÍSTĚNÍ BLOKU
Programový blok Receive Message sloužící k příjmu zprávy pomocí Bluetooth nalezneme v paletě Complete > Sensor.
POPIS BLOKU
Blok Receive Message obsahuje celkem devět konektorů pro propojení s dalšími bloky:
Mailbox - schránka určená pro příjem zprávy, která je označována čísly 1-10.
Text in - zadaná hodnota datového typu Text sloužící k porovnání s hodnotou téhož datového typu přijatou pomocí Bluetooth.
Number in - zadaná hodnota datového typu Number sloužící k porovnání s hodnotou téhož datového typu přijatou pomocí Bluetooth.
Logic in - zadaná hodnota datového typu Logic sloužící k porovnání s hodnotou téhož datového typu přijatou pomocí Bluetooth.
Message Received - hodnota logického datového typu vyjadřující, zda byla nebo nebyla přijata zpráva (zda je schránka (Mailbox) prázdná či nikoliv. Výsledkem je True (pravda) - zpráva byla přijata. Výsledkem je False (nepravda) - zráva nebyla přijata.
Yes/No - port, který vyjadřuje výsledek porovnání hodnoty nastavené jako parametr bloku a hodnoty přijaté ve zprávě pomocí Bluetooth.
Text out - výstup pro hodnoty datového typu Text.
Number out - výstup pro hodnoty datového typu Number.
Logic out - výstup pro hodnoty datového typu Logic.
PARAMETRY BLOKU
Pomocí bloku Receive Message je možné přijímat zprávy v podobě textových informací (Text), číselných hodnot (Number) a hodnot True a False logického datového typu (Logic).
Message: pole pro výběr typu příchozí zprávy (Text, Number nebo Logic).
Compare to: pole sloužící k zadání hodnoty, která má být porovnávána s hodnotou přijatou ve zprávě pomocí Bluetooth.
Mailbox: číselná hodnota označujcí číslo schránky, do které bude příchozí zpráva uložena.
RobotC
PŘÍKAZY PRO příjem zpráv pomocí bluetooth
Rozcestník
- Příjem nové zprávy
- Ověření přijetí zprávy
- Ověření existence nezpracovaných zpráv
- Čtení přijaté zprávy
- Smazání přijaté zprávy
Příjem nové zprávy
Přijímání zpráv odesílaných pomocí Bluetooth se v programovacím prostředí RobotC provádí pomocí specifických příkazů a proměnných. Jakmile je zpráva přijata zařízením Bluetooth, je její 16 bitová hodnota, která nabývá rozsahu od -32 767 do 32 767, uložena do proměnné Message. Pokud je přijata hodnota, která je rovna 0, je tento výsledek vyhodnocen tak, že nebyla přijata žádná zpráva.
Message; //Promenna pro ulozeni 16 bitove hodnoty zpravy prijate pomoci Bluetooth.
Ověření přijetí nové zprávy
Během přijímání zpráv zasílaných pomocí Bluetooth budeme někdy potřebovat ověřit, zda byla zpráva úspěšně přijata či nikoliv. Ke zjištění této skutečnosti slouží příkaz cCmdMessageGetSize(), jehož parametrem je ID odesílané zprávy. Návratovou hodnotou je zde počet bitů úspěšně přijaté zprávy.
cCmdMessageGetSize(IDzpravy);
Ověření existence nezpracovaných zpráv
Pokud přijímáme během kratších časových intervalů více zpráv, tak se tyto zprávy ukládají do fronty. Příkazem bQueuedMsgAvailable(), jehož návratovou hodnotou je hodnota logického datového typu (True nebo False) můžeme zjistit, zda se ve frontě nacházejí nějaké zprávy ke zpracování. Příkaz nám tak umožní ověřit si skutečnost, zda nemáme ve frontě přijato více zpráv ještě předtím, než program automaticky přejde k přečtení poslední přijaté zprávy.
bQueuedMsgAvailable(); //Prikaz k overeni existence nezpracovanych zprav ve fronte.
Čtení přijaté zprávy
Po přijetí je zpráva pouze uložena v přislušném mailboxu, do kterého jsme ji přiřadili při odesílání. Abychom s ní mohli dále pracovat, musíme ji z něj vyjmout. K tomuto účelu slouží příkaz cCmdMessageRead(nQueueID, nRcvBuffer, nSizeOfMessage). Jeho prvním parametrem je ID zprávy, pod kterým jsme ji odesílali. Druhým parametrem název bufferu, do kterého se zpráva z mailboxu zkopíruje. Třetí parametr definuje počet bitů zprávy, které se mají zkopírovat.
cCmdMessageRead(IDzpravy, Buffer, velikost_zpravy); //Vyjmuti prvni zpravy z mailboxu a zkopirovani do bufferu.
Smazání přijaté zprávy
V případě, že chceme některou z přijatých zpráv smazat, použijeme příkaz ClearMessage(). Ten smaže vybranou zprávu, kterou nechceme použít.
ClearMessage(); //Prikaz k smazani zvolene zpravy.