Home Arduino Arduino Millis (Multi Tasking) kullanımı

Arduino Millis (Multi Tasking) kullanımı

by onurnp

Millis + Arduino = Multitasking ?

Merhabalar Arkadaşlar bugün sizlerle Arduino Millis fonksiyonuna değineceğim.Bu Fonksiyon led yakıp söndürecek yeni arkadaşlarımız için çok gerekli bir fonksiyon olmasa da ilerleyen zaman da Kesinlikle yollarının kesişeceği bir fonksiyondur. Ki Sen Bu yazıyı okuyorsan belli ki sende artık bu iş delaylar ile olmayacak diyorsun ki buradasın 🙂

Nedir bu millis fonksiyonu ?

Arkadaşlar Millis fonksiyonu mikrodenetleyicinin çalıştığı andan itibaren mikrosaniyede bir artan bir sayaçtır. Biz arduino olsun diğer denetleyiciler olsun komutlar arasına bazı gecikmeler koyarız delay(1000) gibi işlemci bu delay satırına geldiğinde tamamen durur eğer bir sensör okutuyorsanız vs.. İşte o bekleme esnasında işlemci hiç bir girdiği okumaz diğer tüm işlemler askıda kalır ki buda bu kadar akıllı ve muhteşem bir aygıtı aptallaştırmaktan başka bir şey değildir.

Profesyoneller genelde bu gibi takılmalara mahal vermemek için timer yada Millis fonksiyonunu kullanırlar. Örneğin stm32 mikrodenetlecilerin de de systick kullanırız. Millis fonksiyonu yaptığınız işlemlerden bağımsız olarak çalıştığı için tam olarak doğru olmasa da multitanking işlemi olur ve neredeyse durmaksızın diğer işlerimizi yapar. Yaparken dilediğin fonksiyonu belirlediğiniz süre dolana kadar arkaya atıp beklemesini sağlar umarım yeterince basitçe anlatabilmişimdir 🙂

Şimdi gelelim Arduino Millis fonksiyonumuza

millis();

Millis fonksiyonumuz budur.

Şimdi nasıl çalıştığını anlamak için Arduino ide ile yeni bir proje oluştur ve Komple aşağıdaki kodu yapıştırıp derleyin. Sonrasında Araçlar>Serial Port ekranını açın.

void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
Serial.println(millis());
}

Gördüğünüz üzere millis fonksiyonumuz hızla sayıyor. Şimdi Millis Fonksiyonunu gecikme olarak kullanabilmemiz için yapımızı oluşturalım.

Ben burada led pinlerini vs size anlatıp kafa karıştırmıycam doğrudan millis yapısını oluşturacağım eğer yapamazsanız bütün kod aşağıda olacak.. İlk önce eski zamani karsilastirabilmek için satirin en basina long degerinde bir degisken atayalım ben bunu oncekizaman diye atadım.

unsigned long oncekizaman = 0;

Sonra bekleme suresini tuttuğumuz bir degisken atayalım ben bunu bekle diye atadim. Dilerseniz degisken atamak yerine kosula doğrudan süreyi yazabilirsiniz.

int long bekle = 1000; 

Şimdi Koşulumuzu oluşturalım bu koşulumuz da millis zamani sizin bekle zamanınız kadar ilerlemiş mi onu kontrol edeceğiz. Eğer süre geçmişse koşul oluşmuştur ve koşul satırına girecek girdiği gibi sonraki atlama süresini güncellemek adına hemen süre güncellemesini yaptık aşağıda inceleyebilirsiniz.

if (simdikizaman - oncekizaman >= bekle) // gecikme suremiz doldu mu diye kosul ekledik
  {
    oncekizaman = simdikizaman; // kosul satirina girdigine gore zaman dolmus simdi eski zamani simdiki zamanla yeniliyoruz.
   }

Evet arkadaşlar Millisi delay olarak kullanma yapımızı genel olarak oluşturduk dilerseniz aşağıdaki tam kod bloğu kopyalayıp projenizi deneyebilirsiniz.

const int ledPin =  12; // ledimizi 12. pine bagladik
int ledState = LOW;      // baslangici low olarak ayarladik.      

unsigned long oncekizaman = 0; // millis zaman farkini karsilastirmasi için onceki zaman degiskenimizi atadik.

int long bekle = 1000; // bekliyecegi sure milisaniye cinsinden atadik.


void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);  //  serial port aktif ettik
pinMode(ledPin, OUTPUT);  // led pinimizi cikis olarak atadik.
}

void loop() {
  // put your main code here, to run repeatedly:
  unsigned long simdikizaman = millis(); // Blog satatirinin en basina simdiki zamani kaydettik.
Serial.println(millis()); // serial porttanda millisin zamanini gorebiliriz.

  if (simdikizaman - oncekizaman >= bekle) // gecikme suremiz doldu mu diye kosul ekledik
  {
    oncekizaman = simdikizaman; // kosul satirina girdigine gore zaman dolmus simdi eski zamani simdiki zamanla yeniliyoruz.

    if (ledState == LOW) // ledimiz sonukse yaktik yaniksa sondurduk.
    {Serial.println("led yandi");
      ledState = HIGH;
    } else {
      Serial.println("led sondu");
      ledState = LOW;
    }

}

}

Arduino Millis Herşey tamam!

Ledimiz 1 sn aralıkla durmaksızın yanıyor farkettiyseniz serial ekranda hiç takılma yada duraklama olmadı Multitasking olarak işlemimizi gerçekleştirdik. Umarım Faydalı olmuştur arkadaşlar Sosyal Medya hesaplarımızdan bizi takip etmeyi unutmayın İyi Çalışmalar.

Arduino ledli devre örneği

You may also like