User manual
Příklad:
#include “asuro.h”
int main(void) {
MotorDir(FWD,FWD); // Oba motory běží dopředu
MotorSpeed(120,120); // Oba motor běží přibližně na poloviční rychlost
StatusLED(GREEN); // Stav zapnuto - LED svítí zeleně
while (PollSwitch()==0) { // As long as there is no collision
SerWrite(“All OK!\n”,10); // ... Feeling groovy ....
}
MotorSpeed(0,0); // Collision! Stop immediatedly!
StatusLED(RED); // Turn on Status-LED red
while (1) {
SerWrite(“Ouch!\n”,5); // start crying!
}
}
A “for (expr1, epr2, expr3)”- sequence is equivalent to:
expr1;
while( expr2) {
Command block
expr3;
}
Sekvence “for”- se často používá jako početní sekvence.
for (i = 0; i < n; i++)
Příklad:
#include “asuro.h”
int main(void) {
int counter; // defi ne a variable for counting
for (counter =0;counter <10;counter ++) { // repeat ten times:
SerWrite(“Go ahead!\n”,10); // “Go ahead” message
}
MotorDir(FWD,FWD); // Both engines forward
MotorSpeed(120,120); // Both engines running at around half speed
while (1) { // No more action!
}
}
"while(1)" je ekvivalentem "for(;;)" a jde o nekonečné cykly, protože podmínka pro přerušení
(v tomto případě 0) nemůže být nikdy dosažena.
Jinou cyklickou sekvencí je "do" cyklus
do
příkazový blok
while (podmínka)
Oproti podmínce "while" se tato podmínka kontroluje po příkazovém bloku. Tato programová
sekvence vynutí provedení příkazového bloku vždy alespoň jednou.
Funkce
Blok definice funkce vypadá vždy následovně:
Typ funkce Název funkce (Typ parametru 1 Název parametru 1, Typ parametru 2, Název parametru
2,…)
V programech někdy potřebujeme použít stejnou programovací sekvenci na různých místech.
Můžeme samozřejmě celou sekvenci napsat znovu, nebo k tomuto čelu použít metodu ctrl/C - ctrl V
(jde o otravný proces, kterým si uvedeme zmatek do programu), nebo si prostě definovat funkci.
Nyní potřebujeme dát do funkce několik proměnných, např. říct naší funkci GoAhead (), aby pracovala
přesně v dané rychlosti, v určitém cyklu, nebo v definované vzdálenosti. K těmto detailům se použijí
parametry.
Funkce může vrátit i hodnotu. Dobrým příkladem je funkce HowManySwitchesHaveBeenActivated () -
(kolik přepínačů se aktivovalo), vracející hodnotu, která se nějak a někde uvnitř funkčního bloku
nadefinuje. Hodnota se vrací příkazem return na konci těla funkce.
To je důvod proč funkce končí výrazem return; nebo return number;.
Speciální funkcí je funkce main (), která definuje hlavní tělo programu. V ASURO se funkce main ()
provádí při zapnutí. Funkci main () musí samozřejmě obsahovat každý program.
Po troše teorie týkající se datových typů a funkcím bychom chtěli vytvořit jednoduchou funkci, která
vynásobí dvě 8 bitové čísla a vrátí výsledek.
int Mult (char a, char b)
/* Funkce vrací celé číslo, má název Mult a pro vstup používá hodnoty tvořené dvěma znaky */
{ // Begin function
int c; // Declaring variable c as an int
c = a * b; // calculate c
return c; // returning integer c
} // End of the function “Mult”
Nyní příklad programu, který používá výše definovanou funkci Mult:
int main (void) // Function main always returns an int and will not
// input any parameter
{ // Begin Function „main“
char mult1,mult2; // Defining two „char“-variables
int result; // Defining an int-variable for the result of multiplying
// variables mult1 and mult2
mult1 = 2; // assignment
mult2 = 10; // assignment
result = Mult(mult1,mult2); // calling the previously defined function “Mult”
return 0;
} // End of function „main“
Ukazatele a vektory
Ukazatele a vektory vysvětlíme do té míry, jak je potřebné pro provoz robota ASURO.
Vektory budeme potřebovat, když chceme sledovat data ze senzorů sledujících dráhu pohybu,
nebo z odometrických senzorů.
Deklarace je celkem jednoduchá:
int lineData[2];
int odometrieData[2];
Jak uvidíte, vytvoříme dva vektory (lData, oData) s 2 prvky pro sledování dráhy a odometrii.
Voláním funkce (LineData(), OdometrieData ()), prvek [0] dostává hodnotu levého senzoru
a prvek [1] dostává hodnotu pravého senzoru.