Zastavení smyčky

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Uživatelský avatar
gilhad
Příspěvky: 857
Registrován: 07 bře 2018, 11:22

Re: Zastavení smyčky

Příspěvek od gilhad » 11 bře 2018, 12:04

Jina moznost je uvedomit si, ze i loop() je "pouha funkce" a misto zastavovani se da proste opustit pomoci "return". A ze digitalRead vraci normalne cislo, bud 0, nebo 1 (LOW a HIGH jsou vznesene nazvy pro totez) a tak se da misto rady ifu a vypisovani vsech kombinaci stisknuti (jak to je v prikladu od peatan) hodnota stavu proste "spocitat"

Kód: Vybrat vše

stav = 2 * digitalRead(btn1) + digitalRead(btn2);
pripadne to pouzit primo v tom switchi:

Kód: Vybrat vše

switch (2 * digitalRead(btn1) + digitalRead(btn2)){
case 0:
  // nic neni stisknuto, nic nedelam
  break;
case 1:
 //kalibrace
 break;
case 2:
 //vazeni
  break;
case 3:
 return;
// break; // na break uz nedojde
default: 
// sem se taky nemame jak dostat //pokud hodnota neodpovídá proveď toto...
}
moznosti je velika spousta ...

ok1vkt:
i to by slo, ale interrupty by mely byt co nejkratsi, protoze dokud se zpracovava jeden interrupt, tak ostatni interrupty jsou zakazany (tedy vselijake casovace, komunikace, piskani a jine vylomeniony, co nejedou primo v HW, ale jsou resene prez interrupty.).

Takze bezne interrupt spis jen nastavi globalni promenne (ktere musi byt oznaceny volatile, aby si je prekladac nejak nevhodne nezoptimalizoval a nevypustil z vypoctu) a na ty prommenne pak reaguje hlavni smycka uz zase ve "svem case", aby i ostatni interrupty mohly delat svou praci (a prerusovat ji).

Takze pokud tazatel jen potrebuje stisknutim tlacitka zacit vazit (nebo kalibrovat) a jinak nedela nic, tak je vhodnejsi testovat v loop primo ta tlacitka, nez priznaky, zda byly zmacknuty.

Pokud by ale treba potreboval vazit hodne dlouho (treba by vazil petitunky nakladaky a cekal, dokud se vaha neuklidni) a mezitim si vsimnout, zda bylo stitknuto tlacitko, aby na nej zareagoval az po skonceni vazeni (treba zda ridic chce vytisknout listecek, nebo mu staci zobrazeni na display), pak by mu prave preruseni od toho tlacitka, co by nastavilo priznak tisknuti listku, skutecne velice usnadnilo zivot (a hlavne programovani)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host