Tartalomjegyzék:
- Kellékek
- 1. lépés: A hardver
- 2. lépés: Határozza meg, hogyan kell működnie
- 3. lépés: Az állapotgép illesztése
- 4. lépés: HMI vezérlés
- 5. lépés: Az állapotok kezelése
- 6. lépés: Stopper
- 7. lépés: Számláló
- 8. lépés: Szimuláció
- 9. lépés: Szerezze meg a példát
Videó: Arduino HMI állapotgépek használatával: 9 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:41
Ebben az utasításban megmutatom, hogyan használhatod a YAKINDU Statechart Tools eszközöket egy egyszerű és bővíthető HMI megvalósításához az Arduino 16x2 LCD billentyűzetpajzsának használatával.
A Finite State Machines (FSM) erőteljes tervezési minta a komplex emberi gépi interfészek (HMI) kifejlesztéséhez. Mivel a HMI funkcionalitása növekedhet, hasznos olyan tervezési mintát használni, mint az állapotgépek.
A teljes példa a YAKINDU Statechart Tools -ba van ágyazva. Ezenkívül az Eclipse C ++ IDE for Arduino Plugin programot fordították és villogták az IDE -ben.
A YAKINDU Statechart Tools rövid összefoglalója
Ezzel az eszközzel grafikus állapotgépeket lehet létrehozni. Lehetővé teszi a felhasználó számára, hogy C, C ++ vagy Java kódot generáljon az állapotgépről. Ezzel a megközelítéssel a modell megváltoztatható vagy kibővíthető, és a felhasználó egyszerűen újragenerálhatja a kódot, és nem kell egyszerű forráskódot írnia.
Kellékek
Alkatrészek:
- Arduino (Uno, Mega)
- USB kábel
- 16x2 LCD billentyűpajzs
Eszközök:
- YAKINDU Állapotjelző eszközök
- Eclipse C ++ IDE az Arduino számára
1. lépés: A hardver
Az LCD billentyűpajzs egyszerűen csatlakoztatható az Arduino -hoz. 16x2 LCD kijelzővel és hat nyomógombbal rendelkezik:
- Bal
- Jobb
- Fel
- Le
- Válassza a lehetőséget
- (Visszaállítás)
Nyilvánvaló, hogy öt közülük használható. A kulcsok feszültségosztóhoz vannak kötve, és a feszültség függvényében az A0 érintkező segítségével észlelhetők. Szoftveres visszalépést használtam a helyes észleléshez.
2. lépés: Határozza meg, hogyan kell működnie
Az alkalmazásnak három dologra kell képesnek lennie.
- Itt szeretném a gombokkal navigálni öt állapot között: Felső, Középső, Alsó, Bal és Jobb
- Stopper Egy egyszerű stopper, amely elindítható, leállítható és visszaállítható. Ezt 100 milliszekundumonként növelni kell
- A harmadik rész egy egyszerű fel/le számlálót tartalmaz. Képesnek kell lennie a pozitív számok számítására, és vissza kell állítani
Az aktív menü (vagy az állapot) megjelenik a felső sor 16x2 -es LCD kijelzőjén. Az alkalmazás (állapot, időzítő vagy számláló) megjelenik az alsó sorban. A navigációhoz a bal és a jobb nyomógombot kell használni.
3. lépés: Az állapotgép illesztése
A gombok kikapcsolnak, és az állapotgéphez csatlakoznak. Használhatók, mint az állapotgép eseményeiben. Ezenkívül a műveletek az aktuális menü megjelenítésére vannak definiálva. És legalább két változó van megadva, az időzítő és a számláló.
felület:
// gombok, mint bemeneti események az eseményben jobb, ha az események balra, eseményekben fel, események lefelé, eseményválasztásban // HMI -specifikus értékek megjelenítése művelet kijelző LCDString (érték: karakterlánc, hossz: egész szám, pozíció: egész szám) művelet kijelző LCDInteger (érték: egész szám, pozíció: egész szám) művelet clearLCDRow (pozíció: egész) belső: // tároló változók
A C ++ kód generálása után az in eseményeket le kell kapcsolni, és be kell vezetni az interfészbe. Ez a kódrészlet megmutatja, hogyan kell ezt megtenni.
Először a gombokat határozzák meg:
#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5
Ezután egy funkció van definiálva a gomb olvasásához. Az értékek az LCD pajzs gyártójától függően eltérőek lehetnek.
static int readButton () {int eredmény = 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; }
A végén a gombok kikapcsolnak. 80 ms -tal jó eredményeket értem el. Ha egy gombot elengednek, az adott esetben felemeli a megfelelő értéket.
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-> raise_select (); szünet; } eset BALRA: {stateMachine-> raise_left (); szünet; } eset LE: {stateMachine-> raise_down (); szünet; } case UP: {stateMachine-> raise_up (); szünet; } case JOBB: {stateMachine-> raise_right (); szünet; } alapértelmezett: {break; }}}}
4. lépés: HMI vezérlés
Mindegyik állapot a menü egy részéhez használható. Vannak olyan alállapotok, ahol az alkalmazást - például a stopperórát - végrehajtják.
Ezzel a kialakítással a felület könnyen bővíthető. További menük egyszerűen hozzáadhatók ugyanazzal a tervezési mintával. Egy érzékelő értékének leolvasása és megjelenítése a negyedik menüpontban nem nagy dolog.
Egyelőre csak a bal és a jobb oldali használható vezérlőként. De fel és le is használható navigációs kiterjesztésként a főmenüben. Csak a kiválasztás gombbal lehet belépni egy adott menüpontba.
5. lépés: Az állapotok kezelése
A fogantyú állapot menü csak a navigáció további példájaként szolgál. A fel, le, jobbra vagy balra való váltás lehetővé teszi az állapotok közötti váltást. Az aktuális állapot mindig megjelenik az LCD kijelző második sorában.
6. lépés: Stopper
A stopper meglehetősen egyszerű. Kezdetben az időzítő értéke visszaáll. Az időzítőt a bal gombbal lehet elindítani, a bal és a jobb gombbal pedig váltani. A fel vagy le gombokkal visszaállíthatja az időzítőt. Az időzítőt a kiválasztó gomb kétszeri használatával is vissza lehet állítani nullára - kilépve a menüből és ismét belépve, mivel az időzítőt a stopper kezdeti bevitelével nullára állítják.
7. lépés: Számláló
Legalább van egy számláló megvalósítva. A számláló állapotba való belépés visszaállítja a számlálót. Bármely nyomógombbal elindítható, kivéve a kiválasztó gombot. Egyszerű fel/le számlálóként van megvalósítva, amelynek értéke nem lehet kisebb 0 -nál.
8. lépés: Szimuláció
9. lépés: Szerezze meg a példát
Az IDE -t innen töltheti le: YAKINDU Statechart Tools
Miután letöltötte az IDE -t, megtalálja a példát a Fájl -> Új -> Példa segítségével
A hobbisták számára ingyenesen használható, de 30 napos próbaverziót is használhat.
Ajánlott:
Intelligens, szép és Coolmay HMI az Arduino számára: 3 lépés
Intelligens, szép és Coolmay HMI az Arduino számára: Ez a legújabb mini-érintőképernyő, amelyet egy Arduino kártya vezérlésére vásároltam Modbus TCP kommunikáció alatt
A gyorsulás felügyelete a Raspberry Pi és az AIS328DQTR használatával Python használatával: 6 lépés
A gyorsulás nyomon követése a Raspberry Pi és az AIS328DQTR használatával Python használatával: A gyorsulás véges, azt hiszem, a fizika egyes törvényei szerint.- Terry Riley A gepárd elképesztő gyorsulást és gyors sebességváltozásokat használ üldözés közben. A leggyorsabb lény a parton időnként kihasználja csúcssebességét a zsákmány elkapására. Az
Neopixel Ws2812 Rainbow LED izzás M5stick-C - Szivárvány futtatása a Neopixel Ws2812 készüléken az M5stack M5stick C használatával Arduino IDE használatával: 5 lépés
Neopixel Ws2812 Rainbow LED izzás M5stick-C | Szivárvány futása a Neopixel Ws2812-en az M5stack M5stick C használatával Arduino IDE használatával: Sziasztok, srácok, ebben az oktatási útmutatóban megtanuljuk, hogyan kell használni a neopixel ws2812 LED-eket, vagy led szalagot vagy led mátrixot vagy led gyűrűt m5stack m5stick-C fejlesztőtáblával Arduino IDE-vel, és elkészítjük szivárványos mintát vele
RF 433MHZ rádióvezérlés HT12D HT12E használatával - Rf távirányító készítése HT12E és HT12D használatával 433 MHz -en: 5 lépés
RF 433MHZ rádióvezérlés HT12D HT12E használatával | Rf távirányító létrehozása HT12E és HT12D használatával 433 MHz -en: Ebben az oktatóanyagban megmutatom, hogyan készítsünk RADIO távirányítót a 433 MHz -es adó vevőmodul használatával HT12E kódolással & HT12D dekódoló IC. Ebben az utasításban nagyon olcsó komponenseket küldhet és fogadhat, mint például: HT
Vezeték nélküli távirányító 2,4 GHz -es NRF24L01 modul használatával Arduino - Nrf24l01 4 csatorna / 6 csatornás adó vevő négykópás - Rc Helikopter - Rc sík az Arduino használatával: 5 lépés (képekkel)
Vezeték nélküli távirányító 2,4 GHz -es NRF24L01 modul használatával Arduino | Nrf24l01 4 csatorna / 6 csatornás adó vevő négykópás | Rc Helikopter | Rc sík Arduino használatával: Rc autó működtetése | Quadcopter | Drone | RC sík | RC csónak, mindig szükségünk van vevőre és adóra, tegyük fel, hogy az RC QUADCOPTER esetében szükségünk van egy 6 csatornás adóra és vevőre, és az ilyen típusú TX és RX túl költséges, ezért készítünk egyet