www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Arduino switch, case

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 772
Aktiv.: 4.10
Kraj: Dobrepolje

PrispevekObjavljeno: Pet Apr 23, 2021 11:45 pm    Naslov sporočila:  Arduino switch, case Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 20.35

PrispevekObjavljeno: Sob Apr 24, 2021 12:31 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
marko11
Član
Član



Pridružen-a: Ned 14 Dec 2003 17:47
Prispevkov: 772
Aktiv.: 4.10
Kraj: Dobrepolje

PrispevekObjavljeno: Tor Apr 27, 2021 11:33 am    Naslov sporočila:   Odgovori s citatom

Se zahvaljujem, za pomoč.

lp,
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3638
Aktiv.: 20.35

PrispevekObjavljeno: Sre Apr 28, 2021 9:22 am    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 189 dni


Powered by phpBB © 2001, 2005 phpBB Group