Arduino

Arduino için HeliOS

Arduino için HeliOS
Arduino'nun mikro denetleyicileri, sistemin tüm anahtarlarını, LED'lerini ve diğer parçalarını kontrol etmek için tek bir program kullanır. Bir Arduino kullanıcısı tarafından öğrenilen ilk program, tipik olarak, bir LED'i eşit bir düzende açıp kapatmak için gecikme işlevini kullanan 'Blink' programıdır. Bu basit program birçok şeyi yapacak şekilde genişletilebilir, ancak çoklu görev içeremez.

Daha gelişmiş projeler için Arduino'da standart gecikme işlevi ile mümkün olmayan değerleri değiştirmeniz ve verileri gerçek zamanlı olarak okumanız gerekir. Bu nedenle, farklı bir çözüme ihtiyaç var. Neyse ki, HeliOS yardımcı olabilir.

Arduino'nun Sınırlamaları

Giriş bölümünde belirtildiği gibi, bir Arduino'nun standart dili birçok şekilde uygulanabilir. Ancak bir sorun var: Arduino çoklu görev yapamıyor. Örneğin, üç farklı LED'i bağımsız aralıklarla yanıp sönecek şekilde ayarlayamazsınız. Bu görev gerçekleştirilemez çünkü gecikme kullanırsanız, en uzun gecikmeye sahip LED, durum değiştirmeyi beklerken diğer LED'lerin yanıp sönmesini engeller.

Standart yoklama da zahmetlidir, çünkü bir düğmenin durumunu kontrol etmek için bir işlem yapılması gerekir. Standart bir Arduino'da, bir anahtarın durumunu veya başka bir durumu yoklamak için bir işlev ayarlamanız gerekir.

Bu sorunları ele almak için çözümler olsa da (e.g., donanım kesintileri, millis işlevi, FreeRTOS uygulaması), ancak bu çözümlerin de sınırlamaları vardır. Bu çözümlerin sorunlarının üstesinden gelmek için Mannie Peterson, HeliOS'u icat etti. HeliOS küçük ve verimlidir ve 8 bit denetleyicilerde bile çalışabilir.

En iyi ihtimalle güvenilmez olan aşağıdaki kodu göz önünde bulundurun çünkü gecikme ifadesi düğmenin kontrol edilmesini önleyecektir.

