Print this page
Arduino'da Döngüler (for, while, do ... while ) (Arduino Programlama, 8)

Arduino'da Döngüler (for, while, do ... while ) (Arduino Programlama, 8) Featured

Rate this item
(2 votes)

Döngüler belirli bir koşul ile tekrar eden kod bloklarıdır.

For Döngüsü:

Belirlenen koşulun gerçekleşene kadar döngü içindeki kod bloğu tekrar eder. Hemen kullanımını ve örnek uygulamasını yapalım.

for (başlama;koşul;artış) {
  // kodlar
}



Örnek uygulama.

 

void setup() {
Serial.begin(9600); //seri ekran başlatıldı
}
void loop() {
for (int i = 0; i <= 10; i++) //i++ ifadesiyle i=i+1 aynıdır. dilerseniz i=i+2 ifadesini kullanarak artış miktarını değiştirebilirsiniz.
  { //döngü başladı
    Serial.println(i);
    delay(500);
  }
  //döngü bitti
}
 

/*
0'dan 10'a kadar sayıları ekrana yazan program.
Burada i değerini ilk etapta 0(sıfır) olarak atadık.
şartımızı yazdık hemen yanına : i değerinin 10dan küçük eşit olması
son olarak da artış miktarını ayzdık: i++ (bir artır demek)
i değeri 10 olduğunda döngüden çıktı.
*/

 

Şimdi for döngüsünü kullanarak bir ledin parlaklığını artıralım.
Düşünelim ve hatırlayalım. 

Ledin parlaklığını artırmak istiyorsak analog – dijital sinyallerden hangisini kullanmam lazım?
Arduino’da hangi pinlere takabilirim ledin + (uzun) bacağını?
Ledi giriş mi çıkış mı tanımlayacağız?
Ledin parlaklığını 0’dan kaça kadar artırmam lazım? 255? 1024?
Bu işlemi nasıl yapacağız? analogRead, anallogWrite?

Düşündük :)
Sadece ledi yak söndür yapmayacağımız için, belirli bir aralıkta bir çok değeri kullanacağımız için analog sinyal kullanacağız.
Arduinoda analog çıkış pinleri (PWM) yanında yaklaşık “~” işareti olan pinlerdir. Arduino uno için 3,5,6,9,10,11 numaralı pinlerden istediğimiz birini kullanabiliriz.
Ledi çıkış olarak tanımlıyoruz.
Dijital pinlerin 8 bitlik olduğunu ve alabildikleri maksimumum değerin 255 olduğunu biliyoruz. (2 tabanındaki 8 bitlik en büyük sayı 256’dır, 0 dan başladığı için 255’e kadar değer alabilir.)
Bu işlemi for döngüsüyle yapabiliriz.

 

#define led 3  // 3 numaralı pine ledimizi bağladık

void setup() {

Serial.begin(9600); //seri ekran başlatıldı

}

void loop() {
for (int i = 0; i <= 255; i++) //i++ ifadesiyle i=i+1 aynıdır. dilerseniz i=i+2 ifadesini kullanarak artış miktarını değiştirebilirsiniz.

  { //döngü başladı
    analogWrite(led,i);  // lede i'nin o anki değerini gönderdik.
    Serial.println(i); // değerleri seri ekrandan okumak için ekrana da yazdırdık.
    delay(30);
    // delay(30) ledin her bir değerde beklemesini istediğimiz süre, milisaniye.. bu değeri değiştirerek ledin hızlı  bir  şekilde parlaklığa ulaşmasını sağlayabilirsiniz.
  }
  //döngü bitti
}


//Ledin parlaklığını sıfırdan maksimumuma çıkaran bir program yazdık.

 

Şimdi dikkat ettiyseniz, ledimiz en parlak ana geliyor ve sonra en az ışık yayarak baştan yanıyor.  Parlaklığı en yüksek seviyeye gelince, yavaş yavaş en düşük seviyeye gelmesini istersek ne yapabiliriz? Kodda nasıl bir değişiklik yapmamız gerekir.

İsterseniz döngü içine bir kontrol ifadesiyle, isterseniz iki döngüyle yapabilirsiniz.

 

While döngüsü

while döngüsünde döngü başlarken bir koşul tanımlanır. Ve döngü içinde bu koşulun sağlandığı durumda, döngüden çıkılır. Kullanımı ve örneklerle somutlaştıralım.

while (koşul) {
  // kodlar
}

Örnek:

void setup() {
Serial.begin(9600);
}

0’dan 10’a kadar olan sayıları ekrana yazan programı while döngüsü ile yapalım.
void loop() 
{
int x = 0; // x değerini int olarak tanımladık
while (x <= 10) // x değeri 10'a küçük eşit mi
{ //döngü başladı
  Serial.println(x);  //seri porta yaz
  x++;   //x değerini bir artır dilersek x=x+1
  delay(500);  // yarım saniye bekle..
}
//döngü bitti

}

 

 

Do .. while Döngüsü:

while döngüsünden tek farkı, döngü koşulunun döngü bir kez çalıştıktan sonra test edilmesidir. Bir de koşuldan sonra noktalı virgül kullanmamız gerekmektedir.

do {
  // kodlar
} while (koşul);

0’dan 10’a kadar olan sayıları ekrana yazan programı do …  while döngüsü ile yapalım.

 

void setup() {
Serial.begin(9600);
}

void loop() {
int x = 0; // x değerini int olarak tanımladık

do
{ //döngü başladı
  Serial.println(x);  //seri porta yaz
  x++;   //x değerini bir artır dilersek x=x+1
  delay(500);  // yarım saniye bekle..
}
while (x <= 10); // x değeri 10'a küçük eşit mi
//döngü bitti

}

 

Share:

Latest from RAM