Arduino 8 x 8 -as LED mátrix vezérlése Android eszközről



       A dolog úgy kezdődött, hogy elkezdtem Arduino -val foglalkozni, és a Youtube -on bogarászva nagyon megtetszett ez a video:

Arduino LED Matrix controlled over Bluetooth by Android Telephone

       Jó ujjgyakorlatnak gondoltam hogy egyrészt az Arduino -ba, másrészt az Android programozásba belemélyedjek. Itt gyorsan hozzá is teszem, hogy az Android -ot egyelőre csak az App Inventor szintjén kóstolgatom, ami ugye sokak szerint nem egyenlő a programozással. Mindegy, amíg elérem vele a célom és meg tudom valósítani amit szeretnék addig számomra megfelel, nem csinálok presztízskérdést a dologból.

       Kezdjük a hardverrel, ami a következő részekből épül fel:

Talán nem gond ha nem teszek fel kapcsolási rajzot. A kapcsolásról készült képen szerintem látszik minden lényeges dolog:



      A piros és fehér vezetékek a tápok, a zöld-kék-fekete a LED mátrix LOAD, CLK, és DtaIn vezetékei melyek az Arduino 10-11-12 -es portjaira csatlakoznak, a citromsárgán veszi az Arduino a soros adatot a Bluetooth -tól vagyis tulajdonképpen az Android -os eszköztől, a narancssárga pedig egy ellenállás osztóra megy, mely egy 10 és egy 5 kohm -os ellenállásból áll, hogy a HC-06 modul számára az 5V -ot leosztva beállítsa a szükséges 3,3V feszültséget.

      Ezzel a hardver részével meg is volnánk, most jön a szoftver, de ehhez előbb összefoglalnám hogyan is működik a ketyere.

      A cél az volt, hogy az Arduino -hoz kapcsolt 8 x 8 -as LED mátrix LED -jeit vezérelni tudjam Android -ról. Ezt úgy oldottam meg, hogy az Android -os eszközön létrehoztam egy 8 x 8 -as pont mezőt, és figyeltem, hogy a felhasználó melyik pontot érinti meg. Ha valós helyen lett megérintve ( tehát pl. nem két pont között ), akkor azt a pontot átszínezi pirosra, és a koordinátáit, valamint azt a információt hogy kigyújtás történt, elküldi Bluetooth -on keresztül az Arduino -nak, ami ezt véve kigyújtja a LED mátrix megfelelő LED -jét. Ha egy már kigyújtott pontot érint meg a felhasználó, akkor a pontot "eloltja", és az Arduino -nak egy eloltást jelző információt küld, természetesen a pont koordinátáival egyetemben.

      Van még két "extra" funkció. Az egyik az összes LED kioltása, mellyel egy gombnyomásra ( vagy az Android -os eszköz megrázására ) kiolthatjuk az összes LED -et. A másik a szinkron, melyet akkor lehet használni, ha valamiért kommunikációs hiba lép fel, és a LED mátrixon nem az van, ami az Android -os eszközön. Ekkor a Szinkron gomb megnyomásával az Android -os eszköz elküldi az összes pont állapotát, miáltal a két eszköz kijelzése szinkronba kerül.

      Az Android -os képernyőt mutatja a következő kép:



      A szoftverek bemutatását az Android -os alkalmazással kezdem.

      Az alkalmazást App Inventorral készítettem, melyről bővebbet ezen a linken lehet megtudni. Használata erősen leegyszerűsíti az alkalmazások készítését, tulajdonképpen grafikus elemekből lehet "összerakni" a kívánt funkciókat. Ennek a leírásnak nem célja az App Inventor bemutatása. A fejlesztői környezet alapvetően két részből áll. Az egyik a Block editor, melyben az alkalmazásban részt vevő elemeket tudjuk kiválasztani és felparaméterezni. A LED mátrixra vonatkozóan ez a következőképpen néz ki:



      Ehhez szorosan kapcsolódik a Designer felület, ahol lényegében az alkalmazás működését hozzuk létre. Hagyományos megközelítésben ez maga a program. Ezen rész egyik nagy hátránya, hogy az alkalmazások komplexitásának növekedésével egyre áttekinthetetlenebb, és a kommentelési lehetőség is nagyon korlátozott. Ezért képernyő mentéssel szedtem le a programot, és utólag kommenteztem. Íme:



      Remélhetőleg érthető valamennyire :-). Ha érdekel a .aia állomány írj e-mail -t és elküldöm.

      Mint látható, a Bluetooth kommunikáció megvalósítása rém egyszerű. Az alkalmazás használata során a "Bluetooth kapcs." gombot választva egy menüből lehet kiválasztani a kívánt ellenoldali eszközt, mely a mi esetünkben a HC-06:



      Talán a legfontosabb az egészben, hogy milyen adatokat küld ki Bluetooth -on. Minden pont érintéskor ( ill. státuszváltozáskor, hiszen pl. a minden kioltás esetén nem érintünk pontot ) 4 byte -ot küld ki, a következőképpen

Természetesen az Arduiono ezt is várja. Ezzel elérkeztem az Arduino oldali programhoz, ami így néz ki:



Azt hiszem egyáltalán nem bonyolult :-)

Ezzel a végére is értem a leírásnak, remélhetőleg érthető volt. Ha kérdés van szívesen válaszolok e-mail -ben.



JozsBiker, 2015