Daha gelişmiş projeler için değerleri değiştirmeniz ve verileri gerçek zamanlı olarak okumanız gerekir ki bu Arduino’nun standart gecikme fonksiyonu ile mümkün değildir. Bu nedenle, farklı bir çözüme ihtiyaç vardır. Neyse ki, HeliOS yardımcı olabilir.
Arduino limitleri
Giriş bölümünde belirtildiği gibi, standart Arduino dili birkaç şekilde uygulanabilir. Ancak bir püf noktası var: Arduino çoklu görev yapamaz. Ö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ü bir gecikme kullanırsanız, en uzun gecikmeye sahip LED, siz bir durum değişikliği beklerken diğer LED’lerin yanıp sönmesini engeller.
Düğmenin durumunu kontrol etmek bir eylem gerektirdiğinden, standart yoklama da külfetlidir. Standart bir Arduino’da, adaptörün durumunu veya başka herhangi bir durumu sorgulamak için bir işlev kurmanız gerekir.
Bu sorunları ele alan çözümler olsa da (donanım kesintileri, milifonksiyon ve FreeRTOS uygulaması gibi), bu çözümlerin de sınırlamaları vardır. Bu çözümlerin sorunlarını aşmak için Mannie Peterson Helios’u icat etti. Helios küçük, verimli ve 8 bitlik konsollarda bile çalışabilir.
Gecikme ifadesi düğmenin kontrol edilmesini önleyeceğinden, en iyi ihtimalle güvenilmez olan aşağıdaki kodu göz önünde bulundurun.
int buton =2;//düğme için PIN
int ledPin =4;// LED pin numarası
// değişkenler değişecek:
int buton =0;// Düğmenin durumunu okumak için değişken
Geçersiz Yapmak veya yaratmak(){
// LED pinini çıkış olarak başlat:
pinModu(ledPinVe Üretmek);
pinModu(LED_BUILTINVe Üretmek);
// düğmenin pimini bir giriş olarak başlat:
pinModu(butonVe kayıt olmak);
}
Geçersiz Düğüm(){
// buton değerinin durumunu oku:
buton = Dijital(buton);
// Düğmeye basıldığını doğrulayın. Yani buttonState YÜKSEK:
eğer(buton == yüksek){
dijital yazı(ledPinVe yüksek);// led’i aç
}diğer{
dijital yazı(ledPinVe bir miktar);// LED ışıklar kapalı
}
dijital yazı(LED_BUILTINVe yüksek);// LED’i açın (yüksek voltaj seviyesidir)
gecikme(1000);// biraz bekle
dijital yazı(LED_BUILTINVe bir miktar);// Voltajı düşük yaparak LED’i kapatın
gecikme(1000);// biraz bekle
}
Bu kodu çalıştırdığınızda “ledPin”in normal şekilde yanıp söndüğünü göreceksiniz. Ancak yanmıyorsa veya butona basıldığında yanıyorsa yanıp sönme sırasını geciktirir. Bu programın çalışması için diğer geciktirme yöntemlerine geçiş yapabilirsiniz; Ancak HeliOS bir alternatif sunuyor.
Arduino’ya Gömülü Linux (HeliOS)
Adındaki “OS”ye rağmen, HeliOS bir işletim sistemi değildir: çok görevli bir işlev kitaplığıdır. Ancak, karmaşık kontrol görevlerini basitleştirebilen 21 geri çağırma işlevi uygular. Gerçek zamanlı görevler için, sistem alınan harici bilgileri işlemelidir. Bunun için sistemin çoklu görev yapabilmesi gerekir.
Gerçek zamanlı görevleri gerçekleştirmek için farklı stratejiler kullanılabilir: olay tabanlı stratejiler, çalışma zamanı dengeli stratejiler ve görev bildirim stratejileri. HeliOS ile bu stratejilerden herhangi birini işlev çağrılarıyla kullanabilirsiniz.
FreeRTOS gibi, HeliOS da konsolların çoklu görev özelliklerini geliştirir. Ancak çok karmaşık bir proje planlayan geliştiricilerin FreeRTOS veya başka bir şey kullanması gerekir. Benzer çünkü Helios’un gücünü keşfetmek isteyen meraklılar ve meraklılar tarafından kullanılmak üzere tasarlandı. çoklu görev
helios kurulumu
Arduino kitaplıklarını kullanırken, IDE kullanılarak yenileri kurulabilir. 1.3.5 ve sonraki sürümler için kitaplık yöneticisini kullanmayı seçersiniz.
Alternatif olarak, web sayfasından bir zip dosyası indirebilir ve HeliOS’u yüklemek için kullanabilirsiniz.
HeliOS’u kullanmaya başlamadan önce kodunuza eklemeniz gerektiğini lütfen unutmayın.
Bir örnek
Aşağıdaki kod, LED’in saniyede bir kez yanıp sönmesini sağlamak için kullanılabilir. HeliOS kodunu eklemiş olsak da, sonuç, giriş eğitimi ile aynıdır.
Buradaki temel fark, bir görev oluşturmanız gerektiğidir. Bu iş bekleme moduna alınır ve işin ne zaman çalıştırılacağını söylemek için bir zamanlayıcı ayarlanır. Ayrıca döngünün yalnızca bir ifadesi vardır: xHeliOSLoop(). Bu döngü, setup() komut dosyasında tanımlanan tüm kodu çalıştırır. Kodunuzu planlarken tüm pinleri, sabitleri ve fonksiyonları üst ayara getirmeniz gerekir.
#birleştirmek için
// LED’in durumunu saklamak için kullanılır
Uçucuint liderler =0;
Uçucuint buton =0;
Sabit miktarint buton =2;
Sabit miktarint ledPin =4;
// Bir flaş görevi tanımlayın
Geçersiz பிர்புப்புப்ப்பு(xTaskId_id){
eğer(liderler){
dijital yazı(LED_BUILTINVe bir miktar);
liderler =0;
}diğer{
dijital yazı(LED_BUILTINVe yüksek);
liderler =1;
}
}
}
// Bir düğme okuma görevi tanımlayın
Geçersiz Okuma düğmesi(xTaskId_id){
buton = Dijital(buton);
// Düğmeye basıldığını doğrulayın. Yani buttonState YÜKSEK:
eğer(buton == yüksek){
// LED’i açın:
dijital yazı(ledPinVe yüksek);
}diğer{
// LED’i kapatın:
dijital yazı(ledPinVe bir miktar);
}
}
Geçersiz Yapmak veya yaratmak(){
// id görevlerin kaydını tutar
xTaskId =0;
// Bu, Helios veri yapılarını başlatır
xHeliOSKurulumu();
pinModu(LED_BUILTINVe Üretmek);
pinModu(ledPinVe Üretmek);
// düğmenin pimini bir giriş olarak başlat:
pinModu(butonVe kayıt olmak);
// TaskBlink’i ekleyin ve ardından askıya alın
Kimlik Kartı = xTaskEkle(İş BağlantısıVe&பிர்புப்புப்ப்பு);
xTaskWait(Kimlik Kartı);
// ‘id’ için zamanlayıcı aralığı
xTaskSetTimer(Kimlik KartıVe1.000.000);
Kimlik Kartı = xTaskEkle(“buton”Ve&Okuma düğmesi);
xTaskStart(Kimlik Kartı);
}
Geçersiz Düğüm(){
// Bu ve yalnızca bu, Helios kullanırken her zaman bir döngü içindedir
xHeliosDöngüsü();
}
Bu kod ile Arduino gecikmesinden endişe etmeden LED’i istediğiniz zaman yanıp sönmeye programlayabilirsiniz.
çözüm
Bu proje, Arduino’da yeni olan insanlar için harika çünkü görevleri gerçek zamanlı olarak gerçekleştirmek için normal Arduino kodunu kullanmanıza izin veriyor. Ancak, bu makalede açıklanan yöntem yalnızca meraklılar ve araştırmacılar için tasarlanmıştır. Daha ciddi projeler için başka yöntemlere ihtiyaç vardır.
Diğer gönderilerimize göz at
[wpcin-random-posts]
İlk Yorumu Siz Yapın