Zaslal: čt červen 18 2015, 20:13 Předmět: Arduino - více podmínek = VYŘEŠENO
Zdravím,
chtěl bych někoho požádat o kontrolu podmínek níže, protože si nejsem úplně jistý jestli, tak jak jsem to napsal to bude fungovat správně?
Jde mi o to, že mám tři teplotní čidla pojmenovaná jako teplota1, teplota2 a teplota 3 a ty mají ovládat 3 relé rele1(1), rele2(2) a rele3(3).
Podmínky jsou:
pokud teplota1 je menší jak 28, tak jsou všechna relé vypnuta tedy HIGH,
když je teplota mezi 28 až 50, tak rele1 běží (LOW) a rele2, rele3 neběží (HIGH) a pokud je teplota nad 50, tak běží všechna relé (LOW) což funguje perfektně.
Dál bych k tomu, ale potřeboval přidat podmínku, že pokud teplota2 je menší jak 25, tak neběží žádné relé a pokud je větší, jak 25 tak rele2 běží (LOW).
U třetí podmínky bych potřeboval, že pokud je teplota3 menší, jak 45 tak rele2 běží (LOW) a pokud je teplota3 větší, jak 45 rele2 neběží(HIGH).
Důležité je, aby prioritu měla ta první podmínka = teplota1 hlavně to, že když je teplota1 nad 50 běží všechna relé.
Nebudou se ty podmínky mezi sebou hádat a lze případně nějak podmínkám nastavit prioritu?
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: čt červen 18 2015, 20:34 Předmět:
Máš tam i teplota4, za else se už (navíc špatně) negovaná podmínka nedává a hádat se to může. _________________ 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[?]
Napis si ty hranicni podminky teplot a za to dej co se ma dit a vykasli se na ELSE.
Podminku a prioritu podle teploty1 nastavis prave tak, ze budes v radku IF podminovat (teplota1...)&&(teplota2).
Nebo si proritu zadej jako dalsi promennou.
Pokud bude teplota1 jakou ji potrebujes bude priorita=1 (jako ze je aktivni).
V dalsich IF podminkach das dotaz na teplotu napr. (teplota2...)&&(priorita==1) a pokud to bude platit, stane se co potrebujes
Založen: Mar 21, 2006 Příspěvky: 34338 Bydliště: Bratislava
Zaslal: čt červen 18 2015, 21:16 Předmět:
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.
Založen: Jun 14, 2003 Příspěvky: 2805 Bydliště: Blížejov
Zaslal: čt červen 18 2015, 21:33 Předmět:
Asi jsem příliš konzervativní, ale já si rád "základní myšlenku" namaluji jako vývojový diagram, nedržím se přesně toho, co jsme se kdysi učili ve škole, ale mám některé "svoje představy a zvyky".
Ale když se někdy k něčemu musím vrátit, podle takového "obrázku" a přiměřeně komentovaného programu se dá něco upravit, zodpovědně změnit...
v tom kódu jsem se dvakrát uklep opraveno... AB1 chtěl bych se zeptat, jak ten zápis bude přesně fungovat?
Když to udělám nějak takto bude vždy přednostní teplota1 a vše ostatní se vykoná, jen když nebude platit teplota1 nebude to pak fungovat, tak že bude pořád aktivní jen teplota1 a ty ostatní to nebude brát v úvahu, protože vždycky bude minimálně jedna část s podmínky teplota1 platit?
Založen: Jul 21, 2006 Příspěvky: 25741 Bydliště: skoro Brno
Zaslal: čt červen 18 2015, 21:36 Předmět:
Mám dojem, že v těch podmínkách v zadání jsou "díry", kde není přesně definovaný výsledek.
Dá se to řešit i tabulkou stavů, logikou and/or atd., ale on si to každej programátor stejně napíše po svým... _________________ 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[?]
Pan Cowley má pravdu. Hrozí drnčení relátek.
Já bych doporučil jeden if rozdělit na dva menší, plus pomocná proměnná.
Potom budeš mít jistotu, že např. v jedné otočce cyklu loop() budeš nastavovat výstupy jen jednou.
kód:
uint8_t stav;
// "if" první, nahazování pomocné proměnné stav
stav=0;
if (teplota1<PRESET1)
{
stav=1;
}
if (teplota2<PRESET2)
{
stav=2;
}
if (teplota3<PRESET3)
{
stav=3;
}
// "if" druhý, nahazování výstupů
if (stav==1)
{
// zapis do vystupu 1
}
else if (stav==2)
{
// zapis do vystupu 2
}
else if (stav==3)
{
// zapis do vystupu 3
}
else
{
// zapis do vystupu 4
}
A co histereze? Pokud ti bude teplota oscilovat třeba kolem těch 28 stupňů, budou relátka cvakat stejně. Já bych pro relátka zavedl pomocnou proměnnou typu boolean, nastavoval ji postupně dle podmínek a první podmínka bude mít automaticky nejnižší prioritu, poslední nejvyšší. Teprve v závěru smyčky nastavit dle stavu proměnné výstup. A samozřejmě nebrat konkrétní teplotu jako hraniční ale nastavovat třeba:
If (teplota1 < 27) rele1=0
If (teplota1 > 28 ) rele1=1
A ve smyčce setup nastavit nějaké počáteční stavy relé.
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
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
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.