Innholdsfortegnelse:

Arduino HMI ved bruk av statsmaskiner: 9 trinn
Arduino HMI ved bruk av statsmaskiner: 9 trinn

Video: Arduino HMI ved bruk av statsmaskiner: 9 trinn

Video: Arduino HMI ved bruk av statsmaskiner: 9 trinn
Video: #14 OP320 HMI Связь Modbus | Внешний ПЛК Arduino 2024, November
Anonim
Arduino HMI som bruker statsmaskiner
Arduino HMI som bruker statsmaskiner

I denne instruksen vil jeg vise deg hvordan du bruker YAKINDU Statechart Tools for å realisere et enkelt og utvidbart HMI ved å bruke et 16x2 LCD -tastaturskjerm for Arduino.

Finite State Machines (FSM) er et kraftig designmønster for å utvikle komplekse Human Machine Interfaces (HMI). Ettersom funksjonaliteten til et HMI kan øke, er det nyttig å bruke et designmønster som statlige maskiner.

Hele eksemplet er innebygd i YAKINDU Statechart Tools. I tillegg har Eclipse C ++ IDE for Arduino Plugin blitt brukt til å kompilere og blinke i IDE.

En kort oversikt over YAKINDU Statechart Tools

Med dette verktøyet er det mulig å lage grafiske tilstandsmaskiner. Det lar brukeren generere C, C ++ eller Java -kode fra statsmaskinen. Med denne tilnærmingen kan modellen endres eller utvides, og brukeren kan ganske enkelt generere koden på nytt og trenger ikke å skrive ren kildekode.

Rekvisita

Deler:

  • Arduino (Uno, Mega)
  • USB-kabel
  • 16x2 LCD -tastaturskjerm

Verktøy:

  • YAKINDU Statechart Tools
  • Eclipse C ++ IDE for Arduino

Trinn 1: Maskinvaren

Image
Image

LCD -tastaturet kan enkelt kobles til Arduino. Den har en 16x2 LCD -skjerm og har i tillegg seks trykknapper:

  • Venstre
  • Ikke sant
  • Opp
  • Ned
  • Plukke ut
  • (Nullstille)

Tydeligvis kan fem av dem brukes. Tastene er koblet til en spenningsdeler og detekteres ved hjelp av Pin A0 avhengig av spenningen. Jeg har brukt programvare som debouncing for å oppdage dem riktig.

Trinn 2: Definer hvordan det skal fungere

HMI -kontroll
HMI -kontroll

Programmet skal kunne gjøre tre ting.

  1. Håndter tilstander Her vil jeg bruke knappene til å navigere mellom fem tilstander: Topp, Midt, Nederst, Venstre og Høyre
  2. Stoppeklokke En enkel stoppeklokke, som kan startes, stoppes og tilbakestilles. Den bør økes hvert 100 millisekund
  3. Teller Den tredje delen inneholder en enkel opp/ned teller. Den skal kunne telle positive tall, og den skal kunne gjenopprettes

Den aktive menyen (eller staten) vil vises på 16x2 LCD -skjermen på den øverste linjen. Søknaden (tilstand, tidteller eller teller) vises på bunnlinjen. For navigering bør venstre og høyre trykknapp brukes.

Trinn 3: Grensesnitt mot statsmaskinen

Knappene blir frakoblet og koblet til statsmaskinen. De kan brukes som i hendelser i statsmaskinen. I tillegg er operasjoner definert for å vise gjeldende meny. Og minst to variabler, en for timeren og en for telleren, er definert.

grensesnitt:

// knapper som inngangshendelser i hendelsen høyre i hendelsen venstre i hendelsen opp i hendelsen ned i hendelsen velg // vis HMI -spesifikke verdier operasjon displayLCDString (verdi: streng, lengde: heltall, posisjon: heltall) operasjonsvisningLCDInteger (verdi: heltall, posisjon: heltall) operasjon clearLCDRow (posisjon: heltall) intern: // variabler for lagring var cnt: heltall var timeCnt: heltall = 0

Etter å ha generert C ++ - koden, må in -hendelsene dekobles og kobles til grensesnittet. Denne kodebiten viser hvordan du gjør dette.

I begynnelsen vil knappene bli definert:

#definere INGEN 0 #definere VELG 1 #definer VENSTRE 2 #definer NED 3 #definer OPP 4 #definer HØYRE 5

Deretter er det definert en funksjon for å lese knappen. Verdiene kan variere, avhengig av produsenten av LCD -skjermen.

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

På slutten blir knappene frakoblet. Jeg gjorde gode resultater med 80 ms. Når en knapp slippes, vil den øke den i tilfelle.

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 (); gå i stykker; } sak VENSTRE: {stateMachine-> raise_left (); gå i stykker; } sak NED: {stateMachine-> raise_down (); gå i stykker; } case UP: {stateMachine-> raise_up (); gå i stykker; } sak HØYRE: {stateMachine-> raise_right (); gå i stykker; } standard: {pause; }}}}

Trinn 4: HMI -kontroll

Hver tilstand brukes til en del av menyen. Det er delstater, der applikasjonen - for eksempel stoppeklokken - vil bli utført.

Med denne designen kan grensesnittet enkelt utvides. Flere menyer kan enkelt legges til ved å bruke det samme designmønsteret. Å lese en verdi av en sensor og vise den i et fjerde menyelement er ikke så farlig.

Foreløpig brukes bare venstre og høyre som kontroll. Men opp og ned kan også brukes som navigasjonsutvidelse i hovedmenyen. Bare velg -knappen brukes til å angi et bestemt menyelement.

Trinn 5: Håndter stater

Håndter stater
Håndter stater

Håndtakstilstandsmenyen brukes bare som et ytterligere eksempel på navigasjon. Ved å bruke opp, ned, høyre eller venstre kan du bytte mellom statene. Den nåværende tilstanden skrives alltid ut på den andre linjen på LCD -skjermen.

Trinn 6: Stoppeklokke

Stoppeklokke
Stoppeklokke

Stoppeklokken er ganske enkel. I utgangspunktet vil tidtakerverdien nullstilles. Timeren kan startes ved å bruke venstre knapp og bytte med venstre og høyre. Hvis du bruker opp eller ned, tilbakestilles timeren. Timeren kan også settes tilbake til null ved å bruke valgknappen to ganger - forlate menyen og gå inn i den igjen, ettersom timeren settes til null ved først å gå inn i stoppeklokken.

Trinn 7: Teller

Disk
Disk

I det minste er det en teller implementert. Å angi tellerstatusen nullstiller telleren. Den kan startes med en hvilken som helst trykknapp, bortsett fra valgknappen. Den er implementert som en enkel opp/ned -teller, hvor verdien ikke kan være mindre enn 0.

Trinn 8: Simulering

Trinn 9: Få eksemplet

Du kan laste ned IDE her: YAKINDU Statechart Tools

Når du har lastet ned IDE, finner du eksemplet via Fil -> N ew -> Eksempel

Det er gratis å bruke for hobbyfolk, men du kan også bruke en 30 dagers prøveperiode.

Anbefalt: