|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Pet Apr 23, 2021 11:45 pm Naslov sporočila: Arduino switch, case |
|
|
Pozdravljeni
Kako v spodnjemu primeru napisati kodo, da se pogoji izvedejo samo enkrat in to točno ob 21 uri.
Sedaj se to ponavlja dokler ni ura 22.
Lp, marko
Koda: |
case 21: // ko je ura 21
if(roll < -1) // in če je kot "roll" manjši od 0
digitalWrite(rele_roll_plus, LOW); // vklopi rele_plus
if(roll == 0) // ko doseže kot 0
digitalWrite(rele_roll_plus, HIGH); // izklopi rele_plus
if(roll > 1) //in če je kot "roll" večji od 0
digitalWrite(rele_roll_minus, LOW); // vklopi rele_minus
if(roll == 0) // in ko doseže kot 0
digitalWrite(rele_roll_minus, HIGH); // izklopi rele_minus
break;
|
|
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Sob Apr 24, 2021 12:31 pm Naslov sporočila: |
|
|
Najenostavneje
Koda: |
case 21:
if(Pomozna ==1) break; // Prvič še ni
Pomozna = 1;
if(roll == 0) // vedno, ko je 0
{
digitalWrite(rele_roll_minus, HIGH); // izklopi rele_minus
digitalWrite(rele_roll_plus, HIGH); // izklopi rele_plus
}
break;
if(roll < -1) // in če je kot "roll" manjši od 0
digitalWrite(rele_roll_plus, LOW); // vklopi rele_plus
if(roll > 1) //in če je kot "roll" večji od 0
digitalWrite(rele_roll_minus, LOW); // vklopi rele_minus
break;
|
Načeloma je možno tudi brez Pomozna. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
marko11 Član
Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 866 Aktiv.: 3.88 Kraj: Dobrepolje
|
Objavljeno: Tor Apr 27, 2021 11:33 am Naslov sporočila: |
|
|
Se zahvaljujem, za pomoč.
lp, |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.04
|
Objavljeno: Sre Apr 28, 2021 9:22 am Naslov sporočila: |
|
|
Zadnjič sem malo zakompliciral. Ti kar rezerviraj
byte Pomozna;
in lahko v vsakem case narediš, kolikokrat naj se izvede.
Če želiš, da se nek case izvede 1x, nek pa npr 8x, napraviš tako
Koda: |
case 21:
if(roll >= 0) digitalWrite(rele_roll_minus, HIGH); // izklopi rele_minus
if(roll <= 0) digitalWrite(rele_roll_plus, HIGH); // izklopi rele_plus
if(Pomozna == 29) break; // Po 8 izvedbah je dovolj in je ne dovoli več
Pomozna++; // Prvič prileti noter s Pomozna = 21, nato jo vsakič poveča
if(roll < -1) // in če je kot "roll" manjši od 0
digitalWrite(rele_roll_plus, LOW); // vklopi rele_plus
if(roll > 1) //in če je kot "roll" večji od 0
digitalWrite(rele_roll_minus, LOW); // vklopi rele_minus
break;
case 22:
... ne preverja, izvede se vsakič
case 23:
if(Pomozna == 31) ... // 29 je od prej, dvakrat se izvede
|
Za povrhu ima koda od zadnjič "hrošča", da lahko rele ostane vklopljen, če je roll različen od 0.
Sedaj bo toleranca vrednosti roll -1, 0, 1, če je izven območja, pa se samo enkrat vklopi rele.
Celoten program se namreč izvede tako hitro, da lahko po potrebi ob enkratnem prehodu case stavka samo vklopi ustrezen rele, izklopiti se mora pa sam, ko roll doseže dovoljeno območje. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 74 dni
Powered by phpBB © 2001, 2005 phpBB Group
|