Isi kandungan:
- Bekalan
- Langkah 1: Bagaimana Jam Tangan Digital Berfungsi
- Langkah 2: Mesin Negeri
- Langkah 3: Perisai Pad Kekunci LCD
- Langkah 4: Memadankan Mesin Negara
- Langkah 5: Menggabungkan Perkara Bersama
- Langkah 6: Dapatkan Contohnya
Video: Jam Digital di Arduino Menggunakan Mesin Keadaan Terhingga: 6 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
Hai, saya akan menunjukkan kepada anda bagaimana jam tangan digital boleh dibuat dengan YAKINDU Statechart Tools dan dijalankan di Arduino, yang menggunakan LCD Keypad Shield.
Model asal jam digital diambil dari David Harel. Dia telah menerbitkan sebuah makalah mengenai
"[…] Penyebaran luas formalisme konvensional mesin negara dan gambarajah negeri."
Dalam makalah ini, dia menggunakan contoh jam tangan digital untuk penyelidikannya. Saya telah menggunakannya sebagai inspirasi dan membina semula jam tangan dengan YAKINDU Statechart Tools (alat untuk membuat model grafik mesin negara dan menghasilkan kod C / C ++ dengannya) dan menghidupkannya semula di Arduino.
Bekalan
Perkakasan:
- Arduino Uno atau Mega
- Perisai Pad Kekunci LCD
Perisian:
- Alat Carta Negeri YAKINDU
- Eclipse C ++ IDE untuk Arduino
Langkah 1: Bagaimana Jam Tangan Digital Berfungsi
Mari mulakan dengan menentukan bagaimana jam tangan digital berfungsi. Adakah anda ingat ini … katakanlah … jam tangan digital "sangat sejuk" yang dimiliki semua orang pada tahun 90-an? Jam randik bersepadu, penggera berbeza dan bunyi bip yang menjengkelkan setiap jam penuh. Sekiranya tidak, lihatlah: jam tangan digital tahun 90-an.
Jadi pada dasarnya ia adalah jam tangan yang boleh dikonfigurasi dengan mod yang berbeza. Terutama, masa semasa akan dipaparkan, tetapi ada beberapa ciri lain. Sebagai input, anda mempunyai hidup / mati, mod dan butang set. Selain itu, anda boleh menghidupkan dan mematikan lampu. Dengan butang mod anda dapat membezakan antara mod dan mengaktifkan / mematikan ciri jam:
- Paparkan masa (Jam)
- Paparkan tarikh (Tarikh)
- Tetapkan penggera (Penggera 1, Penggera 2)
- Aktifkan / nyahaktifkan lonceng (Set Berpadu)
- Gunakan jam randik (Stop Watch)
Di dalam menu, anda boleh menggunakan butang hidup / mati untuk mengkonfigurasi mod. Butang set membolehkan anda menetapkan waktu - mis. untuk jam atau penggera. Jam randik dapat dikawal - dimulakan dan dihentikan - dengan menggunakan butang lampu hidup dan mati. Anda juga boleh menggunakan kaunter pusingan bersepadu
Selain itu, terdapat bunyi berpadu, yang berbunyi setiap jam penuh, dan lampu latar terkawal disatukan. Pada langkah pertama, saya tidak memasukkannya ke Arduino.
Langkah 2: Mesin Negeri
Saya tidak mahu membincangkan lebih terperinci mengenai contoh ini. Bukan kerana terlalu rumit, ia terlalu besar. Saya akan cuba menerangkan idea asas bagaimana ia berfungsi. Pelaksanaannya harus jelas, dengan melihat model atau memuat turun dan mensimulasikannya. Beberapa bahagian mesin negara dijumlahkan di sub wilayah, seperti wilayah waktu yang ditetapkan. Dengan ini, kesediaan mesin negeri dapat dipastikan.
Model ini dibahagikan kepada dua bahagian - grafik dan teks. Di bahagian teks peristiwa, pemboleh ubah, dll akan ditentukan. Pada bahagian grafik - gambarajah keadaan - pelaksanaan logik model ditentukan. Untuk membuat mesin keadaan, yang memenuhi tingkah laku yang ditentukan, diperlukan beberapa peristiwa input, yang dapat digunakan dalam model: onoff, set, mode, light, dan light_r. Dalam bahagian definisi digunakan peristiwa dalaman, yang menambah nilai waktu setiap 100 ms:
setiap 100 ms / masa + = 1
Berdasarkan langkah 100 ms waktu semasa akan dikira dalam format HH: MM: SS:
display.first = (masa / 36000)% 24;
display.second = (masa / 600)% 60; display.third = (masa / 10)% 60;
Nilai akan disambungkan ke paparan LCD dengan menggunakan pembaruan operasi LCD setiap kali mesin keadaan dipanggil:
display.updateLCD (display.first, display.second, display.third, display.text)
Pelaksanaan asas mesin keadaan sudah ditentukan dalam bahagian Bagaimana Digital Watch berfungsi. Di dalam alat ini saya telah menggunakan beberapa elemen pemodelan "khas" seperti CompositeState, History, Sub-Diagram, ExitNodes, dll. Penerangan terperinci boleh didapati di Panduan Pengguna.
Langkah 3: Perisai Pad Kekunci LCD
Perisai Keypad LCD cukup keren untuk projek sederhana, yang memerlukan skrin untuk visualisasi dan beberapa butang sebagai input - HMI khas (Antaramuka Mesin Manusia). LCD Keypad Shield mengandungi lima butang pengguna dan satu lagi untuk reset. Lima butang semuanya disambungkan ke pin A0 Arduino. Masing-masing disambungkan ke pembahagi voltan, yang membolehkan membezakan antara butang.
Anda boleh menggunakan analogRead (0) untuk mencari nilai tertentu, yang tentu saja berbeza dengan pengeluar. Projek mudah ini memaparkan nilai semasa pada LCD:
#sertakan "Arduino.h"
#masuk "LiquidCrystal.h" LiquidCrystal lcd (8, 9, 4, 5, 6, 7); persediaan tidak sah () {lcd.begin (16, 2); lcd.setCursor (0, 0); lcd.write ("Nilai Diukur"); } gelung void () {lcd.setCursor (0, 1); lcd.print (""); lcd.setCursor (0, 1); lcd.print (analogRead (0)); kelewatan (200); }
Ini adalah hasil pengukuran saya:
- Tiada: 1023
- Pilih: 640
- Kiri: 411
- Turun: 257
- Naik: 100
- Betul: 0
Dengan ambang ini boleh membaca butang:
#define TIADA 0 # tentukan SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define KANAN 5 statik int readButton () {int result = 0; hasil = analogRead (0); jika (hasil <50) {kembali KANAN; } jika (hasil <150) {kembali ke atas; } jika (hasil <300) {kembali KE BAWAH; } jika (hasil <550) {kembali KIRI; } jika (hasil <850) {kembali PILIH; } kembali TIADA; }
Langkah 4: Memadankan Mesin Negara
Kod C ++ yang dihasilkan mesin keadaan menyediakan antara muka, yang mesti dilaksanakan untuk mengawal mesin keadaan. Langkah pertama adalah menghubungkan acara dengan kunci Keypad Shield. Saya sudah menunjukkan cara membaca butang, tetapi untuk menghubungkannya ke mesin negara, butang yang diperlukan - jika tidak, acara akan dibangkitkan berkali-kali, yang mengakibatkan tingkah laku yang tidak dapat diramalkan. Konsep penyahtinjaan perisian bukanlah perkara baru. Anda boleh melihat dokumentasi Arduino.
Dalam pelaksanaan saya, saya mengesan kejatuhan (melepaskan butang). Saya membaca nilai butang, tunggu 80 ms (mendapat hasil yang lebih baik dengan 80 bukannya 50), simpan hasilnya dan baca nilai baru. Sekiranya oldResult tidak TIADA (tidak ditekan) dan hasil baru adalah TIADA, saya tahu, bahawa butang telah ditekan sebelumnya dan sekarang telah dilepaskan. Kemudian, saya menaikkan peristiwa input yang sesuai dari mesin keadaan.
int oldState = TIADA; kenaikan kekosongan statik Peristiwa () {int butang Ditekan = readButton (); kelewatan (80); oldState = butang Ditekan; if (oldState! = NONE && readButton () == TIADA) {switch (oldState) {case SELECT: {stateMachine-> getSCI_Button () -> raise_mode (); rehat; } kes KIRI: {stateMachine-> getSCI_Button () -> raise_set (); rehat; } kes KE BAWAH: {stateMachine-> getSCI_Button () -> raise_light (); rehat; } kes UP: {stateMachine-> getSCI_Button () -> raise_light_r (); rehat; } kes KANAN: {stateMachine-> getSCI_Button () -> raise_onoff (); rehat; } lalai: {rehat; }}}}
Langkah 5: Menggabungkan Perkara Bersama
Program utama menggunakan tiga bahagian:
- Mesin Negeri
- Pemasa
- Penangan Paparan (cetakan lcd khas (…))
DigitalWatch * stateMachine = DigitalWatch baru (); CPPTimerInterface * timer_sct = CPPTimerInterface baru (); DisplayHandler * displayHandler = baru DisplayHandler ();
Mesin negara menggunakan pengendali paparan dan mendapat pemasa, yang akan dikemas kini untuk mengawal peristiwa masa. Selepas itu, mesin keadaan diinisialisasi dan dimasukkan.
batal persediaan () {stateMachine-> setSCI_Display_OCB (displayHandler); stateMachine-> setTimer (timer_sct); stateMachine-> init (); stateMachine-> masukkan (); }Gelung melakukan tiga perkara:
- Naikkan acara input
- Hitung masa yang berlalu dan kemas kini pemasa
- Panggil mesin negeri
long_time current = 0; last_cycle_time = 0 yang panjang; gelung kekosongan () {raiseEvents (); last_cycle_time = current_time; current_time = milis (); timer_sct-> updateActiveTimer (stateMachine, current_time - last_cycle_time); stateMachine-> runCycle (); }
Langkah 6: Dapatkan Contohnya
Itu sahaja. Mungkin, saya tidak menyebutkan setiap perincian pelaksanaannya, tetapi anda boleh melihat contohnya atau memberikan komen.
Tambahkan contoh ke IDE yang sedang berjalan dengan: Fail -> Baru -> Contoh -> Contoh Carta Negeri YAKINDU -> Seterusnya -> Arduino - Jam Digital (C ++)
> Anda boleh memuat turun IDE di sini <<
Anda boleh memulakan dengan percubaan 30 hari. Selepas itu, anda mesti mendapat lesen, yang percuma untuk penggunaan bukan komersial!
Disyorkan:
Cara Membuat Jam Analog & Jam Digital Dengan Jalur Led Menggunakan Arduino: 3 Langkah
Cara Membuat Jam Analog & Jam Digital Dengan Jalur Led Menggunakan Arduino: Hari ini kita akan membuat Jam Analog & Jam digital dengan modul Led Strip dan MAX7219 Dot dengan Arduino. Ia akan membetulkan waktu dengan zon waktu tempatan. Jam Analog boleh menggunakan jalur LED yang lebih panjang, sehingga boleh digantung di dinding untuk menjadi seni
Mesin Keadaan Terhingga pada MSP430: 6 Langkah
Mesin Keadaan Terhingga pada MSP430: Saya akan menunjukkan kepada anda cara memprogram Peluncuran MSP430G2 dengan Mesin Negeri Terhingga (FSM) menggunakan Alat Statechart YAKINDU secara langsung di Texas Instruments Code Composer Studio. Tutorial ini mengandungi enam langkah: Memasang YAKINDU Statechart Tools sebagai
Jam Digital 12 Jam Menggunakan Arduino: 3 Langkah
Jam Digital 12 Jam Menggunakan Arduino: Ini adalah projek berasaskan papan roti yang menggunakan Atmel Atmega 2560 (Arduino Mega) dan Skrin LCD 16x2 untuk membuat jam digital 12 jam tanpa memerlukan periferal tambahan. Kami juga dapat mengatur dan mengubah waktu dengan bantuan dua butang tekan. Keseluruhannya
Jarak Jauh automatik ON / OFF Menggunakan Jack MIC pada Camcorder Anda / Relay Keadaan Pepejal Voltan Rendah: 4 Langkah (dengan Gambar)
Jauh / Mati Jauh automatik Menggunakan Jack MIC pada Camcorder Anda / Relay Keadaan Pepejal Voltan Rendah: Gambaran keseluruhan: Kami menggunakan bicu MIC camcorder untuk mengesan ketika camcorder dihidupkan. Kami membina relay keadaan pepejal rendah untuk mengesan bicu MIC dan menghidupkan dan mematikan peranti jauh secara automatik pada masa yang sama dengan camcorder. Keadaan pepejal
Kawalan PC Super Mudah 110 Vac Menggunakan Relay Keadaan Pepejal Crydom: 3 Langkah (dengan Gambar)
Kawalan PC Super Mudah 110 Vac Menggunakan Relay Keadaan Pepejal Crydom: Saya bersiap sedia untuk mencuba pematerian plat panas. Oleh itu, saya memerlukan kaedah untuk mengawal 110Vac dari PC saya. Petunjuk ini menunjukkan cara mengawal 110Vac dengan mudah dari port output bersiri pada PC. Port bersiri yang saya gunakan adalah jenis USB