## Stavové stroje
[Miroslav "mirek" Biňas](https://bletvaska.github.io)
/ [**Namakaný webinár**](http://www.namakanyden.sk)
## Správanie zariadení
1. ako ETL
2. ako stavový stroj
3. (kombinácia)
![](images/etl.png)
note:
* https://www.fivetran.com/learn/data-pipeline-vs-etl
```
[ extract_data ] --> [ transform_data ] --> [ load_data ]
```
### Konečno-stavový automat
> Konečnými automatmi modelujeme chovanie jednoduchých objektov, ktoré sa môžu nachádzať v **rôznych stavoch** a **prechádzať medzi nimi** na základe vstupu.
notes:
* http://voho.eu/wiki/konecny-automat/
## Príklady použitia
* dvere - otvorené/zatorené
* počítačové hry
* postupnosť obrazoviek
* ovládanie postavy
* výťah, budík, ... - reakcia tlačidiel je iná vzhľadom na to, čo sa s výťahom momentálne deje
[![](images/state-flowchart.png)](https://gameprogrammingpatterns.com/state.html)
notes:
* toto je ukazka pouzitia stavov v pocitacovej hre
* co sa tu deje? co mi viete povedat o tomto obrazku?
* jednotlive stavy postavy
* prechod medzi stavmi je stlacenim prislusnej klavesy
## Diagram stavov
![](images/state.machine-turnstile.jpg)
notes:
* stavove stroje vieme jednoducho vizualizovat pomocou diagramov stavov/statovych diagramov
* sklada sa z dvoch komponentov
* stav - elipsa
* prechod medzi stavmi - orientovana sipka
## Návrhový vzor Stav
[![](images/state.pattern.png)](https://refactoring.guru/design-patterns/state)
notes:
* https://refactoring.guru/design-patterns/state
![](images/night.light.gif)
### [Nočné svetlo s detekciou pohybu](https://randomnerdtutorials.com/build-a-night-security-light-with-arduino/)
(prípadová štúdia bez použitia prerušení)
[![](images/citron.base.board.jpg)](https://rpishop.cz/pico-karty/3854-cytron-maker-pi-pico-base-deska-pro-pi-pico-pro-zacatecniky.html)
## [Let's Code!](https://excalidraw.com)
## Ďalšie stavy
* `Factory Reset` - uvedenie zariadenia do výrobných nastavení
* `Error` - stav, do ktorého sa zariadenie dostane pri vzniku chyby
* `Sleep` - prechod do režimu spánku
* `Alarm` - poplach, ak došlo k pohybu
* `EcoMode` - pred vypnutím prejsť do úsporného režimu
## Aké to má výhody?
* zjednodušenie logiky programu
* jednoduchá rozšíriteľnosť
* modularita
* testovanie
* efektívne spracovanie udalostí
## Odkazy
* výsledný projekt: [slution.zip](src/solution.zip), [modified.zip](src/modified.zip)
* [Arduino Day 2021](http://namakanyden.sk/2021/arduinoday/): Ako organizovať svoj kód (lepšie)
* [Namakaný webinár #38](http://namakanyden.sk/webinare/): [Bitka stavov robustných konečných automatov](http://namakanyden.sk/webinars/2022.08-statove.automaty.html)
![qr code](https://api.qrserver.com/v1/create-qr-code/?data=https://bit.ly/4i00P87&size=300x300)
(**https://bit.ly/4i00P87**)