Konfigurovateľné stopky - DOMINATOR pre Airsoft | Paintball
V minulosti som na tomto blogu predstavil DOMINATOR, ktorý využíval tlačidlový vstup pre 4 entity, ale aj pôvodnú RFID verziu, ktorá fyzické tlačidlá vymenila za RFID vstup prostredníctvom karty, náramku, alebo kľúčenky s RFID čípom kompatibilného štandardu ISO/IEC 14443-A, ktorý dokáže RFID čítačka NXP RC522 načítať.
![](https://392a561660.cbaul-cdnwnd.com/6b24fd06728cdbacb72a3228f095e765/200000327-d14e3d14e5/dominator_lcd.jpeg?ph=392a561660)
Staršia verzia tlačidlového projektu DOMINATOR pôvodne využívala 4 tlačidlá, pričom umožňovala používateľský vstup pre Tím 1 (RED), Tím 2 (GRE), Rozhodcu a Erasera. Na základe spätnej väzby od hráčov uzrela svetlo svetla obdobná verzia tlačidlového DOMINATOR-a, ktorá využíva v hre iba 2 tlačidlové vstupy pre entity tímov a je rozšírená o rotačný enkóder, ktorý umožňuje interakciu v používateľskom menu a pre zmenu konfigurovateľných údajov, ktoré sa využívajú v logike hry.
Poďme ale pekne poporiadku a na úvod si ukážme hardvérové komponenty z ktorých je projekt zostavený:
- Arduino Uno / Nano / samostatný AVR čip AtMega328P
- LCD znakový displej 16x2 / 20x4
- I2C prevodník pre LCD displej
- 2x tlačidlá (spínacie)
- Rotačný enkóder 360° - napr. KY-040
- 2x LED diódy
- Voliteľný - buzzer (hlásič)
Schéma zapojenia Konfigurovateľného DOMINATOR-a:
![](https://392a561660.cbaul-cdnwnd.com/6b24fd06728cdbacb72a3228f095e765/200000328-d1a81d1a83/Brandon_schematics.png?ph=392a561660)
- Hlavné menu
- Hra DOMINATOR a jej logika
- Konfiguračné podmenu pre jednotlivé veličiny
som využil jednoduchý stavový automat cez funkciu switch(), čím som mohol efektívne používať perifériu, ktorú som chcel a zároveň nepracovať s inou.
![](https://392a561660.cbaul-cdnwnd.com/6b24fd06728cdbacb72a3228f095e765/200000329-1458214584/dominator_code.png?ph=392a561660)
V režime menu sa načítavajú digitálne signály z rotačného enkódera, rovnako tak i v konfiguračných podmenu. V režime hry systém číta iba vstupy z tlačidiel pre tím RED a tím GRE, nereaguje na otáčanie rotačného enkódera, ani jeho tlačidlo. Prostredníctvom systému menu je systém ľahko škálovateľný a rozšíriteľný o rôzne ďalšie položky menu, pridanie nových herných módov, funkcií. Predstavme si bližšie jednotlivé položky menu.
![](https://392a561660.cbaul-cdnwnd.com/6b24fd06728cdbacb72a3228f095e765/200000330-e8544e8546/dominator_code2.png?ph=392a561660)
![](https://392a561660.cbaul-cdnwnd.com/6b24fd06728cdbacb72a3228f095e765/200000331-0416b0416e/dominator_code3.jpg?ph=392a561660)
![](https://392a561660.cbaul-cdnwnd.com/6b24fd06728cdbacb72a3228f095e765/200000332-ac140ac142/dominator_code4.png?ph=392a561660)
![](https://392a561660.cbaul-cdnwnd.com/6b24fd06728cdbacb72a3228f095e765/200000333-8d14b8d14d/dominator_code6.jpeg?ph=392a561660)
V menu i konfiguračných podmenu sú ošetrené hodnoty, ktoré nadobúda enkóder - počítadlo, kedy nie je možné nastaviť hodnotu menšiu ako 0, nenastane ani overflow hodnoty. Nakoľko sa v režime hry overuje dĺžka držania tlačidla, využíva sa cyklus while, ktorý neustále monitoruje hodnotu stavu vstupného GPIO. Programová logika počítadla času musí byť taktiež do tohto cyklu vložená, aby nenastalo zastavenie času.
Nakoľko je Arduino jednojadrová platforma, nedokáže obsluhovať dve slučky / tasky súčasne. V prípade dvojjadrových platforiem, napríklad ESP32 je možné využiť systém taskov - úhloh, ktoré môžu byť pridelené každému jadru a ESP32 tak dokáže obsluhovať obe slučky zároveň.
Shareware verzia obsahuje 30 sekundovú inicializáciu systému (lazy loading) a následne možné testovanie stopiek po maximálny merateľný čas 1 minútu. Stopky prestávajú počítať čas a nereagujú na používateľské tlačidlá od momentu, kedy ktorýkoľvek z týmov dosiahne obsadenie bodu 1 minútu. Z pohľadu konfigurácie v tejto free Shareware verzii je možné konfigurovať iba dobu obsadenia bodu.
V prípade, že si na AVRDUDE neveríte, vyskúšajte XLoader, ktorý umožňuje v jednoduchom grafickom rozhraní vybrať cieľový firmvér, cieľovú platformu a COM port na ktorom sa vaša Arduino doska nachádza. V prípade Arduina Nano s OLD Bootloaderom je nutné prepnúť rýchlosť nahrávania na 57600 baud/s. Pri novších bootloaderoch je podporovaná rýchlosť nahrávania 115200 baud/s.