Daftar Isi:

Arduino HMI Menggunakan State Machines: 9 Langkah
Arduino HMI Menggunakan State Machines: 9 Langkah

Video: Arduino HMI Menggunakan State Machines: 9 Langkah

Video: Arduino HMI Menggunakan State Machines: 9 Langkah
Video: HMI Dashboard Arduino Project 2024, Juli
Anonim
Arduino HMI Menggunakan Mesin Negara
Arduino HMI Menggunakan Mesin Negara

Dalam Instruksi ini, saya akan menunjukkan kepada Anda bagaimana menggunakan YAKINDU Statechart Tools untuk mewujudkan HMI yang sederhana dan dapat diperluas dengan menggunakan Perisai Keypad LCD 16x2 untuk Arduino.

Finite State Machines (FSM) adalah pola desain yang kuat untuk mengembangkan Human Machine Interfaces (HMI) yang kompleks. Karena fungsionalitas HMI dapat meningkat, akan berguna untuk menggunakan pola desain seperti mesin keadaan.

Contoh lengkapnya ada di YAKINDU Statechart Tools. Selain itu, Eclipse C++ IDE untuk Arduino Plugin telah digunakan untuk mengkompilasi dan mem-flash IDE.

Sinopsis Singkat YAKINDU Statechart Tools

Dengan alat ini, dimungkinkan untuk membuat mesin status grafis. Ini memungkinkan pengguna untuk menghasilkan kode C, C++ atau Java dari mesin negara. Dengan pendekatan ini, model dapat diubah atau diperluas dan pengguna cukup membuat ulang kode dan tidak perlu menulis kode sumber biasa.

Perlengkapan

Bagian:

  • Arduino (Uno, Mega)
  • Kabel USB
  • Perisai Tombol LCD 16x2

Peralatan:

  • Alat Bagan Negara YAKINDU
  • Eclipse C++ IDE untuk Arduino

Langkah 1: Perangkat Keras

Image
Image

LCD Keypad Shield cukup dicolokkan ke Arduino. Ini memiliki Layar LCD 16x2 dan juga memiliki enam tombol:

  • Kiri
  • Benar
  • Ke atas
  • Turun
  • Pilih
  • (Mengatur ulang)

Jelas, lima dari mereka dapat digunakan. Kunci dihubungkan ke pembagi tegangan dan dideteksi dengan menggunakan Pin A0 tergantung pada tegangan. Saya telah menggunakan perangkat lunak debouncing untuk mendeteksi mereka dengan benar.

Langkah 2: Tentukan Cara Kerjanya

Kontrol HMI
Kontrol HMI

Aplikasi harus mampu melakukan tiga hal.

  1. Menangani StatusDi sini saya ingin menggunakan tombol untuk menavigasi di antara lima status: Atas, Tengah, Bawah, Kiri dan Kanan
  2. StopwatchSebuah stopwatch sederhana, yang dapat dimulai, dihentikan, dan disetel ulang. Itu harus bertambah setiap 100 milidetik
  3. Penghitung Bagian ketiga berisi penghitung naik/turun sederhana. Itu harus dapat menghitung angka positif dan harus dapat disetel ulang

Menu aktif (atau status) akan ditampilkan pada LCD 16x2 di baris paling atas. Aplikasi (State, Timer atau Counter) akan ditampilkan di bagian bawah. Untuk navigasi, tombol kiri dan kanan harus digunakan.

Langkah 3: Menghubungkan Mesin Negara

Tombol akan di-debounce dan ditransfer ke mesin negara. Mereka dapat digunakan seperti dalam acara di mesin negara. Selain itu, operasi ditentukan untuk menampilkan menu saat ini. Dan setidaknya dua variabel, satu untuk timer dan satu untuk counter, didefinisikan.

antarmuka:

// tombol sebagai input kejadian di acara kanan di acara kiri di acara naik di acara turun di acara pilih // menampilkan HMI nilai spesifik tampilan operasiLCDString(nilai:string, panjang:bilangan bulat, posisi:integer) tampilan operasiLCDInteger(nilai:bilangan bulat, posisi:integer) operasi clearLCDRow(position:integer) internal: //variabel untuk penyimpanan var cnt: integer var timeCnt: integer = 0

Setelah menghasilkan kode C++, acara in harus di-debounce dan ditransfer ke antarmuka. Cuplikan kode ini menunjukkan cara melakukannya.

Pada awalnya, tombol akan ditentukan:

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

Kemudian ada fungsi yang ditentukan untuk membaca tombol. Nilainya dapat bervariasi, tergantung pada produsen LCD Shield.

static int readButton() { int hasil = 0; hasil = analogRead(0); if (hasil < 50) { kembali KANAN; } if (hasil < 150) { kembali NAIK; } if (hasil < 300) { kembali TURUN; } if (hasil < 550) { kembali ke KIRI; } if (hasil < 850) { kembali SELECT; } mengembalikan NONE; }

Pada akhirnya, tombol akan di-debounce. Saya melakukan hasil yang baik dengan 80 ms. Setelah tombol akan dirilis, itu akan menaikkan sesuai dalam acara.

int oldState = NONE;static void raiseEvents() { int buttonPressed = readButton(); penundaan (80); oldState = tombolDitekan; if (oldState != NONE && readButton() == NONE) { switch (oldState) { case SELECT: { stateMachine->raise_select(); merusak; } kasus KIRI: { stateMachine->raise_left(); merusak; } kasus BAWAH: { stateMachine->raise_down(); merusak; } kasus UP: { stateMachine->raise_up(); merusak; } kasus KANAN: { stateMachine->raise_right(); merusak; } default: { istirahat; } } } }

Langkah 4: Kontrol HMI

Setiap status digunakan untuk satu bagian menu. Ada sub-status, di mana aplikasi - misalnya stopwatch - akan dieksekusi.

Dengan desain ini, antarmuka dapat dengan mudah diperluas. Menu tambahan dapat dengan mudah ditambahkan dengan menggunakan pola desain yang sama. Membaca nilai sensor dan menampilkannya di item menu keempat bukanlah masalah besar.

Untuk saat ini, hanya kiri dan kanan yang digunakan sebagai kontrol. Namun naik turun juga bisa digunakan sebagai ekstensi navigasi di menu utama. Hanya tombol pilih yang akan digunakan untuk memasukkan item menu tertentu.

Langkah 5: Tangani Status

Menangani Negara
Menangani Negara

Menu status pegangan hanya digunakan sebagai contoh navigasi lebih lanjut. Menggunakan atas, bawah, kanan atau kiri memungkinkan beralih antar negara. Status saat ini akan selalu dicetak pada baris kedua pada Layar LCD.

Langkah 6: Stopwatch

Stopwatch
Stopwatch

Stopwatch cukup sederhana. Awalnya, nilai timer akan diatur ulang. Timer dapat dimulai dengan menggunakan tombol kiri dan beralih dengan menggunakan kiri dan kanan. Menggunakan naik atau turun akan mengatur ulang timer. Timer juga dapat disetel kembali ke nol dengan menggunakan tombol pilih dua kali - keluar dari menu dan masuk sekali lagi, karena timer akan disetel ke nol dengan memasukkan stopwatch terlebih dahulu.

Langkah 7: Kontra

Menangkal
Menangkal

Setidaknya, ada counter yang diterapkan. Memasuki negara counter me-reset counter. Ini dapat dimulai dengan menggunakan tombol apa saja, kecuali tombol pilih. Ini diimplementasikan sebagai penghitung naik/turun sederhana, yang nilainya tidak boleh lebih kecil dari 0.

Langkah 8: Simulasi

Langkah 9: Dapatkan Contoh

Anda dapat mengunduh IDE di sini: Alat Statechart YAKINDU

Setelah Anda mengunduh IDE, Anda menemukan contohnya melalui File -> Baru -> Contoh

Ini gratis digunakan untuk penghobi, tetapi Anda juga dapat menggunakan uji coba 30 hari.

Direkomendasikan: