Indholdsfortegnelse:

Arduino HMI ved hjælp af statsmaskiner: 9 trin
Arduino HMI ved hjælp af statsmaskiner: 9 trin

Video: Arduino HMI ved hjælp af statsmaskiner: 9 trin

Video: Arduino HMI ved hjælp af statsmaskiner: 9 trin
Video: #14 OP320 HMI Связь Modbus | Внешний ПЛК Arduino 2024, November
Anonim
Arduino HMI ved hjælp af statsmaskiner
Arduino HMI ved hjælp af statsmaskiner

I denne Instructable vil jeg vise dig, hvordan du bruger YAKINDU Statechart Tools til at realisere et enkelt og udvideligt HMI ved hjælp af et 16x2 LCD -tastaturskærm til Arduino.

Finite State Machines (FSM) er et kraftfuldt designmønster til udvikling af komplekse Human Machine Interfaces (HMI). Da funktionaliteten af et HMI kan stige, er det nyttigt at bruge et designmønster som statsmaskiner.

Det komplette eksempel er integreret i YAKINDU Statechart Tools. Derudover er Eclipse C ++ IDE til Arduino Plugin blevet brugt til at kompilere og blinke i IDE.

En kort oversigt over YAKINDU Statechart Tools

Med dette værktøj er det muligt at oprette grafiske tilstandsmaskiner. Det giver brugeren mulighed for at generere C, C ++ eller Java -kode fra statsmaskinen. Med denne tilgang kan modellen ændres eller udvides, og brugeren kan simpelthen generere koden igen og behøver ikke skrive almindelig kildekode.

Forbrugsvarer

Dele:

  • Arduino (Uno, Mega)
  • USB -kabel
  • 16x2 LCD -tastaturskærm

Værktøjer:

  • YAKINDU Statechart -værktøjer
  • Eclipse C ++ IDE til Arduino

Trin 1: Hardware

Image
Image

LCD -tastaturskærmen kan simpelthen tilsluttes Arduino. Det har en 16x2 LCD -skærm og har desuden seks trykknapper:

  • Venstre
  • Ret
  • Op
  • ned
  • Vælg
  • (Nulstil)

Det er klart, at fem af dem kan bruges. Nøglerne er forbundet til en spændingsdeler og detekteres ved hjælp af Pin A0 afhængigt af spændingen. Jeg har brugt software debouncing til at opdage dem korrekt.

Trin 2: Definer, hvordan det skal fungere

HMI -kontrol
HMI -kontrol

Ansøgningen skal være i stand til at gøre tre ting.

  1. Håndter stater Her vil jeg bruge knapperne til at navigere mellem fem tilstande: Top, midten, bunden, venstre og højre
  2. Stopur Et simpelt stopur, som kan startes, stoppes og nulstilles. Det bør øges hvert 100 millisekund
  3. Tæller Den tredje del indeholder en enkel op/ned -tæller. Det skal kunne tælle positive tal, og det skal kunne nulstilles

Den aktive menu (eller tilstanden) vises på 16x2 LCD på den øverste linje. Applikationen (tilstand, timer eller tæller) vises på bundlinjen. Til navigation skal venstre og højre trykknap bruges.

Trin 3: Grænseflade til statsmaskinen

Knapperne frakobles og forbindes til statsmaskinen. De kan bruges som ved begivenheder i statsmaskinen. Derudover er funktioner defineret til at vise den aktuelle menu. Og mindst to variabler, en for timeren og en for tælleren, er defineret.

interface:

// knapper som inputhændelser i hændelse højre i hændelse venstre i hændelse op i hændelse ned i hændelse vælg // vis HMI -specifikke værdier operation displayLCDString (værdi: streng, længde: heltal, position: heltal) betjeningsdisplayLCDInteger (værdi: heltal, position: heltal) operation clearLCDRow (position: heltal) intern: // variabler til lagring var cnt: heltal var timeCnt: heltal = 0

Efter generering af C ++ - koden skal in -events hæmmes og forbindes til grænsefladen. Dette kodestykke viser, hvordan du gør dette.

I første omgang vil knapperne blive defineret:

#definer INGEN 0 #definer VÆLG 1 #definer VENSTRE 2 #definer NED 3 #definer UP 4 #definer HØJRE 5

Så er der en funktion defineret til at læse knappen. Værdierne kan variere afhængigt af producenten af LCD -skærmen.

static int readButton () {int resultat = 0; resultat = analogRead (0); hvis (resultat <50) {return HØJRE; } hvis (resultat <150) {return UP; } hvis (resultat <300) {return DOWN; } hvis (resultat <550) {return LEFT; } hvis (resultat <850) {return SELECT; } returner INGEN; }

I slutningen fjernes knapperne. Jeg gjorde gode resultater med 80 ms. Når der først er frigivet en knap, vil den i givet fald hæve den.

int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); forsinkelse (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); pause; } case LEFT: {stateMachine-> raise_left (); pause; } sag NED: {stateMachine-> raise_down (); pause; } case UP: {stateMachine-> raise_up (); pause; } sag HØJRE: {stateMachine-> raise_right (); pause; } standard: {pause; }}}}

Trin 4: HMI -kontrol

Hver tilstand bruges til en del af menuen. Der er delstater, hvor applikationen - f.eks. Stopuret - vil blive eksekveret.

Med dette design kan grænsefladen let udvides. Yderligere menuer kan ganske enkelt tilføjes ved hjælp af det samme designmønster. At læse en værdi af en sensor og vise den i et fjerde menupunkt er ikke noget problem.

I øjeblikket bruges kun venstre og højre som kontrol. Men op og ned kan også bruges som en navigationsudvidelse i hovedmenuen. Kun vælg -knappen bruges til at indtaste et bestemt menupunkt.

Trin 5: Håndter stater

Håndter stater
Håndter stater

Håndtagstilstandsmenuen bruges kun som et yderligere eksempel på navigation. Brug af op, ned, højre eller venstre giver mulighed for at skifte mellem staterne. Den aktuelle tilstand udskrives altid på den anden linje på LCD -displayet.

Trin 6: Stopur

Stopur
Stopur

Stopuret er ret simpelt. I første omgang nulstilles timerværdien. Timeren kan startes ved at bruge venstre knap og skifte med venstre og højre. Brug af op eller ned nulstiller timeren. Timeren kan også sættes tilbage til nul ved at bruge valgknappen to gange - forlade menuen og gå ind i den igen, da timeren vil blive indstillet til nul ved først at indtaste stopuret.

Trin 7: Tæller

Tæller
Tæller

I det mindste er der implementeret en tæller. Indtastning af tællertilstanden nulstiller tælleren. Det kan startes med en hvilken som helst trykknap, undtagen valgknappen. Det er implementeret som en enkel op/ned -tæller, hvis værdi ikke må være mindre end 0.

Trin 8: Simulering

Trin 9: Få eksemplet

Du kan downloade IDE'en her: YAKINDU Statechart Tools

Når du har downloadet IDE'en, finder du eksemplet via File -> N ew -> Eksempel

Det er gratis at bruge for hobbyfolk, men du kan også bruge en 30 dages prøveperiode.

Anbefalede: