Arduino

HeliOS untuk Arduino

HeliOS untuk Arduino
Mikrokontroler Arduino menggunakan satu program untuk mengawal semua suis, LED dan bahagian lain sistem. Program pertama yang dipelajari oleh pengguna Arduino biasanya adalah program 'Blink', yang menggunakan fungsi delay untuk menghidupkan dan mematikan LED dalam corak genap. Program sederhana ini dapat diperluas untuk melakukan banyak perkara, tetapi tidak termasuk multitasking.

Untuk projek yang lebih maju, anda perlu menukar nilai dan membaca data dalam masa nyata, yang tidak mungkin dilakukan dengan fungsi kelewatan standard di Arduino. Oleh itu, penyelesaian yang berbeza diperlukan. Nasib baik, HeliOS dapat membantu.

Batasan Arduino

Seperti disebutkan dalam pendahuluan, bahasa standar Arduino dapat diterapkan dalam banyak cara. Namun, ada masalah: Arduino tidak dapat melakukan banyak tugas. Contohnya, anda tidak boleh menetapkan tiga LED berbeza untuk berkelip pada selang waktu bebas. Tugas ini tidak dapat dilaksanakan kerana, jika anda menggunakan kelewatan, LED dengan penundaan terpanjang akan menyekat kedipan LED yang lain sambil menunggu untuk menukar keadaan.

Pengundian standard juga menyusahkan, kerana memeriksa keadaan butang memerlukan tindakan yang harus diambil. Dalam Arduino standard, anda harus menetapkan fungsi untuk meninjau keadaan suis atau keadaan lain.

Walaupun ada penyelesaian untuk mengatasi masalah ini (e.g., gangguan perkakasan, fungsi milis, pelaksanaan FreeRTOS), tetapi penyelesaian ini juga mempunyai batasan. Untuk mengatasi masalah penyelesaian ini, Mannie Peterson mencipta HeliOS. HeliOS kecil dan cekap, malah boleh dijalankan pada pengawal 8-bit.

Pertimbangkan kod di bawah, yang paling tidak boleh dipercayai kerana penyataan kelewatan akan menghalang butang diperiksa.

int buttonPin = 2; // bilangan pin butang tekan
int ledPin = 4; // bilangan pin LED
// pemboleh ubah akan berubah:
int buttonState = 0; // pemboleh ubah untuk membaca status butang tekan
batal persediaan ()
// mulakan pin LED sebagai output:
pinMode (ledPin, OUTPUT);
pinMode (LED_BUILTIN, OUTPUT);
// mulakan pin butang tekan sebagai input:
pinMode (buttonPin, INPUT);

gelung kosong ()
// baca keadaan nilai butang tekan:
buttonState = digitalRead (buttonPin);
// periksa sama ada butang tekan ditekan. Sekiranya ada, butangState adalah TINGGI:
jika (buttonState == TINGGI)
digitalWrite (ledPin, TINGGI); // hidupkan LED
lain
digitalWrite (ledPin, RENDAH); // matikan LED

digitalWrite (LED_BUILTIN, TINGGI); // hidupkan LED (TINGGI adalah tahap voltan)
kelewatan (1000); // tunggu sebentar
digitalWrite (LED_BUILTIN, RENDAH); // matikan LED dengan menjadikan voltan RENDAH
kelewatan (1000); // tunggu sebentar

Apabila anda menjalankan kod ini, anda akan melihat bahawa 'ledPin' akan berkedip secara normal. Namun, apabila anda menekan butang, ia tidak akan menyala, atau jika berlaku, ia akan melambatkan urutan sekelip mata. Untuk menjayakan program ini, anda boleh beralih ke kaedah kelewatan lain; namun, HeliOS memberikan alternatif.

Linux Dilekatkan di Arduino (HeliOS)

Walaupun "OS" namanya, HeliOS bukan sistem operasi: ia adalah perpustakaan fungsi multitasking. Namun, ia melaksanakan 21 panggilan fungsi yang dapat mempermudah tugas kawalan yang kompleks. Untuk tugas masa nyata, sistem mesti mengendalikan maklumat luaran semasa ia diterima. Untuk melakukannya, sistem mesti dapat melakukan pelbagai tugas.

Beberapa strategi dapat digunakan untuk menangani tugas waktu nyata: strategi berdasarkan peristiwa, strategi seimbang waktu berjalan dan strategi pemberitahuan tugas. Dengan HeliOS, anda boleh menggunakan strategi ini dengan panggilan fungsi.

