Cuprins:

Arduino HMI folosind mașinile de stat: 9 pași
Arduino HMI folosind mașinile de stat: 9 pași

Video: Arduino HMI folosind mașinile de stat: 9 pași

Video: Arduino HMI folosind mașinile de stat: 9 pași
Video: Arduino მეორე საფეხური, #23 გაკვეთილი-bluetooth მოდული 2024, Noiembrie
Anonim
Arduino HMI folosind mașinile de stat
Arduino HMI folosind mașinile de stat

În acest Instructable, vă voi arăta cum să utilizați YAKINDU Statechart Tools pentru a realiza un HMI simplu și extensibil utilizând un ecran de tastatură LCD 16x2 pentru Arduino.

Mașinile de stat finit (FSM) sunt un model puternic de proiectare pentru a dezvolta interfețe complexe mașină umană (HMI). Deoarece funcționalitatea unui HMI poate crește, este util să folosiți un model de proiectare precum mașinile de stare.

Exemplul complet este încorporat în YAKINDU Statechart Tools. În plus, Eclipse C ++ IDE pentru Arduino Plugin a fost utilizat pentru compilarea și intermitent în IDE.

O scurtă sinopsisă a instrumentelor YAKINDU Statechart

Cu acest instrument, este posibil să creați mașini cu stări grafice. Permite utilizatorului să genereze cod C, C ++ sau Java de pe mașina de stare. Cu această abordare, modelul poate fi schimbat sau extins, iar utilizatorul poate pur și simplu re-genera codul și nu trebuie să scrie cod sursă simplu.

Provizii

Părți:

  • Arduino (Uno, Mega)
  • Cablu USB
  • Ecran LCD 16x2 pentru tastatură

Instrumente:

  • Instrumente YAKINDU Statechart
  • Eclipse C ++ IDE pentru Arduino

Pasul 1: Hardware-ul

Image
Image

Ecranul tastaturii LCD poate fi pur și simplu conectat la Arduino. Are un ecran LCD de 16x2 și are în plus șase butoane:

  • Stânga
  • Dreapta
  • Sus
  • Jos
  • Selectați
  • (Resetare)

Evident, cinci dintre ele pot fi utilizate. Cheile sunt conectate la un divizor de tensiune și sunt detectate utilizând pinul A0 în funcție de tensiune. Am folosit software-ul pentru a le detecta corect.

Pasul 2: definiți cum ar trebui să funcționeze

Control HMI
Control HMI

Aplicația ar trebui să fie capabilă să facă trei lucruri.

  1. Aici vreau să folosesc butoanele pentru a naviga între cinci stări: sus, mijloc, jos, stânga și dreapta
  2. Cronometru Un cronometru simplu, care poate fi pornit, oprit și resetat. Ar trebui să fie incrementat la fiecare 100 de milisecunde
  3. A treia parte conține un contor simplu sus / jos. Ar trebui să fie capabil să numere numere pozitive și ar trebui să fie resetabil

Meniul activ (sau starea) va fi afișat pe ecranul LCD 16x2 de pe linia de sus. Aplicația (State, Timer sau Counter) va fi afișată pe linia de jos. Pentru navigare, ar trebui să se utilizeze butonul stânga și dreapta.

Pasul 3: interfațarea mașinii de stat

Butoanele vor fi expuse și conectate la mașina de stat. Ele pot fi utilizate ca în evenimente în mașina de stat. În plus, operațiile sunt definite pentru a afișa meniul curent. Și sunt definite cel puțin două variabile, una pentru temporizator și una pentru contor.

interfață:

// butoane ca evenimente de intrare în eveniment dreapta în eveniment stâng în eveniment sus în eveniment jos în caz selectați // afișați valori specifice HMI operație afișare LCDString (valoare: șir, lungime: întreg, poziție: întreg) funcționare afișare LCD Întreg (valoare: întreg, poziție: întreg) operațiune clearLCDRow (poziție: întreg) intern: // variabile pentru stocare var cnt: întreg var timp Cnt: întreg = 0

După generarea codului C ++, evenimentele in trebuie să fie reduse și conectate la interfață. Acest fragment de cod arată cum să faceți acest lucru.

La început, butoanele vor fi definite:

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

Apoi, există o funcție definită pentru a citi butonul. Valorile pot varia, în funcție de producătorul ecranului LCD.

static int readButton () {int result = 0; rezultat = analogRead (0); if (rezultat <50) {returnează DREAPTA; } if (rezultat <150) {return UP; } if (rezultat <300) {returnează JOS; } if (rezultat <550) {return STÂNGA; } if (rezultat <850) {return SELECT; } returnează NICIUL; }

La final, butoanele vor fi expuse. Am făcut rezultate bune cu 80 ms. Odată ce un buton va fi eliberat, acesta va ridica valoarea în eventualitate.

int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); întârziere (80); oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); pauză; } caz STÂNGA: {stateMachine-> raise_left (); pauză; } caz DOWN: {stateMachine-> raise_down (); pauză; } caz UP: {stateMachine-> raise_up (); pauză; } caz DREAPTA: {stateMachine-> raise_right (); pauză; } implicit: {pauză; }}}}

Pasul 4: Control HMI

Fiecare stare este utilizată pentru o parte a meniului. Există sub-stări, unde aplicația - de exemplu cronometrul - va fi executată.

Cu acest design, interfața poate fi extinsă cu ușurință. Meniuri suplimentare pot fi adăugate pur și simplu utilizând același model de design. Citirea unei valori a senzorului și afișarea acestuia într-un al patrulea element de meniu nu este mare lucru.

Deocamdată, numai stânga și dreapta sunt utilizate ca control. Dar sus și jos poate fi folosit și ca extensie de navigare în meniul principal. Numai butonul de selectare va fi utilizat pentru a introduce un anumit element de meniu.

Pasul 5: gestionați statele

Manipulați statele
Manipulați statele

Meniul pentru starea mânerului este utilizat doar ca un exemplu suplimentar de navigare. Folosirea sus, jos, dreapta sau stânga permite comutarea între stări. Starea curentă va fi întotdeauna tipărită pe a doua linie de pe ecranul LCD.

Pasul 6: Cronometru

Cronometru
Cronometru

Cronometrul este destul de simplu. Inițial, valoarea temporizatorului va fi resetată. Cronometrul poate fi pornit folosind butonul stânga și comutat cu ajutorul stânga și dreapta. Utilizarea în sus sau în jos resetează temporizatorul. Cronometrul poate fi, de asemenea, reglat la zero folosind butonul de selectare de două ori - părăsind meniul și introducându-l din nou, deoarece temporizatorul va fi setat la zero prin introducerea inițială a cronometrului.

Pasul 7: Contor

Tejghea
Tejghea

Cel puțin, există un contor implementat. Intrarea în starea contorului resetează contorul. Poate fi pornit folosind orice buton, cu excepția butonului de selectare. Este implementat ca un simplu contor sus / jos, a cărui valoare nu poate fi mai mică de 0.

Pasul 8: Simulare

Pasul 9: Obțineți exemplul

Puteți descărca IDE aici: YAKINDU Statechart Tools

Odată ce ați descărcat IDE, găsiți exemplul prin Fișier -> Nou -> Exemplu

Este gratuit pentru pasionați, dar puteți folosi și o perioadă de încercare de 30 de zile.

Recomandat: