Dobrý den, programuji termostat k ovládání tepelného čerpadla. Jde to samozřejmě lehce udělat přes dlouhý loop plný podmínek , ale já bych spíše uvítal několik menších kódů, které by se vzájemně spouštěly. Uvedu příklad: 1. kód by jen kontroloval teplotu v místnosti a teplotu TUV a pokud by nějaká z nich klesla pod danou úroveň, spustil by se příslušný kód. Ten by zapnul tepelné čerpadlo a zase by kontroloval až teplota překročí danou mez. Až by se tak stalo, spustil by 1. kód a ukončil by se.
Hledal jsem, ale nic mi příslušnou odpověď nedalo. Stačil by mi příkaz a zbytek už bych snad dohledal. Děkuji za Vaše rady, tipy a ztracený čas
Vytvoření a spuštění subprogramu
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Re: Vytvoření a spuštění subprogramu
Dobrý den,
jestli myslíte subprogram jako samostatný malý program, tak s tím na Arduinu neuspějete. Běh více programů najednou neumí. Vše musíte napsat do jednoho programu.
Vaším řešením bude spíše hezčí struktura tohoto programu. Na to se hodí mít program rozdělený do funkcí podle toho, jakou činnost vykonávají.
Takto si program rozdělíte do logických celků, které budete volat v rámci funkce loop. Tedy naznačím:
O funkcích jsem psal zde: https://arduino.cz/uzivatelsky-definovane-funkce-2/
Pokud byste chtěl, aby tyto funkce běžely zdánlivě souběžně, jsou způsoby, jak toho dosáhnout, ale už je to celkem pokročilé. Píše o tom třeba Petr Stehlík na blogu: http://joysfera.blogspot.cz/2015/03/tas ... duinu.html V případě, který popisujete by to ale nemělo být potřeba.
jestli myslíte subprogram jako samostatný malý program, tak s tím na Arduinu neuspějete. Běh více programů najednou neumí. Vše musíte napsat do jednoho programu.
Vaším řešením bude spíše hezčí struktura tohoto programu. Na to se hodí mít program rozdělený do funkcí podle toho, jakou činnost vykonávají.
Takto si program rozdělíte do logických celků, které budete volat v rámci funkce loop. Tedy naznačím:
Kód: Vybrat vše
void setup(){}
void loop(){
fce1();
if(fce2()) fce3();
else fce5(fce4());
}
void fce1(){...}
boolean fce2(){...}
void fce3(){...}
int fce4(){...}
void fce5(int x){..}
Pokud byste chtěl, aby tyto funkce běžely zdánlivě souběžně, jsou způsoby, jak toho dosáhnout, ale už je to celkem pokročilé. Píše o tom třeba Petr Stehlík na blogu: http://joysfera.blogspot.cz/2015/03/tas ... duinu.html V případě, který popisujete by to ale nemělo být potřeba.
Re: Vytvoření a spuštění subprogramu
Děkuji za rychlou odpověď, snad bude stačit Hned se pustím do experimentování
Re: Vytvoření a spuštění subprogramu
Podprogram je tak nějak funkce. Ideální je si program rozložit na co nejvíc dílčích funkcí (měření teploty, obsluha LEDky, zapnutí něčeho, ...) a pak pomocí podmínek, nebo v nějakém intervalu jednotlivé funkce pouštět.
Můžeš se mrknout na https://www.mylms.cz/text-kusy-kodu-k-arduinu/#delay. Pomocí tohoto kódu si vytvoříš jednotlivé funkce, které se ti budou periodicky spouštět po nastaveném čase. Je zbytečné měřit např. teplotu každou sekundu. Na to stačí třeba minutový interval. Jde v podstatě o to samé, jak napsal výše Zbyšek odkaz na tasker.
Nedoporučuji se u "vnitřních hodin" nějak extra spoléhat na přesnost - třeba to používat k měření času. Co jsem dělal pokus s procesorem SMT32 a DS3231, tak je rozdíl za den cca 8 sekund. Což samozřejmě nemá jakýkoliv vliv na funkci.
Můžeš se mrknout na https://www.mylms.cz/text-kusy-kodu-k-arduinu/#delay. Pomocí tohoto kódu si vytvoříš jednotlivé funkce, které se ti budou periodicky spouštět po nastaveném čase. Je zbytečné měřit např. teplotu každou sekundu. Na to stačí třeba minutový interval. Jde v podstatě o to samé, jak napsal výše Zbyšek odkaz na tasker.
Nedoporučuji se u "vnitřních hodin" nějak extra spoléhat na přesnost - třeba to používat k měření času. Co jsem dělal pokus s procesorem SMT32 a DS3231, tak je rozdíl za den cca 8 sekund. Což samozřejmě nemá jakýkoliv vliv na funkci.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 50 hostů