Vytvoření a spuštění subprogramu

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Wertin1
Příspěvky: 2
Registrován: 21 srp 2017, 11:07
Reputation: 0

Vytvoření a spuštění subprogramu

Příspěvek od Wertin1 » 21 srp 2017, 11:29

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 ;)

zbysek
Site Admin
Příspěvky: 125
Registrován: 22 úno 2017, 15:18
Reputation: 0

Re: Vytvoření a spuštění subprogramu

Příspěvek od zbysek » 21 srp 2017, 12:12

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:

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){..}
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.

Wertin1
Příspěvky: 2
Registrován: 21 srp 2017, 11:07
Reputation: 0

Re: Vytvoření a spuštění subprogramu

Příspěvek od Wertin1 » 21 srp 2017, 13:55

Děkuji za rychlou odpověď, snad bude stačit 😂 Hned se pustím do experimentování 😉

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: Vytvoření a spuštění subprogramu

Příspěvek od petan » 21 srp 2017, 21:12

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.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 50 hostů