Arduino

HeliOS untuk Arduino

HeliOS untuk Arduino
Mikrokontroler Arduino menggunakan satu program untuk mengontrol semua sakelar, LED, dan bagian lain dari sistem. Program pertama yang dipelajari oleh pengguna Arduino biasanya adalah program 'Blink', yang menggunakan fungsi penundaan untuk menyalakan dan mematikan LED dalam pola yang rata. Program sederhana ini dapat diperluas untuk melakukan banyak hal, tetapi tidak dapat mencakup multitasking.

Untuk proyek yang lebih maju, Anda perlu mengubah nilai dan membaca data secara real time, yang tidak mungkin dilakukan dengan fungsi penundaan standar di Arduino. Oleh karena itu, diperlukan solusi yang berbeda. Untungnya, HeliOS dapat membantu.

Keterbatasan Arduino

Seperti disebutkan dalam pendahuluan, bahasa standar Arduino dapat diterapkan dalam banyak cara. Namun, ada masalah: Arduino tidak dapat melakukan banyak tugas. Misalnya, Anda tidak dapat mengatur tiga LED berbeda untuk berkedip pada interval independen. Tugas ini tidak dapat dilakukan karena, jika Anda menggunakan penundaan, LED dengan penundaan terlama akan memblokir kedipan LED lainnya sambil menunggu untuk beralih status.

Polling standar juga merepotkan, karena memeriksa status tombol memerlukan tindakan yang harus diambil. Dalam Arduino standar, Anda harus mengatur fungsi untuk melakukan polling status sakelar atau status lainnya.

Meskipun ada solusi untuk mengatasi masalah ini (mis.g., interupsi perangkat keras, fungsi milis, implementasi FreeRTOS), tetapi solusi ini juga memiliki keterbatasan. Untuk mengatasi masalah solusi ini, Mannie Peterson menemukan HeliOS. HeliOS kecil dan efisien, dan bahkan dapat berjalan pada pengontrol 8-bit.

Pertimbangkan kode di bawah ini, yang paling tidak dapat diandalkan karena pernyataan penundaan akan mencegah tombol dicentang.

int tombolPin = 2; // jumlah pin tombol tekan
int ledPin = 4; // jumlah pin LED
// variabel akan berubah:
int keadaan tombol = 0; // variabel untuk membaca status tombol tekan
batalkan pengaturan()
// inisialisasi pin LED sebagai output:
pinMode(ledPin, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
// inisialisasi pin tombol sebagai input:
pinMode(tombolPin, INPUT);

lingkaran kosong()
// membaca status nilai tombol tekan:
buttonState = digitalRead(buttonPin);
// periksa apakah tombol ditekan. Jika ya, status tombolnya TINGGI:
if (buttonState == TINGGI)
digitalWrite(ledPin, TINGGI); // nyalakan LED
lain
digitalWrite(ledPin, RENDAH); // matikan LED

digitalWrite(LED_BUILTIN, TINGGI); // nyalakan LED (TINGGI adalah level tegangan)
penundaan (1000); // tunggu sebentar
digitalWrite(LED_BUILTIN, RENDAH); // matikan LED dengan membuat tegangan LOW
penundaan (1000); // tunggu sebentar

Saat Anda menjalankan kode ini, Anda akan melihat bahwa 'ledPin' akan berkedip secara normal. Namun, ketika Anda menekan tombol, itu tidak akan menyala, atau jika menyala, itu akan menunda urutan kedipan. Untuk membuat program ini bekerja, Anda dapat beralih ke metode penundaan lainnya; namun, HeliOS menyediakan alternatif.

Linux Tertanam di Arduino (HeliOS)

Terlepas dari "OS" dalam namanya, HeliOS bukanlah sistem operasi: ini adalah perpustakaan fungsi multitasking. Namun, itu menerapkan 21 panggilan fungsi yang dapat menyederhanakan tugas kontrol yang kompleks complex. Untuk tugas waktu nyata, sistem harus menangani informasi eksternal saat diterima. Untuk melakukannya, sistem harus dapat melakukan banyak tugas.

Beberapa strategi dapat digunakan untuk menangani tugas waktu nyata: strategi berbasis peristiwa, strategi seimbang run-time, dan strategi pemberitahuan tugas. Dengan HeliOS, Anda dapat menggunakan salah satu dari strategi ini dengan panggilan fungsi.

Seperti FreeRTOS, HeliOS meningkatkan kemampuan multitasking pengontrol. Namun, pengembang yang merencanakan proyek kompleks yang sangat penting perlu menggunakan FreeRTOS atau yang serupa karena HeliOS ditujukan untuk digunakan oleh para penggemar dan penghobi yang ingin menjelajahi kekuatan multitasking.

Menginstal HeliOS

Saat menggunakan perpustakaan Arduino, perpustakaan baru dapat diinstal dengan IDE. Untuk versi 1.3.5 ke atas, Anda memilih menggunakan Manajer Perpustakaan.


Atau, Anda dapat mengunduh file zip dari halaman web, dan menggunakan file itu untuk menginstal HeliOS.


Harap dicatat bahwa Anda harus menyertakan HeliOS dalam kode Anda sebelum Anda dapat mulai menggunakannya.

Contoh

Kode di bawah ini dapat digunakan untuk membuat LED berkedip sekali per detik. Meskipun kami telah menambahkan kode HeliOS, efek akhirnya sama dengan tutorial pengantar.

Perbedaan utama di sini adalah Anda harus membuat tugas. Tugas ini dimasukkan ke dalam status menunggu, dan pengatur waktu diatur untuk memberi tahu tugas kapan harus dijalankan. Selain itu, loop hanya berisi satu pernyataan: xHeliOSLoop(). Loop ini menjalankan semua kode yang ditentukan dalam setup() dari kode. Saat Anda merencanakan kode Anda, Anda perlu mengatur semua pin, konstanta, dan fungsi di pengaturan atas.

#termasuk
//Digunakan untuk menyimpan status LED
volatil int ledState = 0;
volatile int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Tentukan tugas berkedip
void taskBlink(xTaskId id_)
jika (negara bagian)
digitalWrite(LED_BUILTIN, RENDAH);
keadaan led = 0;
lain
digitalWrite(LED_BUILTIN, TINGGI);
ledState = 1;



// Tentukan tugas baca tombol
void buttonRead(xTaskId id_)
buttonState = digitalRead(buttonPin);
// periksa apakah tombol ditekan. Jika ya, status tombolnya TINGGI:
if (buttonState == TINGGI)
// nyalakan LED:
digitalWrite(ledPin, TINGGI);
lain
// matikan LED:
digitalWrite(ledPin, RENDAH);


batalkan pengaturan()
// id melacak tugas
xTaskId id = 0;
// Ini menginisialisasi struktur data Helios
xHeliOSSetup();
pinMode(LED_BUILTIN, OUTPUT);
pinMode(ledPin, OUTPUT);
// inisialisasi pin tombol sebagai input:
pinMode(tombolPin, INPUT);
// Tambahkan lalu buat taskBlink menunggu
id = xTaskAdd("TASKBLINK", &taskBlink);
xTugasTunggu(id);
// Interval penghitung waktu untuk 'id'
xTaskSetTimer(id, 1000000);
id = xTaskAdd("BUTTON", &buttonRead);
xTugasMulai(id);

lingkaran kosong()
//Ini, dan hanya ini, selalu dalam lingkaran saat menggunakan Helios
xHeliosLoop();

Dengan kode ini, Anda dapat memprogram LED untuk berkedip kapan saja tanpa harus khawatir Arduino tertunda.

Kesimpulan

Proyek ini sangat bagus untuk orang yang baru mengenal Arduino, karena memungkinkan Anda menggunakan kode Arduino biasa untuk menangani tugas waktu nyata. Namun, metode yang dijelaskan dalam artikel ini hanya untuk penggemar dan peneliti. Untuk proyek yang lebih serius, metode lain diperlukan.

5 Kartu Tangkap Game Teratas
Kita semua telah melihat dan menyukai gameplay streaming di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain top yang telah m...
Cara Mengembangkan Game di Linux
Satu dekade yang lalu, tidak banyak pengguna Linux yang memprediksi bahwa sistem operasi favorit mereka suatu hari nanti akan menjadi platform game po...
Port Sumber Terbuka dari Mesin Game Komersial
Rekreasi mesin game gratis, open source, dan lintas platform dapat digunakan untuk bermain lama serta beberapa judul game yang cukup baru. Artikel ini...