1 sn = 1000 ms = 1000000 µs.
delay(ms)
ms : duraklatılacak milisaniye sayısı. İzin verilen veri türleri: unsigned long
Program akışına milisaniye cinsinden bekletme verir. 1 saniyelik gecikmeye ihtiyacımız var o zaman delay(1000); kullanırız. Şunu unutmamalıyız ki delay Arduino’ yu tamamen durdurur, delay ileri seviye programlarda tavsiye edilmeyen bir durumdur. Örneğin; bir ledimiz 1’er saniye aralıklarla yanıp sönsün aynı zamanda butona basılıp basılmadığını kontrol etmek istersek edemeyiz. Program sağlıklı olmaz. Bunu çözmek için interruptlar veya timerlar kullanılır. İleri seviye kullanıcılar 10ms’den büyük beklemeler için başka metotlar kullanır.
delayMicroseconds(mikrosaniye)
µs: duraklatılacak mikrosaniye sayısı. İzin verilen veri türleri: unsigned int
Program akışına mikrosaniye cinsinden bekletme verir. Bu işlev 3 mikrosaniye ve daha yüksek aralıklarda çok hassas bir şekilde çalışır. Birkaç bin mikrosaniyeden daha uzun gecikmeler için delay() kullanmalısınız.
micros()
zaman=micros(). "zaman" değişkeni veri türü unsigned long.
Arduino kartı geçerli programı çalıştırmaya başladığından bu yana mikrosaniye sayısını döndürür. Bu sayı yaklaşık 70 dakika sonra taşacaktır (sıfıra geri dönecektir). Çünkü bellekte ayrılan unsigned long kadar yer dolacaktır.
Arduino başka işlemler yaparken hatta delay() ile çalışma esnasında bekleme bile yapsa micros() komutu paralelde çalışmaya devam eder ve bekleme komutundan etkilenmez.
millis()
zaman=millis(). "zaman" değişkeni veri türü unsigned long.
Arduino kartının geçerli programı çalıştırmaya başlamasından bu yana geçen milisaniye sayısını döndürür. Bu sayı yaklaşık 50 gün sonra taşacak (sıfıra geri dönecektir). Çünkü bellekte ayrılan unsigned long kadar yer dolacaktır.
Arduino başka işlemler yaparken, hatta delay() ile çalışma esnasında bekleme bile yapsa millis() komutu paralelde çalışmaya devam eder ve bekleme komutundan etkilenmez.
Örnek Program Kodları:
unsigned long zaman1,zaman2;
void setup()
{
Serial.begin(9600);
Serial.println("delay ms bekliyor...");
delay(1000);
Serial.println("delay mikrosn bekliyor...");
delayMicroseconds(1000);
Serial.println("bitti");
}
void loop()
{
zaman1=micros();
Serial.print("zaman1= "); Serial.println(zaman1);
delay(1000);
zaman2=millis();
Serial.print("zaman2= "); Serial.println(zaman2);
delay(1000);
}
delay() komutu kullanmadan bir Led'in belirli aralıklarla yanıp-sönmesini sağlayan program:
Aşağıda yaptığımız uygulamada millis() komutu ile Led'in 1 ms aralıklarla yanıp-sönmesini sağlarken, butona bastığımızda ekrana "butona basıldı" yazısının yazdırılmasını sağladık.
delay() komutunu ile bekleme yaptığımızda program işleyişi bir süre durdurulduğu için Arduino bu bekleme esnasında dışarıdan gelen bazı bilgilere, girişlere vs. kapalı kalabilir, algılayamayabilir. Bunun için ledin yanıp sönme süresini millis() komutu ile kontrol ederek, Arduino'nun dıştan gelen verilere duyarsız kalmasının önüne geçmiş oluruz.
Örnek Program Kodları:
#define buton 3
#define led 2
unsigned long simdiki_zaman = 0;
unsigned long eski_zaman = 0;
bool led_durum = 0;
void setup()
{
Serial.begin(9600);
pinMode(buton, INPUT);
pinMode(led, OUTPUT);
}
void loop()
{
if (digitalRead(buton) == 1)
{
Serial.println("butona basıldı");
while (digitalRead(buton) == 1)
{
delay(10);
}
}
simdiki_zaman = millis();
if (simdiki_zaman - eski_zaman > 1000)
{
led_durum = !led_durum; //led_durum eşittir led_durumun tersi. yani 1 ise 0, 0 ise 1 yapar.
eski_zaman = simdiki_zaman;
}
digitalWrite(led, led_durum);
}
_________________________________________________________________________________________________________________________________________________________
0 comments:
Yorum Gönder