Herkese merhabalar ! Arduino dersleri serimizin bu yazısında sizlere for döngüsünden bahsedeceğiz ve sonrasında da for döngüsünü kullanarak birlikte kara şimşek uygulaması yapacağız.

Arduino Analog Read ve Seri Haberleşme yazımıza göz atın ! >> Potansiyometre ile değer okuyalım !

Önce For Döngüsünün Mantığına Bakalım

For döngüsü, programlama dillerinde en sık kullanılan döngülerden biridir. Arduino programlamada da sıkça kullanılır ve uygulamaları daha pratik bir yapıda kodlamamızı sağlar. For döngüsü uygulanması istenen işlemin kaç kez tekrar edileceğinin belli olduğu durumlarda kullanılır. Daha net bir ifade ile for döngüsü sayesinde işlemin kaç kez tekrar edileceğini, başlangıç/bitiş değerlerini ve değerler arasındaki artış/azalış miktarını kontrol edebiliriz. Aşağıdaki kod parçacığındaki gibi özetleyebiliriz.

for (başlangıç değeri; döngünün devam etme koşulu; değerdeki değişim)
{
işlemler...
}

Arduino İle Kara Şimşek Uygulaması Yapalım

Kara şimşek devresini kurmadan önce for döngüsünün buradaki işleyişinden bahsetmek istiyorum. Yazının başında da bahsettiğim gibi for döngüsü sayesinde işlemin başlangıç ve bitişini, döngü koşulunu ve değişimini kontrol edebiliyoruz. Kara şimşek devresi: sırayla bir yöne doğru yanma/sönme işlemi yapan, son LED’e geldiğinde ise bu işlemi ters yönde gerçekleştiren bir LED dizisinden oluşmaktadır. Hadi şimdi bu devre için neler gerektiğinden ve devreyi nasıl kuracağımızdan bahsedeyim.

Gerekli malzemeler: ( Not: Kara Şimşek Uygulaması ve 10. Derse Kadar Olan Dersleri “Arduino Başlangıç Seti” İle Yapabilirsiniz. Malzemeler Bu Sette! >)

Eğer malzemelerimiz de hazırsa kara şimşek devresini aşağıdaki gibi kuralım.

Arduino Kara Şimşek Devresi
Arduino Kara Şimşek Devresi

Şimdi de devreyi çalıştırabilmek için gerekli Arduino kodunu yazalım.

int ledler[] = {
  2,
  3,
  4,
  5,
  6,
  7
}; //Değişkenleri belirttiğimiz bir dizi tanımlıyoruz.

void setup() {
  for (int i = 0; i < 6; i++) { //For döngüsünün 6 kez tekrarlanmasını istiyoruz.
    pinMode(ledler[i], OUTPUT); //i değişkenlerini "çıkış" olarak tanımlıyoruz.
  }
}
void loop() {
  for (int i = 0; i < 6; i++) {
    digitalWrite(ledler[i], HIGH);
    delay(20);
    digitalWrite(ledler[i], LOW);
  } //İlk ledden beşinci lede kadar ledler sırasıyla yanıyor. Yani döngüde ilk led yanar, söner ve ikinci led yanar. İkinci led söndüğünde ise üçüncü led yanar ve döngü bu şekilde devam eder.
  for (int j = 5; i > -1; i--) {
    digitalWrite(ledler[j], HIGH);
    delay(20);
    digitalWrite(ledler[j], LOW);
  } //Bu kez ters döngü yapıyoruz. Yani dizinin 5.elemanı olan 7 pinine bağlı led yanar, söner ve bu kez bir önceki led yanar. İşlem bu şekilde devam eder.
} //Bu iki döngü sırası birbirinin tersidir. Bu şekilde ledler sırasıyla ileri ve geri yanıp sönerler.

26 Yorumlar

    • void setup() {
      pinMode(2,OUTPUT); //2 ile 7 arasındaki pinleri çıkış pini olarak tanımladık
      pinMode(3,OUTPUT);
      pinMode(4,OUTPUT);
      pinMode(5,OUTPUT);
      pinMode(6,OUTPUT);
      pinMode(7,OUTPUT);}
      void loop() {
      digitalWrite(2,HIGH);
      delay(100);
      digitalWrite(2, LOW);
      delay(100);
      digitalWrite(3,HIGH);
      delay(100);
      digitalWrite(3, LOW);
      delay(100);
      digitalWrite(4,HIGH);
      delay(100);
      digitalWrite(4, LOW);
      delay(100);
      digitalWrite(5,HIGH);
      delay(100);
      digitalWrite(5, LOW);
      delay(100);
      digitalWrite(6,HIGH);
      delay(100);
      digitalWrite(6, LOW);
      delay(100);
      digitalWrite(7,HIGH);
      delay(100);
      digitalWrite(7, LOW);
      delay(100);
      digitalWrite(6,HIGH);
      delay(100);
      digitalWrite(6, LOW);
      delay(100);
      digitalWrite(5,HIGH);
      delay(100);
      digitalWrite(5, LOW);
      delay(100);
      digitalWrite(4,HIGH);
      delay(100);
      digitalWrite(4, LOW);
      delay(100);
      digitalWrite(3,HIGH);
      delay(100);
      digitalWrite(3, LOW);
      delay(100);
      }

  1. Ben bu devrenin röle li olanını yapmak istiyorum parçaları aldım 8 çıkışlı bi rölem var kod olarak ne yazmalıım 220 ampullerde yapmak istiyorum

  2. int ledler[] = {2,3,4,5,6,7}; //Değişkenleri belirttiğimiz bir dizi tanımlıyoruz.

    void setup()
    {
    for(int i=0; i<6; i++) {//For döngüsünün 6 kez tekrarlanmasını istiyoruz.
    pinMode(ledler[i], OUTPUT); //i değişkenlerini "çıkış" olarak tanımlıyoruz.
    }
    }
    void loop()
    {
    for(int i=0; i-1; i–) {
    digitalWrite(ledler[i], HIGH);
    delay(200);
    digitalWrite(ledler[i], LOW);
    } //Bu kez ters döngü yapıyoruz. Yani dizinin 5.elemanı olan 7 pinine bağlı led yanar, söner ve bu kez bir önceki led yanar. İşlem bu şekilde devam eder.
    } //Bu iki döngü sırası birbirinin tersidir. Bu şekilde ledler sırasıyla

  3. ” for(int j=5; i>-1; i–) ” bu satırda “i”i gördüğünüz yeri “j” olarak değiştirin arkadaşlar, sorunsuz olarak çalışacaktır. Selamlar

  4. hatalı olan satır=> for(int j=5; i>-1; i–)
    i yerine j yazılacak basit bi dikkatsizlik hatası düzeltebilirsiniz.
    teşekkürler dizi kullanımına güzel bir örnek.

  5. kodda ‘j’ olan yerlerin yerine ‘i’ yazın. KODU AŞAĞIYA KOYDUM

    int ledler []= {2,3,4,5,6,7,8,9,10};

    void setup() {
    for(int i=0; i<9; i++){
    pinMode(ledler[i],OUTPUT);
    }
    }
    void loop() {
    for( int i=0;i-1;i–){
    digitalWrite(ledler[i],HIGH);
    delay(100);
    digitalWrite(ledler[i],LOW);
    }
    }

  6. Arduino uno da kapasite sıkıntısı var diyor yeterli alan yok diyor. Yükle komutunu kullandığım zaman devre yi acamiyorum.

  7. //Buyrun size for döngüsü olmadan kara şimşek kodları.

    //hso sırayla yanıp sönen ledler(kara simsek)

    int oled = 2; //2. pin’i oled olarak tanımladık.

    int aled = 3; //3. pin’i aled olarak tanımladık.

    int bled = 4; //4. pin’i bled olarak tanımladık.

    int cled = 5; //5. pin’i cled olarak tanımladık.

    int dled = 6; //6. pin’i dled olarak tanımladık.

    int eled = 7; //7. pin’i eled olarak tanımladık.

    void setup() {

    pinMode (oled, OUTPUT); //8. pin’i çıkış olarak tanımladık.

    pinMode (aled, OUTPUT); //9. pin’i çıkış olarak tanımladık.

    pinMode (bled, OUTPUT); //10. pin’i çıkış olarak tanımladık.

    pinMode (cled, OUTPUT); //11. pin’i çıkış olarak tanımladık.

    pinMode (dled, OUTPUT); //12. pin’i çıkış olarak tanımladık.

    pinMode (eled, OUTPUT); //12. pin’i çıkış olarak tanımladık.

    pinMode (eled, OUTPUT); //8. pin’i çıkış olarak tanımladık.

    pinMode (dled, OUTPUT); //9. pin’i çıkış olarak tanımladık.

    pinMode (cled, OUTPUT); //10. pin’i çıkış olarak tanımladık.

    pinMode (bled, OUTPUT); //11. pin’i çıkış olarak tanımladık.

    pinMode (aled, OUTPUT); //12. pin’i çıkış olarak tanımladık.

    pinMode (oled, OUTPUT); //12. pin’i çıkış olarak tanımladık.
    }

    void loop() {

    digitalWrite (oled, HIGH); //aled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (oled, LOW); //aled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (aled, HIGH); //aled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (aled, LOW); //aled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (bled, HIGH); //bled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (bled, LOW); //bled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (cled, HIGH); // cled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (cled, LOW); //cled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (dled, HIGH); // dled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (dled, LOW); //dled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (eled, HIGH); //eled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (eled, LOW); //eled’in enerjisini kestik.

    digitalWrite (eled, HIGH); //aled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (eled, LOW); //aled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (dled, HIGH); //aled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (dled, LOW); //aled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (cled, HIGH); //bled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (cled, LOW); //bled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (bled, HIGH); // cled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (bled, LOW); //cled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (aled, HIGH); // dled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (aled, LOW); //dled’in enerjisini kestik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (oled, HIGH); //eled’e enerji verdik.

    delay (50); //0.1s boyunca yanmasını sağladık

    digitalWrite (oled, LOW); //eled’in enerjisini kestik.

    }

    • kodlarda değişiklik yaptım ama yorum kısmındaki açıklamaları düzenlemedim o nedenle yorumlara fazla takılmayın bu sadece sırasıyla yanan ledlerdi ben kara şimşeğe çevirdim 🙂

  8. // Bu da for döngüsü ile kısa kod yazarak aynı işlemi yapmanız için

    int pinArray[] = {2, 3, 4, 5, 6, 7};
    int count = 0;
    int timer = 100;

    void setup(){
    for (count=0;count<6;count++) {
    pinMode(pinArray[count], OUTPUT);
    }
    }

    void loop() {
    for (count=0;count=0;count–) {
    digitalWrite(pinArray[count], HIGH);
    delay(timer);
    digitalWrite(pinArray[count], LOW);
    delay(timer);
    }
    }

  9. for döngüsünde şu şekilde bir kullanım söz konusu olabilir mi? Yapıyorum çalışmıyor acaba sebebi nedir ?
    void loop() {
    for(int i=500; i<=300 ; i=i-50){
    digitalWrite(10,HIGH);
    delay(i);
    digitalWrite(10,LOW);
    delay(i);
    }}

  10. Kodu bu şekilde yazarsanız sorunsuz çalışacaktır. Delay sürelerini kendinize göre değiştirerek ledlerin hızını ayarlayabilirsiniz. Ben 8 ledli yaptım, siz led sayısını arttırıp azaltabilirsiniz fakat programı buna göre düüzenlemelsiniz.

    int ledler[] = {2,3,4,5,6,7,8,9}; //Değişkenleri belirttiğimiz bir dizi tanımlıyoruz.

    void setup() {
    for(int i=0; i<8; i++) { //For döngüsünün 8 kez tekrarlanmasını istiyoruz.
    pinMode(ledler[i], OUTPUT); //i değişkenlerini "çıkış" olarak tanımlıyoruz.
    }
    }
    void loop(){
    for(int i=0; i-1; j–) {
    digitalWrite(ledler[j], HIGH);
    delay(50);
    digitalWrite(ledler[j], LOW);
    delay(10);
    } //Bu kez ters döngü yapıyoruz. Yani dizinin 8.elemanı olan 9 pinine bağlı led yanar, söner ve bu kez bir önceki led yanar. İşlem bu şekilde devam eder.
    } //Bu iki döngü sırası birbirinin tersidir. Bu şekilde ledler sırasıyla ileri ve geri yanıp sönerler.

    • Kodda bir hata oluşmuş, dogrusu bu şekilde. Kusura bakmayın…

      int ledler[] = {2,3,4,5,6,7,8,9}; //Değişkenleri belirttiğimiz bir dizi tanımlıyoruz.

      void setup() {
      for(int i=0; i<8; i++) { //For döngüsünün 8 kez tekrarlanmasını istiyoruz.
      pinMode(ledler[i], OUTPUT); // i değişkenlerini "çıkış" olarak tanımlıyoruz.
      }
      }
      void loop() {
      for(int i=0; i-1; j–) {
      digitalWrite(ledler[j], HIGH);
      delay(50);
      digitalWrite(ledler[j], LOW);
      delay(10);
      } //Bu kez ters döngü yapıyoruz. Yani dizinin 8.elemanı olan 9 pinine bağlı led yanar, söner ve bu kez bir önceki led yanar. İşlem bu şekilde devam eder.
      } //Bu iki döngü sırası birbirinin tersidir. Bu şekilde ledler sırasıyla ileri ve geri yanıp sönerler.

  11. sisteminizde sorun var doğruluğunu kontrol edip gönderdiğim kodlar eksik ve hatalı olarak cıkıyor. lütfen yorumlarımı silin.

  12. teşekkürler çok yardımcı oldunuz. (int j = 5; i > -1; i–) kodlardaki tek hata burasıdır. i olanları j olarak değiştirirseniz sorunsuz çalışıyor. Çokta büyütecek bir şey yok. Düzeltilebilir.

CEVAP VER

Please enter your comment!
Please enter your name here