Egy nem szabványos firmata elkészítését tűztem ki célul. A feladatba annak kapcsán botlottam bele, hogy kaptam egy 4×7-es kijelzőt a vásárolt csomagomban, és megpróbáltam node.js segítségével használni. De nagyon villogtak a ledek és befagyott egy idő után. Ekkor próbálkoztam az arduino által javasolt Processinggel, de ugyanúgy villogott továbbra is, viszont már nem fagyott. Ekkor gondoltam arra hogy belepiszkálok valamelyik firmata programba. A probléma megértése végett megpróbálom felvázolni a kijelző működését: A kijelző 4 értékből áll, hívjuk ezeket digitnek, és digitenként 8 LED található (7 + “.”). Vannak másfajta kijelzők is, de én ebben a csomagban ilyet kaptam. A kijelzőnek 12 lába van, melyből 8 a ledeket vezérli és a maradék 4-el lehet a digiteket ki be kapcsolni. Mivel az emberi szem nem képes érzékelni a túl gyors változást, így megfelelő sebességgel változtatva a kijelző digitjeinek ki és be kapcsolását, olybá tűnik mintha a kijelző folyamatosan világítana. Egy példán keresztül talán könnyebb megérteni. Legyen mondjuk a 2871-es szám, amit kiírnánk.

Az ábrán látható módon az első körben az “a” ledet világítjuk meg, de előtte beállítjuk a digitek kapcsolóját. A 2-es számhoz tartozik “a” led, ezért az első digitet bekapcsoljuk, a “8”-as számnál is a “7”-es számnál is, de az “1” számnál nem. Így a 4 digit állapota 1110. Ezután megvilágítjuk az “a” ledet, a következő körben ugyanezt végigvesszük a “b” leddel is (persze előtte kikapcsoljuk az “a” ledet) és így tovább. Ha ezt elég gyorsan tesszük, és folyamatosan ismételjük, akkor úgy látjuk mintha egyszerre világítana az összes led. De ez a folyamatosság nem igazán sikeres ha egy számítógép vezérli a műveletet (node.js, processing), de ha feltöltjük a programot az Arduinora, akkor máris folyamatosnak látjuk. Igen ám, de ez utóbbi esetben meg nem tudjuk a számítógépről vezérelni a kijelzőt. Ezért gondoltam arra, hogy valahogy át kellene küldeni a számot az Arduinonak, ami majd folyamatosan kiteszi a kijelzőre. Ha másik számot küldök, akkor változik a kijelző. Egy külön fileba tettem a magát a vezérlést. Itt nincs más dolgunk mint beállítani a “lights” tömb változóba a megfelelő értékeket. Ehhez segítségképp van egy setLights() függvény, ami már egy karakterláncot vár (pl: “1.234”). Van még egy lcd_setup() és egy lcd_loop(). Az elsővel beállítjuk a csatlakozók kiosztását, a másikat pedig folyamatosan újra és újra le kell majd futtatnunk. A firmata a szabványos STRING_DATA protokolon keresztül vezérli az eszközt A firmata a sysexCallback függvény egyes részeit átvette a standardFirmata meghajtóból, mert nekem úgy tűnik hogy a node.js firmata csomagja a csatlakozásnál használja ezeket. Ezek nélkül nem jönne létre a kapcsolat. A firmata része még a string kezelés és a kapcsolódó függvények különböző pontokról történő meghívása. Teszteléshez a node.js firmata csomagját használtam, mely megtalálható a githubon: https://github.com/nova76/Arduino4x7segment

4x7segment.fzz – kapcsolási rajz.
4x7segment.png – ábrák
4x7segmentSerial.ino – Arduino program soros kommunikációval.
4x7segmentSimple1234.ino – egyszerű Arduino program, ami kiirja az 1234-as számot
4x7segment.js – node.js StandardFirmata használatával
4x7segmentProcessing.pde – processinggel készített verzió (StandardFirmata)
ardu4x7segmentFirmata – a cikkben jelzett firmata
4x7segmentFirmataTest.js – és node.js teszt ehhez a firmatához.