Talaan ng mga Nilalaman:

Arduino HMI Paggamit ng Mga Makina ng Estado: 9 Mga Hakbang
Arduino HMI Paggamit ng Mga Makina ng Estado: 9 Mga Hakbang

Video: Arduino HMI Paggamit ng Mga Makina ng Estado: 9 Mga Hakbang

Video: Arduino HMI Paggamit ng Mga Makina ng Estado: 9 Mga Hakbang
Video: Arduino MASTERCLASS | Full Programming Workshop in 90 Minutes! 2024, Hulyo
Anonim
Arduino HMI Paggamit ng Mga Makina ng Estado
Arduino HMI Paggamit ng Mga Makina ng Estado

Sa Instructable na ito, ipapakita ko sa iyo kung paano gamitin ang YAKINDU Statechart Tools upang mapagtanto ang isang simple at napapalawak na HMI sa pamamagitan ng paggamit ng 16x2 LCD Keypad Shield para sa Arduino.

Ang Finite State Machines (FSM) ay isang malakas na pattern ng disenyo upang makabuo ng mga kumplikadong Human Machine Interfaces (HMI). Tulad ng pagdaragdag ng isang pag-andar ng isang HMI, kapaki-pakinabang na gumamit ng isang pattern ng disenyo tulad ng mga machine ng estado.

Ang kumpletong halimbawa ay naka-embed sa YAKINDU Statechart Tools. Bilang karagdagan, ang Eclipse C ++ IDE para sa Arduino Plugin ay ginamit para sa pag-iipon at pag-flashing sa IDE.

Isang Maikling Sinopsis ng YAKINDU Statechart Tools

Gamit ang tool na ito, posible na lumikha ng mga graphic na machine ng estado. Pinapayagan nito ang gumagamit na bumuo ng C, C ++ o Java code mula sa state machine. Sa pamamaraang ito, ang modelo ay maaaring mabago o mapalawak at ang gumagamit ay maaaring muling makabuo ng code at hindi na kailangang magsulat ng simpleng source code.

Mga gamit

Mga Bahagi:

  • Arduino (Uno, Mega)
  • Kable ng USB
  • 16x2 LCD Keypad Shield

Mga tool:

  • YAKINDU Statechart Tools
  • Eclipse C ++ IDE para sa Arduino

Hakbang 1: Ang Hardware

Image
Image

Ang LCD Keypad Shield ay maaaring mai-plug sa Arduino. Mayroon itong isang 16x2 LCD Display at bilang karagdagan nakakuha ng anim na mga pushbutton:

  • Kaliwa
  • Tama
  • Pataas
  • Pababa
  • Pumili
  • (I-reset)

Malinaw na, lima sa mga ito ay maaaring magamit. Ang mga susi ay naka-wire sa isang voltage divider at napansin sa pamamagitan ng paggamit ng Pin A0 depende sa boltahe. Gumamit ako ng pag-debug ng software upang makita ang tama ang mga ito.

Hakbang 2: Tukuyin Kung Paano Ito Dapat Gumagana

Pagkontrol ng HMI
Pagkontrol ng HMI

Ang application ay dapat may kakayahang gumawa ng tatlong bagay.

  1. Handle States. Narito nais kong gamitin ang mga pindutan upang mag-navigate sa pagitan ng limang mga estado: Itaas, Gitna, Ibaba, Kaliwa at Kanan
  2. Stopwatch Isang simpleng stopwatch, na maaaring magsimula, tumigil at i-reset. Dapat itong dagdagan bawat 100 milliseconds
  3. Ang ikatlong bahagi ay naglalaman ng isang simpleng pataas / pababang counter. Dapat ay mabibilang ang mga positibong numero at dapat itong muling maitaguyod

Ang aktibong menu (o ang estado) ay ipapakita sa 16x2 LCD sa tuktok na linya. Ang application (Estado, Timer o Counter) ay ipapakita sa ilalim na linya. Para sa pag-navigate, dapat gamitin ang kaliwa at kanang pindutan.

Hakbang 3: Interfacing ng State Machine

Ang mga pindutan ay mai-debug at i-wire sa makina ng estado. Maaari silang magamit tulad ng sa mga kaganapan sa makina ng estado. Bilang karagdagan, ang mga pagpapatakbo ay tinukoy upang ipakita ang kasalukuyang menu. At hindi bababa sa dalawang variable, isa para sa timer at isa para sa counter, ay tinukoy.

interface:

// mga pindutan bilang mga kaganapan sa pag-input sa kanan sa kaganapan na natitira sa kaganapan hanggang sa kaganapan pababa sa kaganapan piliin ang // ipakita ang mga tukoy na halaga ng pagpapakita ng Operating HMDString (halaga: string, haba: integer, posisyon: integer) pagpapakita ng operasyonLCDInteger (halaga: integer, posisyon: integer) operasyon clearLCDRow (posisyon: integer) panloob: // variable para sa imbakan var cnt: integer var timeCnt: integer = 0

