Kód: Vybrat vše
stav = 2 * digitalRead(btn1) + digitalRead(btn2);
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...
}
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)