User manual
void Sleep (unsigned char time72kHz)
Touto funkcí se přikáže procesoru, aby určitou dobu čekal. Doba čekání se může definovat
parametrem (unsigned char), který bude obsahovat číslo s maximem 255 a výpočetní cykly,
které dodává 72 kHz-timer.
Příklad:
0,003 s
Procesor buse asi 3 ms. v režimu spánku ==> 1 = 216.
72 KHz
Funkce sleep (216); přinutí procesor 3 milisekundy čekat.
Sleep (216);
void MotorDir (unsigned char left_dir, unsigned char right_dir)
Tato funkce kontroluje směr obou motorů a měla by se volat ještě před voláním ovladačů rychlosti.
Platné parametry jsou FWD (vpřed), RWD (vzad), BREAK (brzdění, nebo náhlé zastavení
zkratováním motorů v přemostění tranzistorů) a FREE (volnoběh).
Příklad:
Levý motor se bude pohybovat vpřed a pravý motor je zastaven:
MotorDir(FWD,BREAK);
void MotorSpeed (unsigned char left_speed, unsigned char right_speed)
Tato funkce kontroluje rychlost obou motorů. Maximální rychlost je 255 (funsigned char).
V závislosti na mechanických podmínkách se motor začne točit při hodnotě kolem 60. Hodnota
parametru kontroluje ve skutečnosti výkon motoru a rychlost otáčení závisí také na jiných faktorech,
jako je tření nebo sklon svahu.
Jakmile se tato funkce provede, ASURO se začne pohybovat. Někdy se však stává,
že program má za následek neočekávané pohyby a musíme dávat pozor, aby ASURO
nezpůsobil žádnou škodu, nebo se sám nepoškodil.
Příklad:
Levý motor se bude pohybovat při maximální rychlosti, zatímco pravý motor se nebude pohybovat.
Směr pohybu byl už dříve definován jako MotorDir ().
MotorSpeed (255,0);
void SerWrite (unsigned char *data, unsigned char length)
Funkce kontroluje výstup dat z robota přes sériové IR rozhraní (2400 Bit/s, No-parity, 1 StopBit,
NoFlowControl). První parametr obsahuje odkaz na data, která se mají odeslat, zatímco druhý
parametr popisuje počet znaků, které se mají odeslat.
Příklad:
Přes IR rozhraní se odešle řetězec „Hello how are you?“
SerWrite (“Hello how are you?”,18);
void SerRead(unsigned char *data, unsigned char length, unsigned int timeout)
Když už jste schopni odesílat data přes IR rozhraní, pravděpodobně budete chtít i nějaká data
přijímat. Následující funkce vám to umožní. První parametr ukazuje na adresu paměti, ve které
chcete zprávu uložit. Druhý parametr popisuje, kolik znaků se očekává a třetí parametr udává dobu
pro vypršení platnosti (timeout). Timeout se používá, aby se zabránilo nekonečnému čekání, pokud
se přijme menší, než očekávané množství dat. Pokud po uplynutí zadané doby pro vypršení platnosti
nepřijdou další data, funkce se přeruší a první znak v přijatém řetězci se nahradí znakem "T"
(=Timeout). Pokud však definujete třetí parametr jako "0", funkce se nepřeruší a bude čekat, dokud
se nepřijme poslední z očekávaného počtu znaků.
Příklad:
Měl by se přijmout řetězec "Go Ahead" a předtím než bude robot pokračovat v činnosti,
chceme se ubezpečit, že ASURO skutečně přijal všechny znaky.
#include “asuro.h”
int main(void) {
char data[8]; // allocate storage
Init();
SerRead (data,8,0); // Read data
MotorDir(FWD,FWD);
MotorSpeed(120,120);
while(1); // Eternal loop
return 0;
}
.
.
.
void LineData(unsigned int *data)
Tato funkce byla vytvořena pro čtení intenzity světla obou fototranzistorů na spodní straně robota.
Budete muset definovat ukazatel adresy místa duálního celého čísla v paměti. Funkce přenese
hodnoty naměřených dat obou fototranzistorů do převedeny v AD převodníku. Hodnota prvního celého
čísla představuje převedenou hodnotu levého fototranzistoru (T9), hodnota druhého celého čísla
představuje převedenou hodnotu pravého fototranzistoru (T10). Maximální intenzita (jas) má hodnotu
"1023", zatímco úplná tma se označuje jako "0". Za normálních okolností se tyto dvě krajní meze
nevyskytují a v praxi se setkáváme s hodnotami měření, které jsou někde uprostřed mezi oběma
krajními hodnotami.
Příklad:
Čtení intenzity světla obou fototranzistorů (T9, T10)
unsigned int data[2]; //Allocate storage
.
.
LineData(data);
data[0] obsahuje hodnotu naměřenou levým fototranzistorem (T9)
data[1] obsahuje hodnotu naměřenou pravým fototranzistorem (T10)
Příklad celého programu:
#include “asuro.h” // Line tracing the easiest way
int main(void) {
unsigned int data[2]; // Allocate storage
Init();
FrontLED(ON); // Switch ON line trace illumination
MotorDir(FWD,FWD); // Both engines go ahead
while(1){ // Eternal loop, ASURO should follow
// a line eternally
LineData(data); // Read brightness data from Phototransistors
if (data[0]>data[1]) // left brighter than right
{MotorSpeed(200,150);} // ... speed up left motor
else
{MotorSpeed(150,200);} // ... speed up right motor
}
return 0;
}