Përmbajtje:

Arduino HMI Duke përdorur Makinat Shtetërore: 9 Hapa
Arduino HMI Duke përdorur Makinat Shtetërore: 9 Hapa

Video: Arduino HMI Duke përdorur Makinat Shtetërore: 9 Hapa

Video: Arduino HMI Duke përdorur Makinat Shtetërore: 9 Hapa
Video: CS50 2015 - Week 4 2024, Nëntor
Anonim
Arduino HMI Duke përdorur Makinat Shtetërore
Arduino HMI Duke përdorur Makinat Shtetërore

Në këtë Instructable, unë do t'ju tregoj se si të përdorni YAKINDU Statechart Tools për të realizuar një HMI të thjeshtë dhe të zgjerueshëm duke përdorur një Mburojë të tastierës LCD 16x2 për Arduino.

Makinat e Gjendjes së Fundit (FSM) janë një model i fuqishëm i projektimit për të zhvilluar ndërfaqe komplekse të makinerisë njerëzore (HMI). Ndërsa funksionaliteti i një HMI mund të rritet, është e dobishme të përdorni një model dizajni si makinat shtetërore.

Shembulli i plotë është ngulitur në YAKINDU Statechart Tools. Për më tepër, Eclipse C ++ IDE për Arduino Plugin është përdorur për përpilimin dhe ndezjen në IDE.

Një përmbledhje e shkurtër e Mjeteve të Tabelave të Shtetit YAKINDU

Me këtë mjet, është e mundur të krijohen makina grafike të gjendjes. Kjo i lejon përdoruesit të gjenerojë kod C, C ++ ose Java nga makina shtetërore. Me këtë qasje, modeli mund të ndryshohet ose zgjerohet dhe përdoruesi thjesht mund të ri-gjenerojë kodin dhe nuk ka pse të shkruajë kod burimor të thjeshtë.

Furnizimet

Pjesët:

  • Arduino (Uno, Mega)
  • Kabllo USB
  • Mburoja e tastierës LCD 16x2

Mjetet:

  • Mjetet e hartës shtetërore YAKINDU
  • Eclipse C ++ IDE për Arduino

Hapi 1: Hardueri

Image
Image

Mburoja e tastierës LCD thjesht mund të lidhet me Arduino. Ajo ka një ekran LCD 16x2 dhe gjithashtu ka gjashtë butona:

  • Majtas
  • E drejtë
  • Lart
  • Poshtë
  • Zgjidhni
  • (Rivendos)

Natyrisht, pesë prej tyre mund të përdoren. Çelësat lidhen me një ndarës të tensionit dhe zbulohen duke përdorur Pin A0 në varësi të tensionit. Kam përdorur debunimin e softuerit për t'i zbuluar ato në mënyrë korrekte.

Hapi 2: Përcaktoni se si duhet të funksionojë

Kontrolli HMI
Kontrolli HMI

Aplikacioni duhet të jetë i aftë të bëjë tre gjëra.

  1. Këtu dua të përdor butonat për të lundruar midis pesë gjendjeve: lart, mes, poshtë, majtas dhe djathtas
  2. Kronometër Një kronometër i thjeshtë, i cili mund të fillohet, ndalet dhe rivendoset. Duhet të rritet çdo 100 milisekonda
  3. Pjesëmarrës Pjesa e tretë përmban një numërues të thjeshtë lart/poshtë. Duhet të jetë në gjendje të numërojë numra pozitivë dhe duhet të rivendoset

Menyja aktive (ose gjendja) do të shfaqet në LCD 16x2 në rreshtin e sipërm. Aplikacioni (Gjendja, Kohëmatësi ose Numëruesi) do të shfaqet në fund. Për lundrim, duhet të përdorni butonin e majtë dhe të djathtë.

Hapi 3: Ndërfaqja e makinës shtetërore

Butonat do të hiqen dhe lidhen me makinën shtetërore. Ato mund të përdoren si në ngjarjet në makinën shtetërore. Për më tepër, operacionet përcaktohen për të shfaqur menunë aktuale. Dhe të paktën dy ndryshore, një për kohëmatësin dhe një për numëruesin, janë përcaktuar.

ndërfaqe:

// butonat si ngjarje hyrëse në ngjarje djathtas në ngjarje të majtë në ngjarje poshtë në ngjarje zgjidhni // shfaq vlerat specifike të HMI shfaqja e ekranitLCDString (vlera: vargu, gjatësia: numër i plotë, pozicioni: numër i plotë) shfaqja e funksionimit LCDInteger (vlera: numër i plotë, pozicion: numër i plotë) operacion i qartëLCDRow (pozicioni: numër i plotë) i brendshëm: // variabla për ruajtje var cnt: numër i plotë var kohë Cnt: numër i plotë = 0

