Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Arduino - více podmínek = VYŘEŠENO
Jdi na stránku Předchozí  1, 2
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: pá červen 19 2015, 5:46    Předmět: Citovat

citace:
AB1 chtěl bych se zeptat, jak ten zápis bude přesně fungovat?

Protože zadání není jednoznačné, můžu uvést jenom jednu možnou variantu programu:
kód:
  unsigned char rele1, rele2, rele3;

 //----------------------------------------
   if((teplota1 <= 28)
   {
      rele1 = HIGH;
      rele2 = HIGH;
      rele3 = HIGH;
   }
   if((teplota1 > 28) && (teplota1 <= 50)) 
   {
      rele1 = LOW;
      rele2 = HIGH;
      rele3 = HIGH;
   }
   if((teplota1 > 50)          // priorita1
   {
      rele1 = LOW;
      rele2 = LOW;
      rele3 = LOW;
      goto end;
   }
 //----------------------------------------
   if(teplota2 <= 25)
   {
      rele1 = HIGH;
      rele2 = HIGH;
      rele3 = HIGH;
   }
   else                      // priorita 2
   {  rele2 = LOW;     
      goto end;
   }
//----------------------------------------
   if(teplota3 <= 45)       
      rele2 = HIGH;
   else                      // priorita3
      rele2 = LOW;     
     
end:

    digitalWrite(1,rele1);
    digitalWrite(2,rele2);
    digitalWrite(3,rele3);



Naposledy upravil AB1 dne pá červen 19 2015, 8:22, celkově upraveno 4 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3314

PříspěvekZaslal: pá červen 19 2015, 5:58    Předmět: Citovat

rnbw napsal(a):
Radsej ako vymyslat nejake priority do programu, by som sa zamyslel nad tym, co vlastne chcem. Nakresli si na papier tie hranicne teploty (na os), medzi ne stav rele a podla toho tie podmienky jednoducho napises.


Souhlasim, taky jsem mu to predtim psal. Sam musi vedet co chce. Arduino mu to samo nevymysli. Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3314

PříspěvekZaslal: pá červen 19 2015, 6:03    Předmět: Citovat

AB1: u prvni podminky chybi mensi a je rovno.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: pá červen 19 2015, 6:14    Předmět: Citovat

Dík za upozornění.
Opraveno.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jiri255



Založen: Apr 18, 2013
Příspěvky: 168

PříspěvekZaslal: pá červen 19 2015, 8:47    Předmět: Citovat

AB1 napsal(a):
citace:
AB1 chtěl bych se zeptat, jak ten zápis bude přesně fungovat?

Protože zadání není jednoznačné, můžu uvést jenom jednu možnou variantu programu:
kód:
  unsigned char rele1, rele2, rele3;

 //----------------------------------------
   if((teplota1 <= 28)
   {
      rele1 = HIGH;
      rele2 = HIGH;
      rele3 = HIGH;
   }
   if((teplota1 > 28) && (teplota1 <= 50)) 
   {
      rele1 = LOW;
      rele2 = HIGH;
      rele3 = HIGH;
   }
   if((teplota1 > 50)          // priorita1
   {
      rele1 = LOW;
      rele2 = LOW;
      rele3 = LOW;
      goto end;
   }
 //----------------------------------------
   if(teplota2 <= 25)
   {
      rele1 = HIGH;
      rele2 = HIGH;
      rele3 = HIGH;
   }
   else                      // priorita 2
   {  rele2 = LOW;     
      goto end;
   }
//----------------------------------------
   if(teplota3 <= 45)       
      rele2 = HIGH;
   else                      // priorita3
      rele2 = LOW;     
     
end:

    digitalWrite(1,rele1);
    digitalWrite(2,rele2);
    digitalWrite(3,rele3);


jen pro upřesnění, abych správně pochopil, jak to přesně bude fungovat.
Program dojde ke smyčce loop (v setup mám nastavena všechna relé, jako vypnutá) a pokud bude teplota1 větší jak 50 skočí to na konec a pojede to odznovu,takže ostatní podmínky to bude přeskakovat.
Pokud bude teplota1 menší jak 50, tak to zároveň vykoná podmínku teplota2 (tu za else) a opět to skočí na konec a pojedou dokola jen ty dvě podmínky.
Teplota3 (za else) bude splněna jen pokud nebudou platit ty dvě předchozí?

to unsigned char rele1, rele2, rele3;
digitalWrite(1,rele1);
digitalWrite(2,rele2);
digitalWrite(3,rele3);
tam mít nemusím ne, když mám stavy relé definované jako HIGH nebo LOW?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
AB1



Založen: Nov 23, 2009
Příspěvky: 312

PříspěvekZaslal: pá červen 19 2015, 9:06    Předmět: Citovat

Můžeš si to dát do simulátoru a měnit teploty.
Uvidíš jak se to chová.
citace:
tam mít nemusím ne, když mám stavy relé definované jako HIGH nebo LOW?

Omyl, rele1,2,3 jsou pomocné proměnné, ty žádné výstupy nenastavují.
Až na konec zapíšeš výstupy podle stavu těchto proměnných.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jiri255



Založen: Apr 18, 2013
Příspěvky: 168

PříspěvekZaslal: pá červen 19 2015, 9:48    Předmět: Citovat

aha teď sem si toho všiml, takže když vyhodím rele1, 2 a 3 a nahradím to přímo digitalWrite(1,HIGH); a tak dále, tak by mi to taky mělo šlapat...
Já to odzkouším a dám vědět, jak jsem dopadl Wink zatím moc díky za pomoc
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3314

PříspěvekZaslal: pá červen 19 2015, 10:40    Předmět: Citovat

jiri255 napsal(a):
aha teď sem si toho všiml, takže když vyhodím rele1, 2 a 3 a nahradím to přímo digitalWrite(1,HIGH); a tak dále, tak by mi to taky mělo šlapat...
Já to odzkouším a dám vědět, jak jsem dopadl Wink zatím moc díky za pomoc


Takhle ne. Do promennych rele1 az rele3 se uklada jejich prubezna hodnota, tzn.bud HIGH nebo LOW a pak se to na KONCI zrealizuje. Na konci proto, ze cestou to projde jeste sitem dalsich mereni a porovnavani a kdyby se hned melo hybat s relatkama, tak by cvakaly.

Promennou si muzes nazvat jakkoliv, treba stavrele1 apod.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jiri255



Založen: Apr 18, 2013
Příspěvky: 168

PříspěvekZaslal: pá červen 19 2015, 13:23    Předmět: Citovat

tak to mi nedošlo já myslel, že pokud to v loop projde první podmínku a ta bude platit a za ní to hned skočí na END: ,tak nebude vadit to okamžité nastavení relátek, protože by to s nimi nemělo znovu hýbat... budu to muset odzkoušet, abych viděl jak to pracuje a co se na těch relátkách děje.
Díky za doplňující info
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ZdenekHQ
Administrátor


Založen: Jul 21, 2006
Příspěvky: 25741
Bydliště: skoro Brno

PříspěvekZaslal: pá červen 19 2015, 14:53    Předmět: Citovat

jiri255 napsal(a):
a jak by se to řešilo pomocí té tabulky stavů?


To je pro mě trošku složitější na vysvětlování, protože nejsem programátor.

Pokud má prioritu teplota1 a 3 stavy, uděláš tabulku se třema sloupcema.

Další podmínky jsou teplota2 a 3, takže bude mít tabulka dva x dva řádky pro dvě mezní teploty2,3 (t.j. jednu mezní pro 2 a jednu mezní pro 3). Pak pro t2<x°C a t3<y°C platí řádek 1 atd.

Každé políčko obsahuje 3bity = 3 stavy výstupů (relátek).

Podle t1 nastavíš sloupec.

Podle t2 x t3 nastavíš řádek.

Až to začneš vyplňovat, tak zjistíš, kde máš prázdná místa nebo kolize.

Pak podle teplot1,2,3 nastavíš "ukazatel" na správné místo v tabulce a přečteš hodnotu.

Hysterezi to neřeší - to vyřešíš porovnáním aktuálního stavu teploty s předchozí hodnotou + vloženou pauzou ve smyčce.

_________________
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovy WWW stránky
jiri255



Založen: Apr 18, 2013
Příspěvky: 168

PříspěvekZaslal: pá červen 19 2015, 18:34    Předmět: Citovat

to nevím jestli bych dal dohromady, asi by to nebylo špatné řešení jen bych musel přijít na to jak to udělat... zkusím se nad tím zamyslet a něco dát dohromady, ale prvně chci otestovat tu variantu s tím END: ta mi přijde hodně zajímavá na můj problém
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
jiri255



Založen: Apr 18, 2013
Příspěvky: 168

PříspěvekZaslal: so červen 20 2015, 20:55    Předmět: Citovat

otestoval jsem to goto END; a funguje to přímo s digitalWrite(2,LOW nebo HIGH);
a relátka necvakají myslím, že to můj problém vyřešilo, protože si můžu priority u podmínek nastavit přesně, jak potřebuju Smile Díky moc
kód:

          if (teplota1 <= 28) {
           digitalWrite(1,HIGH);
           digitalWrite(2, HIGH);
           digitalWrite(3,HIGH);                   
           } else if((teplota1 > 28) && (teplota1 <= 50)){
           digitalWrite(1,LOW); 
           digitalWrite(2, HIGH);
           digitalWrite(3,HIGH);                 
           } else if(teplota1 > 50){
           digitalWrite(1,LOW); 
           digitalWrite(2, LOW);
           digitalWrite(3,LOW);
           goto END;                 
           }
           
           if(teplota2 <= 25) {       
           digitalWrite(1,HIGH);
           digitalWrite(2,HIGH);
           digitalWrite(3,HIGH);
           } else if(teplota2 > 25){
           digitalWrite(2,LOW);
           goto END;
           }
                     
           if(teplota3 <= 45) {       
           digitalWrite(2,HIGH); 
           } else if(teplota3 > 45){
           digitalWrite(2,LOW);
           goto END;         
           }

           END:
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3314

PříspěvekZaslal: so červen 20 2015, 20:59    Předmět: Citovat

Relatka necvakaji, protoze to nestihnou. Bude-li ale teplota1 napr. 30st, nastavi se to nejak a dal v programu to teplota 2 30st zmeni.
A tak pujde pozadovana priorita podle teploty1 do kopru.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.15 sekund