Taula de continguts:

Arduino HMI amb màquines estatals: 9 passos
Arduino HMI amb màquines estatals: 9 passos

Vídeo: Arduino HMI amb màquines estatals: 9 passos

Vídeo: Arduino HMI amb màquines estatals: 9 passos
Vídeo: Cuando el copiloto me ensucia el sillín 👀😅 #humor #eli #motos 2024, Desembre
Anonim
Arduino HMI mitjançant màquines estatals
Arduino HMI mitjançant màquines estatals

En aquest instructiu, us mostraré com utilitzar les eines de diagrama d’estats de YAKINDU per realitzar una HMI senzilla i ampliable mitjançant un escut del teclat LCD de 16x2 per a Arduino.

Les màquines d'estat finit (FSM) són un patró de disseny potent per desenvolupar interfícies complexes màquina humana (HMI). Com que la funcionalitat d'un HMI pot augmentar, és útil utilitzar un patró de disseny com les màquines d'estat.

L'exemple complet està incrustat a YAKINDU Statechart Tools. A més, s'ha utilitzat l'IDE Eclipse C ++ per al connector Arduino per compilar i intermitir a l'IDE.

Una breu sinopsi de les eines YAKINDU Statechart

Amb aquesta eina és possible crear màquines d’estats gràfics. Permet a l'usuari generar codi C, C ++ o Java des de la màquina d'estats. Amb aquest enfocament, el model es pot canviar o ampliar i l'usuari simplement pot tornar a generar el codi i no ha d'escriure codi font normal.

Subministraments

Parts:

  • Arduino (Uno, Mega)
  • Cable USB
  • Escut del teclat LCD de 16x2

Eines:

  • Eines de gràfics d'estat de YAKINDU
  • IDE Eclipse C ++ per a Arduino

Pas 1: el maquinari

Image
Image

L'escut del teclat LCD es pot connectar simplement a l'Arduino. Té una pantalla LCD de 16x2 i té, a més, sis botons:

  • Esquerra
  • Dret
  • Amunt
  • A baix
  • Seleccioneu
  • (Restableix)

Viouslybviament, se’n poden fer servir cinc. Les claus es connecten a un divisor de tensió i es detecten mitjançant el pin A0 en funció de la tensió. He utilitzat la descàrrega de programari per detectar-los correctament.

Pas 2: definiu com hauria de funcionar

Control HMI
Control HMI

L'aplicació hauria de ser capaç de fer tres coses.

  1. Tractar Estats Aquí vull utilitzar els botons per navegar entre cinc estats: superior, mig, inferior, esquerra i dreta
  2. Cronòmetre Un cronòmetre senzill, que es pot iniciar, aturar i restablir. S'hauria d'incrementar cada 100 mil·lisegons
  3. La tercera part conté un senzill comptador amunt / avall. Ha de ser capaç de comptar nombres positius i ha de ser restablible

El menú actiu (o l’estat) es mostrarà a la pantalla LCD de 16x2 de la línia superior. L'aplicació (Estat, temporitzador o comptador) es mostrarà a la línia inferior. Per a la navegació, s’ha d’utilitzar el polsador esquerre i dret.

Pas 3: Interfície de la màquina estatal

Els botons seran rebutjats i connectats a la màquina d’estat. Es poden utilitzar com en esdeveniments a la màquina d'estats. A més, es defineixen les operacions per mostrar el menú actual. I es defineixen almenys dues variables, una per al temporitzador i una per al comptador.

interfície:

// botons com a esdeveniments d’entrada a l’esdeveniment dret a l’esquerra a l’esdeveniment cap amunt en cas que es baixi en cas que es seleccioni // visualitzar els valors específics de l’HMI operació visualització LCDString (valor: cadena, longitud: enter, posició: enter) visualització d’operació LCD Enter (valor: enter, posició: enter) operació clearLCDRow (posició: enter) internal: // variables for storage var cnt: inte var var timeCnt: integer = 0

Després de generar el codi C ++, els esdeveniments in han de ser rebutjats i connectats a la interfície. Aquest fragment de codi mostra com fer-ho.

Al principi, es definiran els botons:

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

Després hi ha una funció definida per llegir el botó. Els valors poden variar, segons el fabricant de l’escut LCD.

static int readButton () {int result = 0; resultat = analogRead (0); if (resultat <50) {tornar DRET; } if (resultat <150) {return UP; } if (resultat <300) {tornar cap avall; } if (resultat <550) {tornar ESQUERRA; } if (resultat <850) {return SELECT; } tornar cap; }

Al final, es rebutjaran els botons. Vaig obtenir bons resultats amb 80 ms. Una vegada que es deixi anar un botó, augmentarà el que correspongui en cas que sigui.

int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); retard (80); oldState = botóPrimit; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); trencar; } cas ESQUERRA: {stateMachine-> raise_left (); trencar; } cas ABAIX: {stateMachine-> raise_down (); trencar; } majúscules i minúscules: {stateMachine-> raise_up (); trencar; } cas DRET: {stateMachine-> raise_right (); trencar; } per defecte: {break; }}}}

Pas 4: control HMI

Cada estat s'utilitza per a una part del menú. Hi ha subestats, on s’executarà l’aplicació (per exemple, el cronòmetre).

Amb aquest disseny, la interfície es pot ampliar fàcilment. Es poden afegir menús addicionals amb el mateix patró de disseny. Llegir un valor d’un sensor i mostrar-lo en un quart element de menú no és un gran problema.

De moment, només s'utilitzen l'esquerra i la dreta com a control. Però amunt i avall també es pot utilitzar com a extensió de navegació al menú principal. Només s’utilitzarà el botó de selecció per introduir un element de menú específic.

Pas 5: gestionar els estats

Manejar Estats
Manejar Estats

El menú d'estats de controlador només s'utilitza com un exemple més de navegació. L'ús amunt, avall, dret o esquerre permet canviar entre estats. L'estat actual sempre s'imprimirà a la segona línia de la pantalla LCD.

Pas 6: cronòmetre

Cronòmetre
Cronòmetre

El cronòmetre és bastant senzill. Inicialment, es restablirà el valor del temporitzador. El temporitzador es pot iniciar amb el botó esquerre i alternar amb l’esquerra i la dreta. Si feu servir cap amunt o cap avall es restableix el temporitzador. El temporitzador també es pot tornar a zero fent servir el botó de selecció dues vegades: sortint del menú i tornant a entrar-hi, ja que el temporitzador es posarà a zero entrant inicialment al cronòmetre.

Pas 7: comptador

Comptador
Comptador

Si més no, hi ha un comptador implementat. En entrar a l’estat del comptador, es reinicia el comptador. Es pot iniciar mitjançant qualsevol polsador, excepte el botó de selecció. S'implementa com un simple comptador amunt / avall, el valor del qual no pot ser inferior a 0.

Pas 8: simulació

Pas 9: obteniu l'exemple

Podeu descarregar l’IDE aquí: Eines d’estadístiques de YAKINDU

Un cop heu descarregat l'IDE, trobareu l'exemple a Fitxer -> Nou -> Exemple

És gratuït per als aficionats, però també podeu fer una prova de 30 dies.

Recomanat: