Na radu zkušenějších se snažím odstranit skoky typu goto.
Může ,prosím, někdo poradit jak elegantně vyřešit a nebo upravit tento "problém" toku programu ?
Mělo by to dělat toto:
- pavouček se přepne do módu "lehnout a čekat" -> void PIR
- rozjede se počítání "čekání"
- kontroluje se PIR nebo náhoda (1 ze 100) nebo napočítání 800 kroků počítadla (později tam vrazím i kontrolu na světlo a zvuk) a zároveň NÁKLON pavoučka, ten musí být vodorovný (naklon == 0), jakmile je příliš skloněný nesmí být podmínka splněná
- pokud jsou splněné podmínky pavouček se zvedne (funkce NAHORU) a pokračuje na hlavní program
- pokud nejsou pokračovat v kontrole
Tato má verze funguje, ale je asi trochu krkolomná:
Program:
Kód: Vybrat vše
void PIR () {
Controller.stopActionGroup(); // zastavit kroky
beep1 (); // písknutí
Controller.runActionGroup(LEHNOUT, 1); // lehnout
delay (2000); // uklidnit pavoučka
digitalWrite (10,LOW); // zhasnutí LED blesku
kroky = 0; // vynulování počtu kroků pavouka
cekani = 0; // vynulování orientačního počítadla
stavy = 2; // pro podmínku na výpis oled -> "PIR"
// if (digitalRead (2) == HIGH) {delay (3000);} // počkej pokud píská klíčenka - nefunkční
start1:
test_naklonu(); //kontrola náklonu pomocí gyroskopu
if ((( digitalRead(11) == HIGH) or (cekani > 800 ) or (random(100) == 1)) and (naklon == 0 ))
{ // čeká na PIR (11) a zvuk () nebo uplynutí určité doby a nebo na náhodě
// v minutách - cekani ( / 60 ), poloha musí být vodorovná -> naklon
beep0 (); // zvukové potvrzení
OLED (); // výpis na oled displej
Controller.runActionGroup(NAHORU, 1); // zvednout
delay (1000); // uklidnění
}
else
{
OLED (); // výpis na oled displej
cekani = cekani + 1; // počítadlo čekání v PIR
goto start1; // zpět na kontrolu
}
}
Potřebuji do toho vsunout ještě toto:
při prvním zaznamenání a reakci na PIR nebo (osvícení baterkou nebo zvukový signál) aby pavouček se jen zvednul, počkal jestli se "to" bude opakovat a když ne tak aby si zase lehnul a čekal (falešný poplach). Po např. druhém opakování stejného podnětu aby už přešel na hlavní program.
Toto už je asi dost složité, teda pro mě určitě