Arduino ile millis komutunun kullanımı

Bu yazımızda arduino ile millis komutunun kullanımını inceleyeceğiz. Bu sayede projelerinizde bekleme yapılması gerektiği durumlarda projenizin çalışmasını durdurmadan çalıştırabileceksiniz.

11 Mayıs 2018 493 views 0

Arduino ile projeler yazan hemen hemen herkes delay komutu ile sorun yaşamıştır. Delay komutu bekleme için kullanılan bir komuttur.

Örneğin projenizde 5 saniye bekleme yapılmasını isterseniz delay(5000) komutu ile bu işlemi yapabilirsiniz. Fakat delay komutu görevini bitirene kadar 5 saniye boyunca kod akışı durdurur ve kendisinden sonraki komutların çalışmasını bekletir. Bu durumda projenin çalışma akışı kesintiye uğrar.

Basit bir örnek verecek olursak. Projenizde 1 dakika aralıklarla yanıp sönen bir led olsun. Bu led yanıp sönerken aynı zamanda bir servo motoru 0 ile 180 derece arasında sürekli olarak hareket ettirmeniz gerekiyor. Bu durumda delay komutu ledin 1 dakika aralıkla yanıp sönmesini sağlar fakat sürekli bu işlem yapılacağından servo motorla ilgili kodlara geçilemez ve servo motoru çalışmaz ya da kesik kesik çalışır.

Yukarıdaki örneğe benzer projeleriniz var ise kullanmanız gereken kod delay yerine millis olacaktır.

Millis komutu nedir?

Arduino içinde, güç verildiği andan itibaren başlayarak sürekli olarak zamanı sayan bir zamanlayıcı bulunmaktadır. Bu zamanlayıcı yaklaşık 49,7 günde bir sıfırlanmaktadır. Peki bu 49,7 gün nasıl hesaplanmaktadır. Basitçe zaman milisaniye cisinden unsigned long veri tipinde tutulur. Unsigned long veri tipinin maksimum alabileceği değer 4294967295 dir. Bir günlük zamanı milisaniye cinsinden hesaplayacak olursak,

1000 (milisaniye) x 60 (saniye) x 60(dakika) x 24 (1 gündeki saat)=  86400000 değerini elde ederiz.

unsigned long veri tipinin tutabileceği maksimum değeri bulduğumuz bu değere böldüğümüzde yaklaşık olarak 49,7 sayısını elde ederiz.

4294967295 / 86400000 = 49,7 saat

Arduino ile millis komutu nasıl kullanılır?

Arduinoda millis komutu ile anlık zamanı alabilmek için unsigned long tipinde bir değişken tanımlamalıyız.

unsigned long simdiki_zaman = millis();

Yukarıdaki komut ile arduinodaki anlık zamanı simdiki_zaman değişkenine aktardık.

Şimdi yukarıda bahsettiğimiz 1 saniye aralıklarla led yanıp sönerken aynı zamanda servo motoru 0-180 derece arasında sürekli hareket ettireceğimiz arduino devresini ve kodlarını hazırlayalım.

Yukarıdaki kod ile millis komutunu kullanarak arduino 2 numaralı pine bağlı ledi 1 saniye aralıklarla yakıp söndürüyoruz. Aynı anda servo motoru sürekli olarak 0-180 derece arasında döndürüyoruz.  Bu koddaki bekleme işlemini delay komutu ile yapmış olsaydık servo motorun çalışması bekleme yüzünden etkilenecekti ve proje istediğimiz gibi senkronize bir biçimde çalışmayacaktı.

Değerli arkadaşlar bir yazımızın daha sonuna geldi. Genel anlamda arduino ile millis komutunun kullanımını inceledik. Sizler millis komutunu kendi projelerinizdeki bekleme yapılması gereken yerlerde delay komutu yerine kullanarak daha iyi sonuçlar elde edebilirsiniz.

Soru, öneri, görüş ve yorumlarınızı aşağıdaki yorum alanına yazmaktan çekinmeyiniz.

 

Like
Beğen!Bunu sevdim!Süper!Muhteşem!Eh işte!Beğenmedim!
BENZER KONULAR
YORUM YAZ