Pas krijimit të kodit C ++, ngjarjet duhet të anulohen dhe të lidhen me ndërfaqen. Ky fragment i kodit tregon se si ta bëni këtë.

Në fillim, butonat do të përcaktohen:

#define NONE 0 #define SELECT 1 #define LEFT 2 #define POSHT 3 #define UP 4 #define Djathtas 5

Pastaj ekziston një funksion i përcaktuar për të lexuar butonin. Vlerat mund të ndryshojnë, në varësi të prodhuesit të LCD Shield.

statike int readButton () {int rezultati = 0; rezultati = analogRead (0); nëse (rezultati <50) {kthehu DREJT; } if (rezultati <150) {kthehu UP; } if (rezultati <300) {kthehu Poshtë; } if (rezultati <550) {kthehu Majtas; } if (rezultati <850) {kthehu SELECT; } ktheni ASNJ; }

Në fund, butonat do të hiqen. Kam bërë rezultate të mira me 80 ms. Pasi të lëshohet një buton, ai do të ngrejë atë në rast.

int oldState = ASNJE; statike void raiseEvents () {int buttonPressed = readButton (); vonesë (80); oldState = butonPresuar; if (oldState! = NUK && readButton () == ASNJE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); pushim; } rasti LEFT: {stateMachine-> raise_left (); pushim; } rasti Poshtë: {stateMachine-> raise_down (); pushim; } rast UP: {stateMachine-> raise_up (); pushim; } rasti DREJTA: {stateMachine-> raise_right (); pushim; } parazgjedhje: {pushim; }}}}

Hapi 4: Kontrolli HMI

Çdo gjendje përdoret për një pjesë të menysë. Ka nën -shtete, ku aplikacioni - për shembull kronometri - do të ekzekutohet.

Me këtë dizajn, ndërfaqja mund të zgjerohet lehtësisht. Menutë shtesë mund të shtohen thjesht duke përdorur të njëjtin model dizajni. Leximi i vlerës së një sensori dhe shfaqja e tij në artikullin e katërt të menusë nuk është punë e madhe.

Tani për tani, vetëm majtas dhe djathtas përdoret si kontroll. Por lart e poshtë mund të përdoret gjithashtu si një shtesë e navigimit në menunë kryesore. Vetëm butoni i përzgjedhjes do të përdoret për të futur një artikull specifik të menysë.

Hapi 5: Trajtoni shtetet

Trajtoni shtetet
Trajtoni shtetet

Menyja e gjendjeve të dorezës përdoret vetëm si një shembull i mëtejshëm i lundrimit. Përdorimi lart, poshtë, djathtas ose majtas lejon kalimin midis gjendjeve. Gjendja aktuale gjithmonë do të printohet në rreshtin e dytë në ekranin LCD.

Hapi 6: Kronometër

Kronometër
Kronometër

Kronometri është mjaft i thjeshtë. Fillimisht, vlera e kohëmatësit do të rivendoset. Kohëmatësi mund të fillohet duke përdorur butonin e majtë dhe të kalojë duke përdorur majtas dhe djathtas. Përdorimi lart ose poshtë rivendos kohëmatësin. Kohëmatësi gjithashtu mund të kthehet në zero duke përdorur butonin e përzgjedhjes dy herë - duke lënë menunë dhe duke e futur atë përsëri, pasi kohëmatësi do të vendoset në zero duke hyrë fillimisht në kronometër.

Hapi 7: Kundërsulm

Counter
Counter

Të paktën, ekziston një sportel i zbatuar. Hyrja në gjendjen e numëruesit rivendos numëruesin. Mund të fillohet duke përdorur çdo buton, përveç butonit të përzgjedhjes. Zbatohet si një numërues i thjeshtë lart/poshtë, vlera e të cilit nuk mund të jetë më e vogël se 0.

Hapi 8: Simulimi

Hapi 9: Merrni Shembullin

Ju mund ta shkarkoni IDE këtu: YAKINDU Toolchart Tools

Pasi të keni shkarkuar IDE, e gjeni shembullin përmes File -> N ew -> Shembull

Freeshtë falas për t'u përdorur për hobistët, por gjithashtu mund të përdorni një provë 30 -ditore.

Recommended: