![Digitális óra Arduino -n véges állapotú gép használatával: 6 lépés Digitális óra Arduino -n véges állapotú gép használatával: 6 lépés](https://i.howwhatproduce.com/images/001/image-719-56-j.webp)
Tartalomjegyzék:
2025 Szerző: John Day | [email protected]. Utoljára módosítva: 2025-01-23 14:47
![Digitális óra az Arduino -n véges állapotú gép használatával Digitális óra az Arduino -n véges állapotú gép használatával](https://i.howwhatproduce.com/images/001/image-719-57-j.webp)
Sziasztok, megmutatom, hogyan hozható létre digitális óra a YAKINDU Statechart Tools segítségével, és hogyan futtatható egy Arduino -n, amely LCD billentyűpajzsot használ.
A digitális óra eredeti modelljét David Hareltől vették. Közölt egy dokumentumot a
"[…] Az állami gépek és állapotdiagramok hagyományos formalizmusának széles körű kiterjesztése."
Ebben a dolgozatban a digitális óra példáját használta kutatásaihoz. Inspirációként használtam, és újratelepítettem az órát a YAKINDU Statechart Tools segítségével (egy eszköz az állapotgépek grafikus modelljeinek létrehozásához és a C/C ++ kód létrehozásához), és életre keltettem egy Arduino -n.
Kellékek
Hardver:
- Arduino Uno vagy Mega
- LCD billentyűpajzs
Szoftver:
- YAKINDU Állapotjelző eszközök
- Eclipse C ++ IDE az Arduino számára
1. lépés: A digitális óra működése
![Image Image](https://i.howwhatproduce.com/images/001/image-719-59-j.webp)
![](https://i.ytimg.com/vi/hGVFFpz9Mgs/hqdefault.jpg)
Kezdjük azzal, hogy meghatározzuk a digitális óra működését. Emlékszel ezekre … tegyük fel, hogy „rendkívül klassz” digitális órák, amelyekkel mindenki rendelkezett még a 90 -es években? Beépített stopper, különböző riasztók és bosszantó hangjelzés minden teljes órában. Ha nem, nézze meg: a 90 -es évek digitális órája.
Tehát alapvetően ez egy konfigurálható óra, különböző módokkal. Főként az aktuális idő jelenik meg, de vannak más funkciók is. Bemenetként van be- és kikapcsolás, üzemmód és beállító gomb. Ezenkívül be- és kikapcsolhatja a lámpát. A mód gombbal megkülönböztetheti az üzemmódokat, és aktiválhatja/letilthatja az óra funkcióit:
- Az idő megjelenítése (óra)
- A dátum megjelenítése (Dátum)
- Riasztás beállítása (1. riasztás, 2. riasztás)
- Harangszó engedélyezése/letiltása (Harangszó beállítása)
- A stopper használata (Stopper)
A menükben a be/ki gombbal konfigurálhatja az üzemmódot. A set gomb lehetővé teszi az idő beállítását - pl. az órához vagy az ébresztőkhöz. A stopper a fény be- és kikapcsolása gombbal vezérelhető - indítható és leállítható. Használhat integrált körszámlálót is
Ezenkívül van egy csengő, amely minden teljes órában harangozik, és integrált szabályozható háttérvilágítás. Első lépésben nem kötöttem őket az Arduino -hoz.
2. lépés: Az állapotgép
![LCD billentyűpajzs LCD billentyűpajzs](https://i.howwhatproduce.com/images/001/image-719-60-j.webp)
Nem akarom részletezni a példa magyarázatát. Nem azért, mert túl bonyolult, csak egy kicsit túl nagy. Megpróbálom elmagyarázni a működésének alapgondolatát. A végrehajtásnak magától értetődőnek kell lennie, ha megnézi a modellt, vagy letölti és szimulálja. Az állapotgép egyes részei alrégiókban összegződnek, például a beállított időrégió. Ezzel biztosítani kell az állapotgép olvashatóságát.
A modell két részre oszlik - egy grafikusra és egy szövegesre. A szöveges részben az eseményeket, változókat stb. Határozzák meg. A grafikus részben - az állapotdiagramban - a modell logikai végrehajtása van megadva. A megadott viselkedésnek megfelelő állapotgép létrehozásához bizonyos bemeneti eseményekre van szükség, amelyek használhatók a modellben: onoff, set, mode, light és light_r. A definíció szakaszban egy belső eseményt használunk, amely 100 ms -onként növeli az időértéket:
100 ms / alkalommal += 1
A 100 ms -os lépések alapján az aktuális időt ÓÓ: HH: SS formátumban kell kiszámítani:
kijelző.első = (idő / 36000) % 24;
display.second = (idő / 600) % 60; display.third = (idő / 10) % 60;
Az értékek az updateLCD művelet használatával minden alkalommal bekapcsolódnak az LCD kijelzőre, amikor az állapotgépet meghívják:
display.updateLCD (display.first, display.second, display.third, display.text)
Az állapotgép alapvető végrehajtását már a Digitális óra működése című szakasz határozza meg. Az eszközön belül néhány "speciális" modellezési elemet használtam, mint például a CompositeState, a History, az Aldiagramok, az ExitNodes stb. Részletes leírás a Felhasználói útmutatóban található.
3. lépés: LCD kezelőpajzs
Az LCD billentyűpajzs nagyon jó az egyszerű projektekhez, amelyekhez képernyő szükséges a megjelenítéshez és néhány gomb bemenetre - tipikus, egyszerű HMI (Human Machine Interface). Az LCD billentyűpajzs öt felhasználói gombot és egy másikat tartalmaz a visszaállításhoz. Az öt gomb együttesen az Arduino A0 érintkezőjéhez van csatlakoztatva. Mindegyik feszültségosztóhoz van csatlakoztatva, amely lehetővé teszi a gombok megkülönböztetését.
Az analogRead (0) segítségével megtalálhatja a konkrét értékeket, amelyek természetesen eltérhetnek a gyártótól. Ez az egyszerű projekt megjeleníti az aktuális értéket az LCD -n:
#include "Arduino.h"
#include "LiquidCrystal.h" LiquidCrystal lcd (8, 9, 4, 5, 6, 7); void setup () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("Mért érték"); } void loop () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); késleltetés (200); }
Ezek a mért eredményeim:
- Nincs: 1023
- Válasszon: 640
- Balra: 411
- Le: 257
- Fel: 100
- Helyes: 0
Ezekkel a küszöbértékekkel lehet olvasni a gombokat:
#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5 static int readButton () {int result = 0; eredmény = analógRead (0); if (eredmény <50) {return RIGHT; } if (eredmény <150) {return UP; } if (eredmény <300) {return DOWN; } if (eredmény <550) {return LEFT; } if (eredmény <850) {return SELECT; } vissza NINCS; }
4. lépés: Az állapotgép illesztése
![Az állami gép illesztése Az állami gép illesztése](https://i.howwhatproduce.com/images/001/image-719-61-j.webp)
Az állapotgép generált C ++ kódja interfészeket biztosít, amelyeket az állapotgép vezérléséhez végre kell hajtani. Az első lépés az események összekapcsolása a billentyűpajzs billentyűivel. Már mutattam, hogyan kell olvasni a gombokat, de az állapotgéphez való illesztéshez szükség van a gombok lekapcsolására - ellenkező esetben az események többször is felmerülnek, ami kiszámíthatatlan viselkedést eredményez. A szoftver -visszavonás fogalma nem új. Megnézheti az Arduino dokumentációját.
A megvalósításom során leeső élt észlelek (a gomb felengedése). Elolvastam a gomb értékét, várok 80 ms -ot (jobb eredményt kaptam 80 helyett 50 helyett), elmentettem az eredményt és elolvastam az új értéket. Ha a oldResult nem volt NINCS (nincs megnyomva), és az új eredmény NINCS, tudom, hogy a gombot korábban megnyomták, és most elengedték. Ezután felvetem az állapotgép megfelelő bemeneti eseményét.
int oldState = NINCS; static void raiseEvents () {int buttonPressed = readButton (); késleltetés (80); oldState = gomb megnyomva; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button ()-> raise_mode (); szünet; } eset BALRA: {stateMachine-> getSCI_Button ()-> raise_set (); szünet; } eset LE: {stateMachine-> getSCI_Button ()-> raise_light (); szünet; } case UP: {stateMachine-> getSCI_Button ()-> raise_light_r (); szünet; } case JOBB: {stateMachine-> getSCI_Button ()-> raise_onoff (); szünet; } alapértelmezett: {break; }}}}
5. lépés: A dolgok összekapcsolása
A fő program három részből áll:
- Az államgépezet
- Egy időzítő
- A kijelzőkezelő (tipikus lcd.print (…))
DigitalWatch* stateMachine = új DigitalWatch (); CPPTimerInterface* timer_sct = új CPPTimerInterface (); DisplayHandler* displayHandler = új DisplayHandler ();
Az állapotgép kijelzőkezelőt használ, és kapott egy időzítőt, amelyet frissíteni fognak az időzített események vezérlésére. Ezt követően az állapotgép inicializálódik és belép.
void setup () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateGép-> init (); stateMachine-> enter (); }A hurok három dolgot tesz:
- Emelje fel a beviteli eseményeket
- Számítsa ki az eltelt időt és frissítse az időzítőt
- Hívja fel az állami gépet
hosszú aktuális_idő = 0; hosszú utolsó_ciklusidő = 0; void loop () {raiseEvents (); last_cycle_time = aktuális_idő; aktuális_idő = millis (); timer_sct-> updateActiveTimer (állapotGép, aktuális_idő - utolsó_ciklusidő); stateMachine-> runCycle (); }
6. lépés: Szerezze meg a példát
Ez az. Valószínűleg nem említettem a megvalósítás minden részletét, de megnézheti a példát, vagy megjegyzést írhat.
A példa hozzáadása egy futó IDE -hez:
> Az IDE letölthető innen <<
Kezdheti egy 30 napos próbaidőszakkal. Ezt követően licencet kell szereznie, amely nem kereskedelmi használatra ingyenes!
Ajánlott:
Analóg óra és digitális óra készítése LED csíkkal az Arduino használatával: 3 lépés
![Analóg óra és digitális óra készítése LED csíkkal az Arduino használatával: 3 lépés Analóg óra és digitális óra készítése LED csíkkal az Arduino használatával: 3 lépés](https://i.howwhatproduce.com/images/002/image-3577-j.webp)
Hogyan készítsünk analóg órát és digitális órát LED csíkkal az Arduino használatával: Ma analóg órát készítünk & Digitális óra LED szalaggal és MAX7219 Dot modul Arduino -val. Ez korrigálja az időt a helyi időzónával. Az analóg óra hosszabb LED csíkot használhat, így a falra akasztva műalkotássá válhat
Arduino digitális óra a DS1302 használatával: 4 lépés
![Arduino digitális óra a DS1302 használatával: 4 lépés Arduino digitális óra a DS1302 használatával: 4 lépés](https://i.howwhatproduce.com/images/003/image-6112-j.webp)
Arduino digitális óra a DS1302 használatával: Bevezetés Helló srácok, remélem, mindannyian remekül csináljátok. Ez egy rövid és egyszerű projekt lesz arról, hogyan lehet digitális órát készíteni az Arduino segítségével. Ebben a projektben digitális órát készítünk az Arduino és a műszakregiszter segítségével. Ez
Véges állapotú gép MSP430 -on: 6 lépés
![Véges állapotú gép MSP430 -on: 6 lépés Véges állapotú gép MSP430 -on: 6 lépés](https://i.howwhatproduce.com/images/011/image-31343-j.webp)
Véges állapotú gép MSP430 -on: Megmutatom, hogyan programozhat egy MSP430G2 indítópadot véges állapotú gépekkel (FSM) a YAKINDU Statechart Tools segítségével közvetlenül a Texas Instruments Code Composer Studio -ban. Ez az oktatóanyag hat lépést tartalmaz: A YAKINDU Statechart Tools telepítése
Digitális óra az Arduino és a Led Dot Matrix kijelző használatával: 6 lépés
![Digitális óra az Arduino és a Led Dot Matrix kijelző használatával: 6 lépés Digitális óra az Arduino és a Led Dot Matrix kijelző használatával: 6 lépés](https://i.howwhatproduce.com/images/012/image-33373-j.webp)
Digitális óra az Arduino és a Led Dot Matrix kijelző használatával: Manapság a gyártók, fejlesztők az Arduino -t részesítik előnyben a projektek prototípusainak gyors fejlesztése érdekében. Az Arduino egy nyílt forráskódú elektronikai platform, amely könnyen használható hardverre és szoftverre épül. Az Arduino nagyon jó felhasználói közösséggel rendelkezik. Ebben a projektben
Egyszerű digitális óra az Arduino Nano és a DS1307 használatával: 4 lépés
![Egyszerű digitális óra az Arduino Nano és a DS1307 használatával: 4 lépés Egyszerű digitális óra az Arduino Nano és a DS1307 használatával: 4 lépés](https://i.howwhatproduce.com/images/001/image-2220-15-j.webp)
Egyszerű digitális óra az Arduino Nano és a DS1307 használatával: Ebben a cikkben bemutatok egy oktatóanyagot, amellyel digitális órát készíthet az Arduino segítségével. nézze meg a kijelzőt. mielőtt belépne az oktatóanyagba, javaslom, hogy