int düğmePin = 2; // buton pin numarası
int ledPin = 4; // LED pin numarası
// değişkenler değişecek:
int düğmeDurumu = 0; // buton durumunu okumak için değişken
geçersiz kurulum()
// LED pinini çıkış olarak başlat:
pinMode(ledPin, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
// buton pinini giriş olarak başlat:
pinMode(buttonPin, INPUT);

boşluk döngüsü ()
// buton değerinin durumunu oku:
buttonState = digitalRead(buttonPin);
// butona basılıp basılmadığını kontrol et. Öyleyse, buttonState YÜKSEK'tir:
if (buttonState == YÜKSEK)
digitalWrite(ledPin, YÜKSEK); // LED'i aç
Başka
digitalWrite(ledPin, DÜŞÜK); // LED'i kapat

digitalWrite(LED_BUILTIN, YÜKSEK); // LED'i aç (YÜKSEK voltaj seviyesidir)
gecikme(1000); // bir saniye bekle
digitalWrite(LED_BUILTIN, DÜŞÜK); // voltajı DÜŞÜK yaparak LED'i kapatın
gecikme(1000); // bir saniye bekle

Bu kodu çalıştırdığınızda 'ledPin'in normal şekilde yanıp söneceğini göreceksiniz. Ancak düğmeye bastığınızda yanmaz veya yanarsa yanıp sönme sırasını geciktirir. Bu programın çalışması için diğer gecikme yöntemlerine geçebilirsiniz; ancak, HeliOS bir alternatif sunar.

Arduino'ya Gömülü Linux (HeliOS)

Adındaki “OS” olmasına rağmen, HeliOS bir işletim sistemi değildir: çoklu görev fonksiyonlarının bir kütüphanesidir. Ancak, karmaşık kontrol görevlerini basitleştirebilen 21 işlev çağrısı uygular. Gerçek zamanlı görevler için sistem, alınan harici bilgileri işlemelidir. Bunu yapmak için, sistemin çoklu görev yapabilmesi gerekir.

Gerçek zamanlı görevleri yerine getirmek için çeşitli stratejiler kullanılabilir: olaya dayalı stratejiler, çalışma zamanı dengeli stratejiler ve görev bildirim stratejileri. HeliOS ile bu stratejilerden herhangi birini işlev çağrıları ile kullanabilirsiniz.

FreeRTOS gibi, HeliOS da kontrolörlerin çoklu görev yeteneklerini geliştirir. Bununla birlikte, kritik öneme sahip karmaşık bir proje planlayan geliştiricilerin FreeRTOS veya benzeri bir şey kullanması gerekir çünkü HeliOS, çoklu görevlerin gücünü keşfetmek isteyen meraklılar ve hobiler tarafından kullanılmak üzere tasarlanmıştır.

HeliOS'u Yükleme

Arduino kütüphanelerini kullanırken, IDE ile yeni kütüphaneler kurulabilir. Sürüm 1 için.3.5 ve üzeri, Kütüphane Yöneticisini kullanmayı seçersiniz.


Alternatif olarak, web sayfasından bir zip dosyası indirebilir ve bu dosyayı HeliOS'u kurmak için kullanabilirsiniz.


Lütfen kullanmaya başlamadan önce kodunuza HeliOS'u dahil etmeniz gerektiğini unutmayın.

Misal

Aşağıdaki kod, bir LED'in saniyede bir kez yanıp sönmesini sağlamak için kullanılabilir. HeliOS kodunu eklemiş olsak da, nihai etki, tanıtım öğreticisininkiyle aynıdır.

Buradaki temel fark, bir görev oluşturmanız gerektiğidir. Bu görev bekleme durumuna alınır ve göreve ne zaman çalıştırılacağını söyleyen bir zamanlayıcı ayarlanır. Ayrıca döngü yalnızca bir ifade içerir: xHeliOSLoop(). Bu döngü, kodun setup() içinde tanımlanan tüm kodu çalıştırır. Kodunuzu planlarken tüm pinleri, sabitleri ve fonksiyonları en üst ayarda ayarlamanız gerekir.

#Dahil etmek
//LED'in durumunu saklamak için kullanılır
uçucu int ledState = 0;
uçucu int buttonState = 0;
const int buttonPin = 2;
const int ledPin = 4;
// Bir göz kırpma görevi tanımlayın
void taskBlink(xTaskId id_)
if (ledState)
digitalWrite(LED_BUILTIN, DÜŞÜK);
ledDurum = 0;
Başka
digitalWrite(LED_BUILTIN, YÜKSEK);
ledDurum = 1;



// Bir düğme okuma görevi tanımlayın
geçersiz buttonRead(xTaskId id_)
buttonState = digitalRead(buttonPin);
// butona basılıp basılmadığını kontrol et. Öyleyse, buttonState YÜKSEK'tir:
if (buttonState == YÜKSEK)
// LED'i aç:
digitalWrite(ledPin, YÜKSEK);
Başka
// LED'i kapat:
digitalWrite(ledPin, DÜŞÜK);


geçersiz kurulum()
// id görevlerin kaydını tutar
xTaskId kimliği = 0;
// Bu, Helios veri yapılarını başlatır
xHeliOSSetup();
pinMode(LED_BUILTIN, OUTPUT);
pinMode(ledPin, OUTPUT);
// buton pinini giriş olarak başlat:
pinMode(buttonPin, INPUT);
// Ekle ve sonra taskBlink'i beklet
id = xTaskAdd("TASKBLINK", &taskBlink);
xTaskWait(id);
// 'id' için zamanlayıcı aralığı
xTaskSetTimer(id, 1000000);
id = xTaskAdd("BUTTON", &buttonRead);
xTaskStart(id);

boşluk döngüsü()
//Bu ve yalnızca bu, Helios kullanırken her zaman döngüdedir
xHeliosLoop();

Bu kodla, Arduino'nun gecikmesi konusunda endişelenmenize gerek kalmadan LED'i istediğiniz zaman yanıp sönecek şekilde programlayabilirsiniz.

Sonuç

Bu proje, gerçek zamanlı görevleri yerine getirmek için normal Arduino kodunu kullanmanıza izin verdiği için Arduino'da yeni olan kişiler için harika. Ancak, bu makalede açıklanan yöntem yalnızca hobi sahipleri ve araştırmacılar içindir. Daha ciddi projeler için başka yöntemler gereklidir.

Add Mouse gestures to Windows 10 using these free tools
In recent years computers and operating systems have greatly evolved. There was a time when users had to use commands to navigate through file manager...
Control & manage mouse movement between multiple monitors in Windows 10
Dual Display Mouse Manager lets you control & configure mouse movement between multiple monitors, by slowing down its movements near the border. Windo...
WinMouse lets you customize & improve mouse pointer movement on Windows PC
If you want to improve the default functions of your mouse pointer use freeware WinMouse. It adds more features to help you get the most out of your h...