User manual
Ukážeme si tuto metodu na příkladu:
Když dostává pravý senzor více světla než levý senzor, provede se příkaz 1, v opačném případě
se provede příkaz 2.
int lData[2]; // Přidělení paměti pro výsledky měření
LineData(lData); // Čtení naměřených dat
if (lData[1] > lData[0])
command1;
else
command2;
K použití funkcí sériových rozhraní (SerWrite (), SerRead () ) budeme potřebovat řetězec znaků,
který deklarujeme jako:
char message[] = “This is a text string”
Abychom odeslali textový řetězec do robota, voláme funkci SerWrite() s příslušnými parametry.
První parametr obsahuje textový řetězec, nebo proměnnou, která obsahuje textový řetězec. Druhá
proměnná popisuje počet znaků, který se má odeslat, např.:
SerWrite(message,20);
respektive
SerWrite(„This is a text“,14);
odešle na IR vysílač zprávu “This is a text”.
Pro příjem znaků používá ASURO funkci SerRead (). První parametr obsahuje proměnnou, ve které
se ukládají přijaté znaky. Druhý parametr definuje, kolik znaků se přijme a třetí parametr definuje čas
platnosti funkce: Pokud se do určité doby (počet hodinových cyklů procesoru) nepřijmou žádná data
SerRead (), funkce se zruší. Při použití čísla "0" však funkce počká, až se přijmou všechny znaky.
Funkci ukážeme na příkladu.
ASURO má přijmout z IR vysílače zprávu “Hi, here I am”. Pomocí definice řetězce
char message [] = ”01234567890123456789”
nejdříve přiřadíme očekávanému textu prostor v paměti. Je samozřejmé,
že místo v paměti musí být pro očekávanou zprávu dostatečně velké.
SerRead (message,13,0)
Přečti 13 znaků a počkej, dokud se nepřijme 13 znaků. Nyní máme za to, že byl odeslán textový
řetězec “Hi, here I am”. Funkce přepíše prvních 13 znaků předefinovaného řetězce zprávy větou “Hi,
here I am” a výsledkem bude řetězec:
Hi, here I am 3456789
Přehled funkcí robota ASURO
K programování robota ASURO bylo vtvořeno několik funkcí. Tyto funkce nejsou v žádném případě
optimálním řešením pro všechny účely a k některým účelům bude vhodné si napsat speciální funkce.
Všechny funkce byly vytvořeny, jak je definováno v deklaracích a lze je pochopit kontrolou příkladů.
Aby se zabránilo špatnému pochopení: ovládací funkce jako řízení motoru nebo funkce indikátorů
mění stav, který zůstane platný až do další změny. Zelený LED indikátor zůstane zelený až do další
změny na jinou barvu, nebo dokud se nevypne.
void Init (void)
Tato funkce resetuje mikroprocesor do původního stavu a musí se provést vždy na začátku programu.
Když funkce chybí, procesor nebude vědět, ani co má dělat s terminály. Jednoduchý program pro
ASURO by měl vypadat aspoň takto:
#include “asuro.h”
int main(void) { // zde deklarujeme některé proměnné
Init(); // zde vložíme naše vlastní funkční bloky
while(1); // nekonečný cyklus
return 0; // nikdy se neprovede
}
Proč jsme na konec funkce main () vložili nekonečný cyklus? Za normálních okolností bude funkce
main () ukončena příkazem return 0, který ukončuje program. V případě robota ASURO však mohou
v jeho paměti zůstávat a spouštět se části dříve nahraných programů, což může mít vyvolávat zvláštní
chování. Abychom se vyhnuli provádění částí starých programů, "zachytíme" program po jeho
provedení do nekonečné smyčky. Tímto způsobem si zabezpečíme, že program skončí
v nadefinovaném stavu.
void StatusLED (unsigned char color)
Stavová LED (D12) se vypne, nebo zapne. Platné hodnoty parametru jsou OFF, GREEN, RED
nebo YELLOW
Příklad:
Stavová LED se zapne a bude svítit červeně:
StatusLED (RED);
Kompletní ukázkový program bude vypadat následovně:
#include „asuro.h“
int main(void) {
Init();
StatusLED (YELLOW);
while(1); // eternal loop
return 0;
}
void FrontLED (unsigned char status)
Přední LED (D11) se zapne nebo vypne. Platné hodnoty parametru jsou ON a OFF.
Příklad:
Přední LED se zapne:
FrontLED(ON);
void BackLED (unsigned char left, unsigned char right)
Zadní LED indikátory (D15 a D16) se zapnou nebo vypnou. První parametr popisuje stav levé zadní
LED (D15), zatímco druhý parametr popisuje stav zadní LED na pravé straně (D16). Platné hodnoty
parametru jsou ON a OFF.
Příklad:
Zadní LED na pravé straně (D16) se zapne a zadní LED na levé straně (D15) se vypne:
BackLED(OFF,ON);