Arduino ile Zamanlama ve Gecikme: delay(), millis() ve Gerçek Zamanlı Kontrol
Arduino ile Zamanlama ve Gecikme: delay(), millis() ve Gerçek Zamanlı Kontrol
Merhaba Arduino severler!
Bu yazımızda Arduino projelerinizde olmazsa olmaz konulardan biri olan zamanlama ve gecikme fonksiyonlarını inceleyeceğiz. Özellikle delay()
, millis()
fonksiyonlarının ne işe yaradığını, nasıl kullanıldığını ve aralarındaki farkları detaylı bir şekilde anlatmaya çalışacağım. Ayrıca, gerçek zamanlı kontrol konusuna da değinerek projelerinizi daha hassas ve güvenilir hale getirmenize yardımcı olacağım.
delay()
Fonksiyonu: Basit Ama Sınırlayıcı
delay()
fonksiyonu, Arduino programının belirli bir süre boyunca duraklamasını sağlar. Kullanımı oldukça basittir. Örneğin, bir LED'i yakıp söndürmek için aşağıdaki gibi bir kod kullanabilirsiniz:
void setup() {
pinMode(13, OUTPUT); // 13. pini çıkış olarak tanımla
}
void loop() {
digitalWrite(13, HIGH); // LED'i yak
delay(1000); // 1 saniye bekle
digitalWrite(13, LOW); // LED'i söndür
delay(1000); // 1 saniye bekle
}
Bu kod, 13 numaralı pine bağlı olan LED'i 1 saniye yakacak ve 1 saniye söndürecektir. Ancak delay()
fonksiyonunun bir dezavantajı vardır: Arduino işlemcisini belirtilen süre boyunca tamamen bloke eder. Yani, delay()
fonksiyonu çalışırken Arduino başka hiçbir işlem yapamaz.
millis()
Fonksiyonu: Kesintisiz Zamanlama
millis()
fonksiyonu, Arduino'nun başlatılmasından itibaren geçen milisaniye sayısını döndürür. Bu fonksiyon, delay()
'in aksine programın çalışmasını durdurmaz. Bu sayede, aynı anda birden fazla işlemi gerçekleştirebilirsiniz. Örneğin, hem LED'i yakıp söndürebilir hem de bir sensörden veri okuyabilirsiniz.
millis()
fonksiyonunu kullanarak LED'i yakıp söndüren ve aynı zamanda bir potansiyometreden değer okuyan bir örnek kod:
const int ledPin = 13;
const int potPin = A0;
unsigned long previousMillis = 0;
const long interval = 1000; // 1 saniye
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
unsigned long currentMillis = millis();
// LED'i yakıp söndürme işlemi (delay() kullanmadan)
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
digitalWrite(ledPin, !digitalRead(ledPin)); // LED'in durumunu tersine çevir
}
// Potansiyometreden değer okuma
int potValue = analogRead(potPin);
Serial.print("Potansiyometre Değeri: ");
Serial.println(potValue);
delay(10); // Kısa bir gecikme (gerekli değil ama okunabilirliği artırır)
}
Bağlantılar:
- Potansiyometrenin bir ucu -> Arduino GND
- Potansiyometrenin orta ucu (sinyal) -> Arduino A0 pini
- Potansiyometrenin diğer ucu -> Arduino VCC (5V)
- LED'in anot (+) bacağı -> Arduino 13. pini (direnç ile)
- LED'in katot (-) bacağı -> Arduino GND
Bu kodda, millis()
fonksiyonu kullanılarak belirli aralıklarla LED'in durumu değiştirilirken, aynı zamanda potansiyometreden sürekli olarak veri okunmaktadır. delay()
fonksiyonu kullanılsaydı, potansiyometre okuma işlemi LED'in yanıp sönme aralığında duraklayacaktı.
Gerçek Zamanlı Kontrol (Real-Time Control)
Gerçek zamanlı kontrol, bir sistemin belirli bir zaman diliminde belirli bir görevi tamamlamasını gerektiren uygulamalarda önemlidir. millis()
fonksiyonu, bu tür uygulamalar için idealdir çünkü programın çalışmasını durdurmadan zamanlama yapmanıza olanak tanır.
Örneğin, bir robotun belirli bir rotayı izlemesi veya bir otomasyon sisteminin belirli bir sırayla işlemleri gerçekleştirmesi gibi uygulamalarda gerçek zamanlı kontrol önemlidir. Bu tür uygulamalarda, millis()
fonksiyonunu kullanarak zamanlama yapabilir ve sistemin doğru zamanda doğru işlemleri yapmasını sağlayabilirsiniz.
Özet
Bu yazıda, Arduino projelerinizde kullanabileceğiniz temel zamanlama ve gecikme fonksiyonlarını inceledik. delay()
fonksiyonunun basitliği ancak sınırlayıcı olması, millis()
fonksiyonunun ise daha esnek ve güçlü olması üzerinde durduk. Ayrıca, gerçek zamanlı kontrolün ne olduğunu ve neden önemli olduğunu açıkladık.
Umarım bu yazı, Arduino projelerinizde zamanlama ve gecikme konularında size yardımcı olur. Başarılar dilerim!
Etiketler: Arduino, Zamanlama, Gecikme, delay(), millis(), Gerçek Zamanlı Kontrol, RTC, Arduino Eğitim, Elektronik, Robotik, Proje
```
0 yorum: