luger píše: ↑07 pro 2024, 10:52
tak se probírám tím kódem od gilhad. V prvé řadě tam ve while .... chybí závorka:
Já jsem to tušil
luger píše: ↑07 pro 2024, 10:52
Nejvíc mě štve pomalý náběh PIR senzoru. Ten než se "zahřeje" tak to trvá i minutu a mezitím mi tam dělá signálama pěkný bordel. Pak už to funguje pěkně.
Já bych si to ošetření PIR senzoru vytáhnul do samostatné funkce, která by se volala z
loop() nějak rozumně často a updatovala nějakou proměnnou (proměnné)
PIR_stav, s tím, že dokud by se to "nezahřálo", tak by to tam mělo nějakou hodnotu pro "zatím nic" (něco zjevně mimo smysluplný rozsah). A ve vlastním programu bych četl právě tu proměnnou a pokud by tam bylo "zatím nic", tak bych měření nepoužíval a šel jinudy/defaultní cestou.
Takže by v té proměnné vždycky bylo něco správného a pokud bych vymyslel lepší čtení, zjistil, že start trvá déle/je rychlejší nebo něco jiného, tak by se to upravilo jen v té funkci na ošetření senzoru a zbytek by byl pořád stejný.
(Případně by to mohlo během startu místo "zatím nic" mít "vetřelec nedetekován", pokud by to dávalo smysl pro ošetřování stavu v programu, kde něco jen reaguje na přítomnost/nepřítomnost vetřelce - dokud se "nezahřeje", tak žádného vetřelce nevidí, takže nic neřeší. Nebo tak nějak.)
Jinak právě to "rozmotávání" na co nejjednodušší a nejpřehlednější a nezávislé části právě výrazně zjednodušuje přidávání dalších funkcí. Ideálně se z l
oop() volá po sobě mraky kratičkých, časově nenáročných, kousků kódu a není potřeba žádné
delay(), které by blokovalo ostatní části, ale kdekoli je potřeba čekat, tak se tam testují
millis() nebo splnění podmínky a pokud "ještě ne", tak se to přeskočí a vyřizuje se plynule vše ostatní a pak se ta
loop() zopakuje. (Čili běžně se
loop() proběhne mockrát po sobě v zanedbatelném čase aniž by se něco dělalo, dokud se nenajde něco, na co je třeba reagovat. Arduino neumí "nedělat nic", takže čekání je stejně náročné (a stejně dělané) jako točení se ve smyčce.)