Turinys:

„Arduino“HMI naudojant valstybines mašinas: 9 žingsniai
„Arduino“HMI naudojant valstybines mašinas: 9 žingsniai

Video: „Arduino“HMI naudojant valstybines mašinas: 9 žingsniai

Video: „Arduino“HMI naudojant valstybines mašinas: 9 žingsniai
Video: #14 OP320 HMI Связь Modbus | Внешний ПЛК Arduino 2024, Lapkritis
Anonim
„Arduino“HMI naudojant valstybines mašinas
„Arduino“HMI naudojant valstybines mašinas

Šioje instrukcijoje aš jums parodysiu, kaip naudoti „YAKINDU Statechart Tools“, kad būtų sukurtas paprastas ir išplėstas HMI, naudojant „Arduino“16 x 2 LCD klaviatūros skydą.

„Finite State Machines“(FSM) yra galingas dizaino modelis kuriant sudėtingas žmogaus ir mašinos sąsajas (HMI). Kadangi HMI funkcionalumas gali padidėti, naudinga naudoti dizaino modelį, pavyzdžiui, būsenos mašinas.

Visas pavyzdys yra įtrauktas į „YAKINDU Statechart Tools“. Be to, „Eclipse C ++ IDE“, skirtas „Arduino“papildiniui, buvo naudojamas IDE kompiliavimui ir mirksėjimui.

Trumpas „YAKINDU Statechart Tools“santrauka

Naudojant šį įrankį, galima sukurti grafines būsenos mašinas. Tai leidžia vartotojui generuoti C, C ++ arba „Java“kodą iš būsenos mašinos. Taikant šį metodą, modelį galima pakeisti arba išplėsti, o vartotojas gali tiesiog sugeneruoti kodą ir jam nereikia rašyti paprasto šaltinio kodo.

Prekės

Dalys:

  • „Arduino“(„Uno“, „Mega“)
  • USB kabelis
  • 16x2 LCD klaviatūros skydas

Įrankiai:

  • „YAKINDU Statechart Tools“
  • „Eclipse C ++ IDE“, skirtas „Arduino“

1 žingsnis: Aparatūra

Image
Image

LCD klaviatūros skydą galima tiesiog prijungti prie „Arduino“. Jis turi 16x2 LCD ekraną ir papildomai turi šešis mygtukus:

  • Kairė
  • Teisingai
  • Aukštyn
  • Žemyn
  • Pasirinkite
  • (Atstatyti)

Akivaizdu, kad penki iš jų gali būti naudojami. Klavišai prijungti prie įtampos skirstytuvo ir aptinkami naudojant kaištį A0, atsižvelgiant į įtampą. Naudojau programinės įrangos išjungimą, kad juos teisingai aptikčiau.

2 žingsnis: apibrėžkite, kaip tai turėtų veikti

HMI valdymas
HMI valdymas

Programa turėtų sugebėti atlikti tris dalykus.

  1. Čia noriu naudoti mygtukus, norėdami naršyti tarp penkių būsenų: viršuje, viduryje, apačioje, kairėje ir dešinėje
  2. Chronometras Paprastas chronometras, kurį galima paleisti, sustabdyti ir iš naujo nustatyti. Jis turėtų būti didinamas kas 100 milisekundžių
  3. Trečioje dalyje yra paprastas skaitiklis aukštyn/žemyn. Jis turėtų sugebėti suskaičiuoti teigiamus skaičius ir jį būtų galima iš naujo nustatyti

Aktyvus meniu (arba būsena) bus rodomas 16x2 LCD viršutinėje eilutėje. Programa (būsena, laikmatis arba skaitiklis) bus rodoma apatinėje eilutėje. Navigacijai reikia naudoti kairįjį ir dešinįjį mygtukus.

3 žingsnis: susiejimas su valstybės mašina

Mygtukai bus atjungti ir prijungti prie būsenos mašinos. Jie gali būti naudojami kaip įvykiai valstybinėje mašinoje. Be to, nustatomos operacijos, skirtos rodyti esamą meniu. Ir yra apibrėžti bent du kintamieji, vienas - laikmačiui ir vienas - skaitikliui.

sąsaja:

