User Manual
85
Příklad:
if(getBumperLeft() && getBumperRight()) // oba narazniky...
escape(); // zde definujte vlastni funkci tj. coufnuti a otoceni
else if(getBumperLeft()) // levy...
escapeLeft(); // opet couvani a otaceni doprava
else if(getBumperRight()) // pravy...
escapeRight(); // opet couvani a otaceni doleva
mSleep(50); // rychlost kontroly narazniku 20 krat za sekundu (20Hz)...
Stisknutí nárazníku rozsvítí LED 6 a 3. Je to záměrné a nelze odstranit. Nárazníky se však
neaktivují příliš často, takže nás to příliš neruší.
Na číslicové výstupy se čtyřmi zbývajícími LED můžeme připojit další
snímače. Přes tranzistorové pole se také mohou spínat větší zátěže, jako jsou
LED nebo motory. To je pouze krátký výčet věcí, které mohou být, pomocí
příslušných funkcí, ovládány pomocí těchto čtyř portů, ale pamatujte na
existující funkce pro LED a nárazníky.
Pozor: porty mikroprocesoru vždy chraňte rezistorem pro omezení proudu s hodnotou
minimálně 470Ω, který vložíte mezi vývod portu a snímač nebo spínač!
Během bootovací fáze umožňuje RP6 zhasnout LED. To je užitečné pro potlačení aktivity portu
během probíhajícího bootování, zejména pokud je na port s LED připojeno další zařízení.
První byte vnitřní EEPROM (adresa 0) je vyhrazen pro ovládání režimu LED. Nepoužívejte
tento byte pro vlastní programy (přepsání tohoto byte nic nepoškodí, ale může vás znepokojit,
že se po zapnutí RP6 dlouho nerozsvítí LED...).
Na robotu RP6 existuje řada věcí, které se musí neustále sledovat, pokud mají fungovat
správně. Například ACS musí vysílat IR impulsy v přesných intervalech a kontrolovat příjem.
K tomu nemůžeme použít automatickou funkci přerušení, protože obsluha přerušení musí být
co nejrychlejší. Nezbývá než opakované volání několika funkcí z hlavního programu. V dobře
navrženém programu se bude zdát, že tyto úlohy běží na pozadí.
V této kapitole probereme všechny funkce pro ACS a podobné systémy a poskytneme další
podrobnosti. Předpokládáme však, že nejjednodušší bude uvést několik podrobností, které
usnadní zvládnutí funkce nárazníků a jejich implementaci v programu.
Nyní, když řešíme úlohy na pozadí, mohou vedle velkých věcí běžet nějaké další (menší) úlohy
– například sledování nárazníků. Je to jednoduchá a rychlá úloha, kterou můžete provádět
v hlavní smyčce. Při automatické kontrole nárazníků můžete v hlavní smyčce opakovaně volat
tuto funkci:
void task_Bumpers(void)
(v předchozí kapitole byly probrány podrobnosti ovládání). Tato funkce bude automaticky,
v intervalu 50ms, kontrolovat stav snímačů nárazníků (stisknutý nebo ne) a jejich aktuální stav
zapíše do proměnných
bumper_left a bumper_right
Tyto proměnné můžete použít kdekoliv v programu tj. v podmíněných příkazech, cyklech atd.
nebo je přiřazovat do dalších proměnných.