Obsah:

Arduino HMI pomocí stavových strojů: 9 kroků
Arduino HMI pomocí stavových strojů: 9 kroků

Video: Arduino HMI pomocí stavových strojů: 9 kroků

Video: Arduino HMI pomocí stavových strojů: 9 kroků
Video: AVEVA Edge 2020 2024, Listopad
Anonim
Arduino HMI pomocí stavových strojů
Arduino HMI pomocí stavových strojů

V tomto Instructable vám ukážu, jak pomocí nástrojů YAKINDU Statechart Tools realizovat jednoduché a rozšiřitelné HMI pomocí štítu LCD klávesnice 16x2 pro Arduino.

Konečné stavové stroje (FSM) jsou výkonným návrhovým vzorem pro vývoj komplexních rozhraní HMI (Human Machine Interfaces). Protože se funkčnost HMI může zvýšit, je užitečné použít návrhový vzor jako stavové stroje.

Kompletní příklad je vložen do nástrojů YAKINDU Statechart Tools. Pro kompilaci a blikání v IDE bylo navíc použito Eclipse C ++ IDE pro Arduino Plugin.

Stručná synopse nástrojů YAKINDU Statechart Tools

Pomocí tohoto nástroje je možné vytvářet grafické stavové automaty. Umožňuje uživateli generovat kód C, C ++ nebo Java ze stavového stroje. S tímto přístupem lze model změnit nebo rozšířit a uživatel může jednoduše znovu vygenerovat kód a nemusí psát prostý zdrojový kód.

Zásoby

Díly:

  • Arduino (Uno, Mega)
  • USB kabel
  • Štít klávesnice LCD 16x2

Nástroje:

  • Nástroje YAKINDU Statechart
  • Eclipse C ++ IDE pro Arduino

Krok 1: Hardware

Image
Image

Štít klávesnice LCD lze jednoduše zapojit do Arduina. Má LCD displej 16x2 a navíc má šest tlačítek:

  • Vlevo, odjet
  • Že jo
  • Nahoru
  • Dolů
  • Vybrat
  • (Resetovat)

Je zřejmé, že jich lze použít pět. Klíče jsou zapojeny do děliče napětí a jsou detekovány pomocí pinu A0 v závislosti na napětí. K jejich správné detekci jsem použil software pro odskakování.

Krok 2: Definujte, jak by to mělo fungovat

Ovládání HMI
Ovládání HMI

Aplikace by měla umět tři věci.

  1. Zde chci pomocí tlačítek navigovat mezi pěti stavy: nahoře, uprostřed, dole, doleva a doprava
  2. Stopky Jednoduché stopky, které lze spustit, zastavit a resetovat. Mělo by se zvyšovat každých 100 milisekund
  3. Počítadlo Třetí část obsahuje jednoduché počítadlo nahoru/dolů. Měl by umět počítat kladná čísla a měl by být resetovatelný

Aktivní nabídka (nebo stav) se zobrazí na LCD 16x2 v horním řádku. Ve spodním řádku se zobrazí aplikace (Stav, Časovač nebo Počitadlo). Pro navigaci by mělo být použito levé a pravé tlačítko.

Krok 3: Propojení stavového stroje

Tlačítka budou odstraněna a zapojena do stavového stroje. Mohou být použity jako v událostech ve stavovém stroji. Kromě toho jsou definovány operace pro zobrazení aktuální nabídky. A jsou definovány alespoň dvě proměnné, jedna pro časovač a jedna pro čítač.

rozhraní:

// tlačítka jako vstupní události v události vpravo v události vlevo v události nahoru v události dolů v události vyberte // zobrazení HMI specifické hodnoty operace displayLCDString (hodnota: řetězec, délka: celé číslo, pozice: celé číslo) operace displayLCDInteger (hodnota: celé číslo, pozice: integer) operace clearLCDRow (pozice: integer) internal: // proměnné pro úložiště var cnt: integer var timeCnt: integer = 0

Po vygenerování kódu C ++ musí být události in odstraněny a připojeny k rozhraní. Tento fragment kódu ukazuje, jak to udělat.

Nejprve budou definována tlačítka:

#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5

Pak je definována funkce pro čtení tlačítka. Hodnoty se mohou lišit v závislosti na výrobci štítu LCD.

static int readButton () {int výsledek = 0; result = analogRead (0); if (result <50) {return RIGHT; } if (result <150) {return UP; } if (result <300) {return DOWN; } if (result <550) {return LEFT; } if (result <850) {return SELECT; } vrátit ŽÁDNÝ; }

Na konci budou tlačítka odstraněna. S 80 ms jsem udělal dobré výsledky. Jakmile tlačítko uvolníte, v případě potřeby se zvýší.

int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); zpoždění (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); přestávka; } případ VLEVO: {stateMachine-> raise_left (); přestávka; } případ DOLŮ: {stateMachine-> raise_down (); přestávka; } případ NAHORU: {stateMachine-> raise_up (); přestávka; } případ VPRAVO: {stateMachine-> raise_right (); přestávka; } výchozí: {break; }}}}

Krok 4: Ovládání HMI

Každý stav se používá pro jednu část nabídky. Existují dílčí stavy, ve kterých bude aplikace - například stopky - spuštěna.

S tímto designem lze rozhraní snadno rozšířit. Další nabídky lze jednoduše přidat pomocí stejného designového vzoru. Načíst hodnotu senzoru a zobrazit ji ve čtvrté položce nabídky není žádný velký problém.

Prozatím se jako ovládací prvek používá pouze vlevo a vpravo. Nahoru a dolů ale lze použít i jako rozšíření navigace v hlavní nabídce. K zadání konkrétní položky nabídky bude použito pouze tlačítko pro výběr.

Krok 5: Zpracování států

Zpracovat státy
Zpracovat státy

Nabídka stavů rukojeti se používá pouze jako další příklad navigace. Pomocí nahoru, dolů, doprava nebo doleva lze přepínat mezi stavy. Aktuální stav bude vždy vytištěn na druhém řádku na LCD displeji.

Krok 6: Stopky

Stopky
Stopky

Stopky jsou celkem jednoduché. Zpočátku bude hodnota časovače resetována. Časovač lze spustit pomocí levého tlačítka a přepínat pomocí doleva a doprava. Pomocí nahoru nebo dolů resetujete časovač. Časovač lze také nastavit zpět na nulu pomocí tlačítka výběru dvakrát - opuštění nabídky a opětovné zadání, protože časovač bude nastaven na nulu počátečním zadáním stopek.

Krok 7: Počitadlo

Čelit
Čelit

Přinejmenším je implementován čítač. Zadáním stavu čítače se počítadlo resetuje. Lze jej spustit pomocí jakéhokoli tlačítka, kromě tlačítka pro výběr. Je implementován jako jednoduchý čítač nahoru/dolů, jehož hodnota nesmí být menší než 0.

Krok 8: Simulace

Krok 9: Získejte příklad

IDE si můžete stáhnout zde: YAKINDU Statechart Tools

Jakmile si stáhnete IDE, najdete příklad přes Soubor -> Novinka -> Příklad

Je to zdarma k použití pro fandy, ale můžete také použít 30denní zkušební verzi.

Doporučuje: