První věc co bych udělal já, tak bych se na celé arduino vy... a psal to normálně v C.Mr. MR píše: ↑7. 10. 2020, 7:18 Jde mi o to, že chci pomocí arduina dělat více věcí současně a pochopil jsem, že správný přístup je OOP. Právě že mi taky přijde, že je OOP na to co potřebuju overkill. Chtěl bych měřit teplotu, tu vyhodnotit pomocí PID a topit, současně hlídat tlačítka a několik čidel. Všechno pak ještě v nějakém časovém plánu.
Řeknu příklad:
přístroj je zapnutý,
tlačítkem odstartuju program,
zapne se topení s PID,
až dojde k ustálení teploty zapnu další věci, většinou s různým spožděním,
pomocí čidel sleduju probíhající proces
pokud nastane chyba proces ukončím
pokud stisknu tlačítko, proces ukončím
proces po ukončení stále potřebuje dochlazení, takže je stále co hlídat
o všech procesech informace na LCD
Nechci se utopit v kilometrovém kódu, proto bych chtěl oddělit jednotlivé úkoly a proměnné.
Chtěl bych mít PID extra, časování jednotlivých procesů extra, informace na LCD extra, a ještě by bylo fajn mít možnost si pro odladění vypisovat data na seriový port, abych věděl, jak se co chová. Zkusil jsem, že hodně jde udělat s funkcemi, nicméně z funkce nedostanu více, než jednu proměnnou (mám na to použít struktury?).
Hodně také pomáhají záložky, kdy si kód rozdělím - každou funkci na jednu záložku. Navíc se mi líbí myšlenka, že si v jednom programu "vymazlím" třeba to PID, a pak to budu používat v různých projektech a nebudu do toho už muset rýt, prostě jen zadám, odkud bere informace o teplotě, kterým pinem spíná topení a odladím si konstanty. Děsím se, že bych musel neustále kvůli drobnostem procházet celý kód. Navíc jedntlivé funkce budu přidávat postupně a chtěl bych je mít odladěné, optimálně kažkou zvlášť.
Vymýšlím blbost? Jak se to dělá správně?
Pokud seš šikovnej programátor, hodně věcí lze pořešit v jednom hlavním vlákně nebo přerušení pomocí stavových automatů. Tento princip používá například Quantum Leap Rtos.
Někdy je ale těžké napsat algoritmus tak aby nezdržoval a ještě byl solidně čitelný (programátorsky) a tak je lepší to spouštět v samostatných vláknech.
I taková ATMEGA zvládne v pohodě multitasking.