Seperti FreeRTOS, HeliOS meningkatkan keupayaan pengawal multitasking. Walau bagaimanapun, pembangun yang merancang projek kompleks yang sangat penting perlu menggunakan FreeRTOS atau yang serupa kerana HeliOS bertujuan untuk digunakan oleh peminat dan peminat yang ingin meneroka kehebatan multitasking.

Memasang HeliOS

Semasa menggunakan perpustakaan Arduino, perpustakaan baru dapat dipasang dengan IDE. Untuk versi 1.3.5 dan ke atas, anda memilih menggunakan Pengurus Perpustakaan.


Sebagai alternatif, anda boleh memuat turun fail zip dari laman web, dan menggunakan fail tersebut untuk memasang HeliOS.


Harap maklum bahawa anda perlu memasukkan HeliOS dalam kod anda sebelum mula menggunakannya.

Contohnya

Kod di bawah ini dapat digunakan untuk membuat LED berkelip sekali sesaat. Walaupun kami telah menambahkan kod HeliOS, kesan akhirnya adalah sama dengan tutorial pengenalan.

Perbezaan utama di sini ialah anda mesti membuat tugas. Tugas ini dimasukkan ke dalam keadaan menunggu, dan pemasa ditetapkan untuk memberitahu tugas kapan harus dijalankan. Di samping itu, gelung hanya mengandungi satu pernyataan: xHeliOSLoop (). Gelung ini menjalankan semua kod yang ditentukan dalam persediaan () kod tersebut. Apabila anda merancang kod anda, anda perlu menetapkan semua pin, pemalar dan fungsi dalam tetapan teratas.

#sertakan
// Digunakan untuk menyimpan keadaan LED
int ledState yang tidak menentu = 0;
butang int tidak stabilState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Tentukan tugas sekelip mata
batal taskBlink (xTaskId id_)
jika (ledState)
digitalWrite (LED_BUILTIN, RENDAH);
ledState = 0;
lain
digitalWrite (LED_BUILTIN, TINGGI);
ledState = 1;



// Tentukan tugas membaca butang
butang kosongRead (xTaskId id_)
buttonState = digitalRead (buttonPin);
// periksa sama ada butang tekan ditekan. Sekiranya ada, butangState adalah TINGGI:
jika (buttonState == TINGGI)
// hidupkan LED:
digitalWrite (ledPin, TINGGI);
lain
// matikan LED:
digitalWrite (ledPin, RENDAH);


batal persediaan ()
// id menjejaki tugas
xTaskId id = 0;
// Ini memulakan struktur data Helios
xHeliOSSetup ();
pinMode (LED_BUILTIN, OUTPUT);
pinMode (ledPin, OUTPUT);
// mulakan pin butang tekan sebagai input:
pinMode (buttonPin, INPUT);
// Tambah dan kemudian buat taskBlink menunggu
id = xTaskAdd ("TASKBLINK", & taskBlink);
xTaskWait (id);
// Selang pemasa untuk 'id'
xTaskSetTimer (id, 1000000);
id = xTaskAdd ("BUTTON", & buttonRead);
xTaskStart (id);

gelung kosong ()
// Ini, dan hanya ini, selalu ada ketika menggunakan Helios
xHeliosLoop ();

Dengan kod ini, anda boleh memprogram LED untuk berkelip pada bila-bila masa tanpa perlu risau Arduino ditunda.

Kesimpulannya

Projek ini bagus untuk orang yang baru mengenal Arduino, kerana ini membolehkan anda menggunakan kod Arduino biasa untuk menangani tugas masa nyata. Walau bagaimanapun, kaedah yang dijelaskan dalam artikel ini hanya untuk penggemar dan penyelidik. Untuk projek yang lebih serius, kaedah lain diperlukan.

Distro Linux Terbaik untuk Permainan pada tahun 2021
Sistem operasi Linux telah jauh dari tampilan asal, ringkas dan berasaskan pelayan. OS ini telah berkembang pesat dalam beberapa tahun kebelakangan in...
Cara menangkap dan streaming sesi permainan anda di Linux
Pada masa lalu, bermain permainan hanya dianggap sebagai hobi, tetapi seiring dengan berjalannya waktu, industri permainan menyaksikan pertumbuhan yan...
Permainan Terbaik untuk Dimainkan dengan Penjejakan Tangan
Oculus Quest baru-baru ini memperkenalkan idea hebat penjejakan tangan tanpa pengawal. Dengan jumlah permainan dan aktiviti yang semakin meningkat yan...