// mygtukai kaip įvesties įvykiai įvykyje dešinėje, įvykis kairėje, įvykis aukštyn, įvykis žemyn, įvykio pasirinkime // rodyti HMI specifines vertes, operacijos rodymas: integer) operacija clearLCDRow (pozicija: sveikasis skaičius) internal: // saugojimo kintamieji var cnt: integer var timeCnt: integer = 0

Sukūrus C ++ kodą, įvykiai turi būti atjungti ir prijungti prie sąsajos. Šis kodo fragmentas parodo, kaip tai padaryti.

Iš pradžių bus nustatyti šie mygtukai:

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

Tada yra nustatyta funkcija nuskaityti mygtuką. Vertės gali skirtis priklausomai nuo LCD skydo gamintojo.

static int readButton () {int rezultatas = 0; rezultatas = analogRead (0); if (rezultatas <50) {return RIGHT; } if (rezultatas <150) {return UP; } if (rezultatas <300) {return DOWN; } if (rezultatas <550) {return LEFT; } if (rezultatas <850) {return SELECT; } grąžinti NĖRA; }

Pabaigoje mygtukai bus išjungti. Aš padariau gerus rezultatus per 80 ms. Kai mygtukas bus atleistas, jis pakils atitinkamu atveju.

int oldState = NĖRA; static void raiseEvents () {int buttonPressed = readButton (); uždelsimas (80); oldState = mygtukasPaspaustas; if (oldState! = NONE &&& readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); pertrauka; } atvejis LEFT: {stateMachine-> raise_left (); pertrauka; } atvejis DOWN: {stateMachine-> raise_down (); pertrauka; } atvejis aukštyn: {stateMachine-> raise_up (); pertrauka; } atvejis TEISINGAS: {stateMachine-> raise_right (); pertrauka; } numatytasis: {break; }}}}

4 žingsnis: HMI valdymas

Kiekviena būsena naudojama vienai meniu daliai. Yra dalinių būsenų, kuriose programa, pavyzdžiui, chronometras, bus vykdoma.

Naudojant šį dizainą, sąsają galima lengvai išplėsti. Naudojant tą patį dizaino modelį galima tiesiog pridėti papildomų meniu. Jutiklio vertės skaitymas ir rodymas ketvirtame meniu elemente nėra didelis dalykas.

Kol kas tik kairė ir dešinė yra naudojami kaip valdiklis. Bet aukštyn ir žemyn taip pat galima naudoti kaip naršymo plėtinį pagrindiniame meniu. Tik pasirinkimo mygtukas bus naudojamas konkrečiam meniu elementui įvesti.

5 žingsnis: tvarkykite būsenas

Tvarkyti valstybes
Tvarkyti valstybes

Rankenų būsenų meniu naudojamas tik kaip tolesnis naršymo pavyzdys. Naudojant aukštyn, žemyn, dešinėn arba kairėn, galima perjungti būsenas. Esama būsena visada bus išspausdinta antroje LCD ekrano eilutėje.

6 žingsnis: chronometras

Chronometras
Chronometras

Chronometras yra gana paprastas. Iš pradžių laikmačio vertė bus iš naujo nustatyta. Laikmatį galima paleisti naudojant kairįjį mygtuką ir perjungti kairę ir dešinę. Naudojant aukštyn arba žemyn iš naujo nustatomas laikmatis. Laikmatį taip pat galima nustatyti į nulį, du kartus paspaudus pasirinkimo mygtuką - išeinant iš meniu ir dar kartą įeinant, nes laikmatis bus nustatytas į nulį iš pradžių įvedus chronometrą.

7 žingsnis: skaitiklis

Skaitliukas
Skaitliukas

Bent jau yra įdiegtas skaitiklis. Įvedus skaitiklio būseną, skaitiklis iš naujo nustatomas. Jį galima paleisti bet kuriuo mygtuku, išskyrus pasirinkimo mygtuką. Jis įdiegtas kaip paprastas aukštyn/žemyn skaitiklis, kurio vertė negali būti mažesnė nei 0.

8 žingsnis: modeliavimas

9 žingsnis: Gaukite pavyzdį

IDE galite atsisiųsti čia: „YAKINDU Statechart Tools“

Atsisiuntę IDE pavyzdį rasite naudodami Failas -> Naujas -> Pavyzdys

Mėgėjams tai nemokama, tačiau taip pat galite naudoti 30 dienų bandomąją versiją.

Rekomenduojamas: