Obsah:

HMI Arduino pomocou stavových strojov: 9 krokov
HMI Arduino pomocou stavových strojov: 9 krokov

Video: HMI Arduino pomocou stavových strojov: 9 krokov

Video: HMI Arduino pomocou stavových strojov: 9 krokov
Video: Вебинар по северным странам от KUKA cell4_production_ Svenska 2024, November
Anonim
Arduino HMI pomocou stavových strojov
Arduino HMI pomocou stavových strojov

V tomto návode vám ukážem, ako pomocou nástrojov YAKINDU Statechart Tools realizovať jednoduché a rozšíriteľné rozhranie HMI pomocou štítu klávesnice LCD 16x2 pre Arduino.

Konečné stavové stroje (FSM) sú výkonným návrhovým vzorom na vývoj komplexných rozhraní človek -stroj (HMI). Pretože sa funkčnosť HMI môže zvýšiť, je užitočné použiť návrhový vzor, ako sú stavové stroje.

Úplný príklad je vložený do nástrojov YAKINDU Statechart Tools. Okrem toho bolo na kompiláciu a blikanie v IDE použité Eclipse C ++ IDE pre Arduino Plugin.

Stručná synopsa nástrojov YAKINDU Statechart Tools

S týmto nástrojom je možné vytvárať grafické stavové stroje. Umožňuje používateľovi generovať kód C, C ++ alebo Java zo stavového stroja. S týmto prístupom je možné model zmeniť alebo rozšíriť a užívateľ môže kód jednoducho vygenerovať znova a nemusí písať obyčajný zdrojový kód.

Zásoby

Diely:

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

Náradie:

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

Krok 1: Hardvér

Image
Image

Štít LCD klávesnice je možné jednoducho zapojiť do Arduina. Má LCD displej 16 x 2 a navyše má šesť tlačidiel:

  • Vľavo
  • Správny
  • Hore
  • Dolu
  • Vyberte
  • (Resetovať)

Je zrejmé, že ich možno použiť päť. Kľúče sú zapojené do deliča napätia a sú detekované pomocou kolíka A0 v závislosti od napätia. Na ich správnu detekciu som použil softvér na odskakovanie.

Krok 2: Definujte, ako by to malo fungovať

Ovládanie HMI
Ovládanie HMI

Aplikácia by mala byť schopná vykonávať tri veci.

  1. Tu chcem použiť tlačidlá na navigáciu medzi piatimi stavmi: hore, v strede, dole, vľavo a vpravo
  2. Stopky Jednoduché stopky, ktoré je možné spustiť, zastaviť a resetovať. Mali by sa zvyšovať každých 100 milisekúnd
  3. Počítadlo Tretia časť obsahuje jednoduché počítadlo nahor/nadol. Mal by byť schopný počítať kladné čísla a mal by byť resetovateľný

Aktívna ponuka (alebo stav) sa zobrazí na 16x2 LCD v hornom riadku. V spodnom riadku sa zobrazí aplikácia (Stav, Časovač alebo Počítadlo). Na navigáciu by sa malo použiť ľavé a pravé tlačidlo.

Krok 3: Rozhranie štátneho automatu

Tlačidlá budú odpojené a zapojené do štátneho automatu. Môžu byť použité ako v udalostiach v stavovom stroji. Okrem toho sú definované operácie na zobrazenie aktuálnej ponuky. A sú definované najmenej dve premenné, jedna pre časovač a jedna pre počítadlo.

rozhranie:

// tlačidlá ako vstupné udalosti v udalosti vpravo v prípade udalosti vľavo v udalosti hore v udalosti dole v udalosti vybrať // zobrazenie hodnôt špecifických pre HMI operácia displayLCDString (hodnota: reťazec, dĺžka: celé číslo, pozícia: celé číslo) operácia displayLCDInteger (hodnota: celé číslo, pozícia: integer) operation clearLCDRow (position: integer) internal: // variables for storage var cnt: integer var timeCnt: integer = 0

Po vygenerovaní kódu C ++ je potrebné odstrániť udalosti in a zapojiť ich do rozhrania. Tento útržok kódu ukazuje, ako to urobiť.

Najprv budú definované tlačidlá:

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

Potom je definovaná funkcia na čítanie tlačidla. Hodnoty sa môžu líšiť v závislosti od výrobcu štítu LCD.

static int readButton () {int vysledok = 0; výsledok = analogRead (0); if (výsledok <50) {return RIGHT; } if (result <150) {return UP; } if (result <300) {return DOWN; } if (result <550) {return LEFT; } if (result <850) {return SELECT; } vrátiť ŽIADNE; }

Na konci budú tlačidlá odstránené. Dobré výsledky som dosiahol s 80 ms. Akonáhle sa tlačidlo uvoľní, v prípade potreby sa zvýši.

int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); oneskorenie (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); prestávka; } prípad VĽAVO: {stateMachine-> raise_left (); prestávka; } prípad DOLE: {stateMachine-> raise_down (); prestávka; } prípad NAHORU: {stateMachine-> raise_up (); prestávka; } prípad DOPRAVA: {stateMachine-> raise_right (); prestávka; } predvolené: {break; }}}}

Krok 4: Ovládanie HMI

Každý stav sa používa pre jednu časť ponuky. Existujú čiastkové stavy, v ktorých sa aplikácia - napríklad stopky - spustí.

Vďaka tomuto dizajnu je možné rozhranie ľahko rozšíriť. Ďalšie ponuky je možné jednoducho pridať pomocou rovnakého vzoru. Načítanie hodnoty senzora a jeho zobrazenie v štvrtej položke ponuky nie je žiadny veľký problém.

Ako ovládací prvok sa zatiaľ používa iba ľavá a pravá strana. Hore a dole ale možno použiť aj ako rozšírenie navigácie v hlavnom menu. Na zadanie konkrétnej položky ponuky sa použije iba tlačidlo výberu.

Krok 5: Zaobchádzajte so štátmi

Zvládnuť štáty
Zvládnuť štáty

Ponuka stavov ovládača sa používa iba ako ďalší príklad navigácie. Použitie hore, dole, doprava alebo doľava umožňuje prepínanie medzi stavmi. Aktuálny stav bude vždy vytlačený na druhom riadku LCD displeja.

Krok 6: Stopky

Stopky
Stopky

Stopky sú celkom jednoduché. Pôvodne sa hodnota časovača vynuluje. Časovač je možné spustiť ľavým tlačidlom a prepnúť pomocou ľavého a pravého tlačidla. Použitie nahor alebo nadol vynuluje časovač. Časovač je možné tiež vrátiť späť na nulu dvojitým stlačením tlačidla výberu - opustením ponuky a opätovným zadaním, pretože časovač sa vynuluje počiatočným zadaním stopiek.

Krok 7: Počítadlo

Počítadlo
Počítadlo

Existuje prinajmenšom počítadlo. Vstup do stavu počítadla vynuluje počítadlo. Spustiť sa dá akýmkoľvek tlačidlom, okrem tlačidla výberu. Je implementovaný ako jednoduché počítadlo nahor/nadol, ktorého hodnota nemôže byť menšia ako 0.

Krok 8: Simulácia

Krok 9: Získajte príklad

IDE si môžete stiahnuť tu: YAKINDU Statechart Tools

Keď si stiahnete IDE, nájdete príklad cez Súbor -> Novinka -> Príklad

Používanie pre domácich majstrov je bezplatné, ale môžete tiež použiť 30 -dňovú skúšobnú verziu.

Odporúča: