16 Nisan 2020 Perşembe

Arduino ile Kara Şimşek ve For Döngüsü

Bir önceki dersimizde Arduino ile Programlama dersine giriş yaptık ve bir ledi yakıp-söndürme işlemini kodlayarak yapmıştık. Tabii sadece bunlar değil bazı basit elektronik bilgileri de verdik. Bir önceki derse buradan ulaşabilirsiniz.
Bu dersimizde ise yanda gördüğünüz ışık oyunu diğer adıyla kara şimşek olarak bilinen ışık devresini yapacağız.



Bu devreyi 5 tane led üzerinden yapacağız. Ledler çalışma tahtasına yandaki gibi yerleştirilip dirençlerin de topraklamaya (GND) bağlanması gerekir.


Yukarıda ledlerin eksi uçlarına dirençleri bağladık. Ledlerin artı uçlarını ise Arduino'da dijital uçlardan sırasıyla 1,2,3,4 ve 5. uçlara bağlayacağız. Resimde görüldüğü üzere renkli kablolar dijital pinlerden çıkıp ledlerin artı uçlarına bağlanmıştır. Bu şekilde elektronik bağlantıyı yapmış bulunmaktayız. Artık kodlamaya geçebiliriz.
Bir ledi yakıp söndürmek için ;
  • digitalWrite(1,HIGH);
  • delay(200);
  • digitalWrite(1,LOW);
  • delay(200);

kod bloğunu kullanırız. 5 ledi yakıp söndürmek için;

void setup() {
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
}

void loop() {
digitalWrite(1,HIGH);
delay(200);
digitalWrite(2,HIGH);
delay(200);
digitalWrite(3,HIGH);
delay(200);
digitalWrite(4,HIGH);
delay(200);
digitalWrite(5,HIGH);
delay(200);
digitalWrite(5,LOW);
delay(200);
digitalWrite(4,LOW);
delay(200);
digitalWrite(3,LOW);
delay(200);
digitalWrite(2,LOW);
delay(200);
digitalWrite(1,LOW);
delay(200);
}

Önce pinMode ile kullanacağımız dijital pinler OUTPUT yani çıkış moduna ayarlanıyor. Ardından programın ana bölümünde her bir led sırasıyla 200ms arayla HIGH yapılıyor yani ledlere elektrik veriliyor ve ardından her bir led 200ms arayla LOW yapılıyor yani ledlere elektrik verilmiyor. Bu şekilde kara şimşek diye tabir edilen ışık oyunu elde ediliyor. Fakat bu yöntemde led sayısı ile orantılı olarak kod satır sayısı da artacaktır. Programlamada mümkün olduğunda az satırla en verimli kodları yazmak gerekir. Bu yüzden bu yöntemimizi değiştirmemiz lazım. Fark ettiyseniz ledler 1,2,3,4,5 ve 5,4,3,2,1 şeklinde ardışık olarak sıralandı. Bu durumda bir döngü kullanırsak kodları azaltarak daha verimli bir kodlama yapmış olur. Bu döngü FOR DÖNGÜSÜdür.


  • int say;
  • void setup() {
  • for(say=1;say<=5;say++)
  • {pinMode(say,OUTPUT);}
  • }
  • void loop() {
  • for(say=1;say<=5;say++)
  •  {
  •   digitalWrite(say,HIGH);
  •   delay(200);
  •  }
  • for(say=5;say>=1;say--)
  •  {
  •   digitalWrite(say,LOW);
  •   delay(200);
  •  }
  • }





İlk örnekte 25 satır kod yazmıştık. For döngüsünü kullanarak 8 satır kod yazmış olduk. İlk örnekte led sayısını artırırsak bu kod satırları daha da artacak fakat for döngüsü ile yapılan kodlarda sayı değişmeyecek.

İlk olarak pinMode ile pinleri ayrı ayrı OUTPUT yapmak yerine for döngüsü ile tek seferde yaptık. 
  • for(say=1;say<=5;say++)
  • {pinMode(say,OUTPUT);}
  • for içine bir değişken ile başlangıç değeri verdik (say=1)
    say adında bir değişkeni biz belirledik. Bu değişkene başka bir isim de verebiliriz.

    Bu belirlediğimiz değişkeni programın başında tanıtmak lazım. say değişkeni bizim kullanacağımız 1,2,3,4,5 sayılarını içerecek. Bunu int say; kod satırıyla yapıyoruz. burada int değişkenin sayı olduğunu yani integer türünde olduğunu gösterir. 
  • Ardından bitiş değeri olan say<=5 eşitliğini belirttik.
    Son olarak artış değeri verdik. Birer birer artacağı için say=say+1 yani say++ ifadesini kullandık. say=say+1 demek say değişkenin ilk değerine 1 ekle ve yeni değeri bu olsun. 
  • Yani for önce 1 ile başlar süs parantez içindeki kodları çalıştırır sonra geri döner ve değişim miktarına göre değişkeni artırır. 1 ile başladığından sonraki yeni değeri 2 olur. Bu şekilde 5'e eşit oluncaya kadar döngü çalışır ve 5 bittikten sonra 6 olduğunda döngü içi yani süslü parantez içindeki kodlar çalışmaz. Bu kısım setup yani kurulum kısmı idi. Gelelim ana kodların olduğu kısıma yani loop kısmına;
  • void loop() {
  • for(say=1;say<=5;say++)
  •  {
  •   digitalWrite(say,HIGH);
  •   delay(200);
  •  }
  • for(say=5;say>=1;say--)
  •  {
  •   digitalWrite(say,LOW);
  •   delay(200);
  •  }
  • }

    Burada iki tane for döngüsü kullandık çünkü önce ledlere HIGH değeri vereceğiz sonra da LOW. İlk olarak for döngüsü 1'den 5'e kadar çalışıyor ve 5 ledi sırasıyla yakıyor. Sonraki for döngüsü ise ters çalışıyor. Başlangıç değeri 5 oluyor bitiş değeri ise 1. Yani 5'ten 1'e eşit oluncaya kadar çalışıyor. Bu ikinci döngüde değişim miktarı 5'ten 1'e azalacağı için eksi olması yani say=say-1 yani say-- olması gerekir.
For döngüsü sayesinde daha az kod satırı yazmış olduk.

for(başlangıç değeri;bitiş değeri;değişim miktarı)

{for döngüsünün çalıştıracağı kodlar buraya yani süslü parantezler içine yazılır}

Değişim miktarı bu örnekte birer birer fakat bu miktarı biz istediğimiz gibi yapabiliriz. Mesela 2,4,6,8,10 pinleri arasında işlem yapacak olursak for döngüsü;
for(a=2;a<=10;a=a+2) şeklinde olur.

Hiç yorum yok:

Yorum Gönder