Matapos mabuo ang C ++ code, ang sa mga kaganapan ay dapat na i-debump at i-wire sa interface. Ipinapakita ng snippet ng code kung paano ito gagawin.

Sa una, ang mga pindutan ay matutukoy:

#define WALA 0 # tukuyin ang PUMILI 1 # tukuyin ang KALIWAN 2 # tukuyin ang Pababang 3 # tukuyin ang UP 4 # tukuyin ANG KARAPATAN 5

Pagkatapos mayroong isang pagpapaandar na tinukoy upang mabasa ang pindutan. Maaaring magkakaiba ang mga halaga, depende sa tagagawa ng LCD Shield.

static int read Button () {int resulta = 0; resulta = analogRead (0); kung (resulta <50) {bumalik TAMA; } kung (resulta <150) {return UP; } kung (resulta <300) {bumalik sa BAWAL; } kung (resulta <550) {ibalik ang KALIWAN; } kung (resulta <850) {return SELECT; } bumalik WALA; }

Sa huli, ang mga pindutan ay mai-debug. Gumawa ako ng mahusay na mga resulta sa 80 ms. Kapag ang isang pindutan ay pinakawalan, tataas nito ang naaayon sa kaganapan.

int oldState = NONE; static void pagtaasEvents () {int buttonPressed = read Button (); pagkaantala (80); oldState = buttonPressed; kung (oldState! = WALA && read Button () == WALA) {switch (oldState) {case SELECT: {stateMachine-> pagtaas_select (); pahinga; } case LEFT: {stateMachine-> pagtaas_left (); pahinga; } kaso Pababa: {stateMachine-> pagtaas_down (); pahinga; } case UP: {stateMachine-> pagtaas_up (); pahinga; } kaso TAMA: {stateMachine-> itaas_kano (); pahinga; } default: {break; }}}}

Hakbang 4: Pagkontrol sa HMI

Ang bawat estado ay ginagamit para sa isang bahagi ng menu. Mayroong mga sub-state, kung saan ang application - halimbawa ang stopwatch - ay papatayin.

Sa disenyo na ito, ang interface ay maaaring madaling pinalawak. Ang mga karagdagang menu ay maaaring maidagdag sa pamamagitan ng paggamit ng parehong pattern ng disenyo. Ang pagbabasa ng isang halaga ng isang sensor at ipakita ito sa isang ika-apat na item sa menu ay hindi isang malaking pakikitungo.

Sa ngayon, kaliwa at kanan lamang ang ginagamit bilang isang control. Ngunit pataas at pababa ay maaari ding magamit bilang isang extension ng nabigasyon sa pangunahing menu. Ang pindutang pumili lamang ang gagamitin upang magpasok ng isang tukoy na item sa menu.

Hakbang 5: Mga Estadong Pangasiwaan

Mga Estadong Pangangasiwa
Mga Estadong Pangangasiwa

Ang menu ng mga estado ng hawakan ay ginagamit lamang bilang isang karagdagang halimbawa ng pag-navigate. Ang paggamit ng pataas, pababa, kanan o kaliwa ay nagbibigay-daan sa paglipat sa pagitan ng mga estado. Ang kasalukuyang estado ay palaging mai-print sa pangalawang linya sa LCD Display.

Hakbang 6: Stopwatch

Stopwatch
Stopwatch

Ang stopwatch ay medyo simple. Sa pauna, mai-reset ang halaga ng timer. Maaaring simulan ang timer sa pamamagitan ng paggamit ng kaliwang pindutan at i-toggle sa pamamagitan ng paggamit ng kaliwa at kanan. Ang pag-up o pababa ng pag-reset ng timer. Ang timer ay maaari ring maitakda pabalik sa zero sa pamamagitan ng paggamit ng select button dalawang beses - iniiwan ang menu at ipasok ito muli, dahil ang timer ay itatakda sa zero sa pamamagitan ng paunang pagpasok sa stopwatch.

Hakbang 7: Counter

Counter
Counter

Hindi bababa sa, may isang counter na ipinatupad. Ang pagpasok sa counter state ay nagre-reset sa counter. Maaari itong masimulan sa pamamagitan ng paggamit ng anumang pushbutton, maliban sa piliin ang pindutan. Ipinatupad ito bilang isang simpleng pataas / pababang counter, na ang halagang hindi maaaring mas maliit sa 0.

Hakbang 8: Simulation

Hakbang 9: Kunin ang Halimbawa

Maaari mong i-download ang IDE dito: YAKINDU Statechart Tools

Kapag na-download mo ang IDE, mahahanap mo ang halimbawa sa pamamagitan ng File -> N ew -> Halimbawa

Libre itong gamitin para sa mga libangan, ngunit maaari mo ring gamitin ang isang 30 araw na pagsubok.

Inirerekumendang: