loop etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Arduino Programlama Dili: Temel Yapılar (Loop)

Arduino Programlama Dili: Temel Yapılar (Loop)

Arduino Programlama Dili: Temel Yapılar (Döngüler - Loop)

Merhaba Arduino severler! Bu yazımızda Arduino programlamanın temel taşlarından biri olan ve kodumuzun tekrar tekrar çalışmasını sağlayan döngüler (loop) konusuna değineceğiz. Arduino ile projeler geliştirirken sensörlerden veri okumak, LED'leri yakıp söndürmek veya motorları kontrol etmek gibi işlemleri sürekli olarak yapmamız gerekir. İşte bu noktada döngüler devreye girer ve işimizi oldukça kolaylaştırır.

Arduino'da Döngüler Neden Önemli?

Döngüler sayesinde:

  • Kod tekrarından kurtuluruz. Aynı kod bloğunu defalarca yazmak yerine, döngü kullanarak tek seferde istediğimiz kadar tekrar edebiliriz.
  • Programımızı daha okunaklı ve anlaşılır hale getiririz.
  • Projemizin karmaşıklığını azaltırız.
  • Gerçek zamanlı uygulamalar geliştirebiliriz (Örneğin, sürekli olarak sensör değerlerini okuyup tepki vermek).

Arduino'da Kullanılan Temel Döngüler

Arduino programlamada en sık kullanılan döngüler şunlardır:

  • void loop(): Arduino programının ana döngüsüdür. setup() fonksiyonu bir kez çalıştıktan sonra, loop() fonksiyonu sonsuza kadar tekrar tekrar çalışır.
  • for Döngüsü: Belirli bir sayıda tekrar yapmak istediğimizde kullanırız.
  • while Döngüsü: Belirli bir koşul sağlandığı sürece tekrar eden bir döngüdür.
  • do...while Döngüsü: while döngüsüne benzer ancak koşul döngünün sonunda kontrol edilir, bu nedenle döngü en az bir kere çalışır.

void loop() Döngüsü

Arduino IDE'si ile yeni bir proje oluşturduğumuzda karşımıza çıkan temel yapıdır. Arduino kartımız enerji verildiği sürece bu döngü sürekli çalışmaya devam eder. Örneğin, bir LED'i yakıp söndürmek için kullanabiliriz:


 void setup() {
  // LED'in bağlı olduğu pini çıkış olarak tanımlıyoruz.
  pinMode(13, OUTPUT);
 }

 void loop() {
  // LED'i yak.
  digitalWrite(13, HIGH);
  delay(1000); // 1 saniye bekle.

  // LED'i söndür.
  digitalWrite(13, LOW);
  delay(1000); // 1 saniye bekle.
 }
 

Yukarıdaki kodda, LED'i 1 saniye yakıp 1 saniye söndürerek sürekli tekrarlayan bir yanıp sönme efekti oluşturuyoruz.

Devre Bağlantısı:

  • LED anot (+) -> 220 Ohm direnç -> Arduino Dijital Pin 13
  • LED katot (-) -> Arduino GND

for Döngüsü

for döngüsü, belirli bir sayıda tekrar yapmak istediğimizde idealdir. Üç bölümden oluşur:

  • Başlangıç: Döngünün başlangıcında sadece bir kez çalıştırılan kısım. Genellikle bir sayaç değişkeni tanımlanır ve başlangıç değeri atanır.
  • Koşul: Döngünün devam edip etmeyeceğini belirleyen koşul. Koşul doğru (true) olduğu sürece döngü çalışmaya devam eder.
  • Artış/Azalış: Her döngü tekrarından sonra sayaç değişkeninin değerini günceller.

Örneğin, 1'den 10'a kadar olan sayıları seri monitöre yazdırmak için for döngüsünü şu şekilde kullanabiliriz:


 void setup() {
  Serial.begin(9600); // Seri iletişimi başlatıyoruz.
 }

 void loop() {
  for (int i = 1; i <= 10; i++) {
   Serial.println(i);
   delay(500); // 0.5 saniye bekle.
  }
  delay(5000); // 5 saniye bekle ve tekrar başla.
 }
 

while Döngüsü

while döngüsü, belirli bir koşul sağlandığı sürece tekrar eden bir döngüdür. Koşul başlangıçta kontrol edilir. Koşul yanlış (false) ise döngü hiç çalışmaz.

Örneğin, bir butona basılana kadar beklemek için while döngüsünü kullanabiliriz:


 const int buttonPin = 2; // Butonun bağlı olduğu pin.

 void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT_PULLUP); // Dahili pull-up direnci kullanıyoruz.
 }

 void loop() {
  while (digitalRead(buttonPin) == HIGH) {
   // Butona basılana kadar bekle.
   Serial.println("Butona basılmasını bekliyorum...");
   delay(100);
  }

  Serial.println("Butona basıldı!");
  delay(1000); // 1 saniye bekle ve tekrar başla.
 }
 

Devre Bağlantısı:

  • Buton bir bacağı -> Arduino Dijital Pin 2
  • Buton diğer bacağı -> Arduino GND

Bu kodda, dahili pull-up direnci kullanıldığı için butona basılmadığında pin HIGH değerini alır. Butona basıldığında ise pin LOW değerini alır. while döngüsü, buton HIGH olduğu sürece (yani basılmadığı sürece) çalışmaya devam eder.

do...while Döngüsü

do...while döngüsü, while döngüsüne benzer ancak koşul döngünün sonunda kontrol edilir. Bu nedenle döngü en az bir kere çalışır.


 int sayac = 0;

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

 void loop() {
  do {
   Serial.println(sayac);
   sayac++;
   delay(500);
  } while (sayac <= 5);

  delay(5000); // 5 saniye bekle ve tekrar başla.
  sayac = 0; // Sayacı sıfırla.
 }
 

Bu örnekte, sayaç 0'dan başlar ve her döngüde ekrana yazdırılır ve 1 artırılır. Koşul döngünün sonunda kontrol edildiği için, sayaç değeri 0 olduğunda ekrana yazdırılır ve sonra sayaç değeri 1 olur. Döngü, sayaç 5'e eşit veya küçük olduğu sürece devam eder.

Sonuç

Bu yazımızda Arduino programlamanın temel döngü yapılarını inceledik. loop(), for, while ve do...while döngüleri, Arduino projelerinizde tekrar eden işlemleri kolayca gerçekleştirmek için güçlü araçlardır. Umarım bu bilgiler, Arduino yolculuğunuzda size yardımcı olur. Bir sonraki yazımızda görüşmek üzere!

Etiketler: Arduino, Programlama, Döngü, Loop, for, while, do-while, Arduino Dersleri, Arduino Temelleri

```

Fonksiyonlar İçine Değişken Atama (Arduino Programlama - C/C++ dersleri 3)

Merhaba arkadaşlar bu yazımda daha önce oluşturduğumuz fonksiyonları biraz daha özelleştireceğiz ve parantez içine bir şeyler ekleyip eklediğimiz şeylere göre farklı sonuçlar elde edeceğiz. Tanım biraz karışık gelmiş olabilir farkındayım ama kodlar içindeki açıklamalar size yardımcı olacaktır.


İlk olarak daha önce burada örneğini yaptığımız led uygulamasının basit halini yapacağız sizde Arduinoya ısınmak için bu örneği aşağıdaki yöntemle yaparsanız sizin için çok iyi olur. Takıldığınız yer olursa yorum olarak sormaktan çekinmeyin.

İlk örnekte devre kurmamıza gerek yok direk Arduino kartımızda bulunan ledi kullanacağız.

 
// arduonik.blogspot.com
// Bu örnekte Arduino kartımızda dahili bulunan ve 13. pine bağlı led kullanacağız
int led = 13;  // pinimize "led" adını veriyoruz


void ac_kapa(int bekleme){ //daha sonra "ac_kapa" adında bir fonksiyon oluşturuyoruz ama daha önceki parantez içinin aksine burada bekleme adında bir int değişken var
// fonksiyonu kullanırken bu değişken yerine istediğimiz değeri yazarsak sadece bu fonksiyon içinde kullanılan bekleme değişkenleri yazdığımız değeri alacak
    digitalWrite(led, HIGH);   // ilk başta ledimizi açık duruma getiriyoruz
  delay(bekleme);               // ve bekleme değişkeni kadar bekliyoruz
  digitalWrite(led, LOW);    // ardından ledi kapatiyoruz
  delay(bekleme);            // ve led kapalıyken bekleme değişkeninin değeri kadar bekliyoruz
}  // fonksiyonu kapatmayı unutmayın :)
//kendi fonksiyonumuzdan sonra Setup fonksiyonunu oluşturuyoru
void setup() {

  pinMode(led, OUTPUT);  //led olarak adlandırdığımız 13 nolu pini çıkış pini olarak ayarlıyoruz
}

// Daha sonrada loop fonksiyonuna geçiyoruz
void loop() {
ac_kapa(500);             // ac_kapa fonksiyonunu çalıştırıyoruz ve bekleme değişkenini 500 yapıyoruz yani her iki delay da 500 ms olacak
}

Şimdi bu kodu biraz daha geliştirip açık kalma ve kapalı kalma sürelerini farklı farklı olarak kullanalım

// arduonik.blogspot.com
// Bu örnekte Arduino kartımızda dahili bulunan ve 13. pine bağlı led kullanacağız
int led = 13;  // pinimize "led" adını veriyoruz


void ac_kapa(int bekleme_acik,int bekleme_kapali){ //daha sonra "ac_kapa" adında bir fonksiyon oluşturuyoruz ama daha önceki parantez içinin aksine burada 
//bekleme_acik ve bekleme_kapali adında iki int değişken ekliyoruz
// fonksiyonu kullanırken bu değişkenler yerine istediğimiz değeri yazarsak  bu fonksiyon içinde kullanılan bekleme_acik ve bekleme_kapali değişkenleri yazdığımız değerleri alacak
    digitalWrite(led, HIGH);   // ilk başta ledimizi açık duruma getiriyoruz
  delay(bekleme_acik);               // ve bekleme_acik değişkeni kadar bekliyoruz
  digitalWrite(led, LOW);    // ardından ledi kapatiyoruz
  delay(bekleme_kapali);            // ve led kapalıyken bekleme_kapali değişkeninin değeri kadar bekliyoruz
}  // fonksiyonu kapatmayı unutmayın :)
//kendi fonksiyonumuzdan sonra Setup fonksiyonunu oluşturuyoru
void setup() {

  pinMode(led, OUTPUT);  //led olarak adlandırdığımız 13 nolu pini çıkış pini olarak ayarlıyoruz
}

// Daha sonrada loop fonksiyonuna geçiyoruz
void loop() {
ac_kapa(500,250);             // ac_kapa fonksiyonunu çalıştırıyoruz ve bekleme_acik değişkenini 500, bekleme_kapalı değişkenini 250 yapıyoruz yani her iki delay da farklı olacak
}

Daha öncede dediğim gibi blogta ki örneklerden Trafik Lambası örneğinin devresini kurup kendi yazdığınız foknsiyon ile fonksiyon içine yazılan rengi yakacak bir kod yazmak size bir şeyler katacaktır. Takıldığınız yeri  yorumda sorabilirsiniz.

Fonksiyonlar ve void setup - void loop ( BareMinimum) (Arduino Programlama - C/C++ dersleri 2)





    Uzun bir aradan sonra merhaba. Bu yazımda önce Arduino programlarken her zaman kullanacağımız   Setup, loop terimlerinden ve kendimiz nasıl yeni fonksiyon yazacağımız dan bahsedeceğim. Zaten yandaki şekil Setup ve Loop için kafanızda bir şeyler canlandırmıştır. Bu arada Void setup ve Void loop yani Arduinonun çalışması için gereken kodlara BareMinimum denmektedir.



    Void Setup

    void setup bir fonksiyondur ve yeni Arduino IDE lerinde siz yazmadan yeni sayafada karşınıza gelir. bu fonksiyon karta elektrik verdiğimizde sadece bir sefer çaılışır ve sırasını loop fonksiyonuna bırakır. Eğer reset butonuna basarsak yani gücü kesip geri verirsek tekrar çalışır. Sadece bir defa çalıştığı için adından da anlaşıldığı üzere kartın kurulum bilgilerini barındırır. Genelde seri bağlantı başlatılması, pinlerin nasıl çalışacağının belirlenmesi gibi sadece başta ve  bir defa yapılması gereken işlemler burada belirtilir. pinlere isim takma yada değişken belirleme işleri ise bu fonksiyon çalışmadan yapılır.

   Void Loop

   Setup fonksiyonun bir sefer çalışması ardından devamlı çalışan kısımdır. Bu kısımda devamlı olarak çalışmasını istediğimiz sensör ölçümü ve işlenmesi, veri alışverişi, pini aktif ve pasif ( 1-0 durumu) gibi kodlar içerir.


    Kullanımları aşağıda ki gibidir.

void setup() {
  // yalnızca bir sefer çalışacak kurulum kodları
}

void loop() {
  // devamlı bir döngü ile çalışacak işlem kodları
}

   Fonksiyon Oluşturma

    Fonksiyonlar bir işleme isim takma gibi düşünebiliriz. Özellikle uzun kodlarda kafamız karışabilir veya bir işlemi birçok kez kullanmamız gerekebilir, bu gibi durumlarda fonksiyonları kullanmak çok yararlı olacaktır. Mesela bir çizgi izleyen robot yaptığımızda motrun sola ve sağa dönmesi için iki farklı fonksiyon yazdığımızda kodumuz dağa anlaşılır olacak ayrıca düzeltmeleri  daha kolay yaparsınız. sözlü anlatımdan ziyade bir örnek daha anlaşılır olacaktır.


int led = 13; // 13. pinimizin adını led olarak belirliyoruz
void setup() {
  // sadece bir defa çalışacak kurulum kodlarımızı yazıyoruz(pin mod, seri bağlantı başlangıcı gibi)
  pinMode(led, OUTPUT); // led pinini çıkış pini olarak ayarlıyoruz
}

void loop() {
  //sürekli döngü içinde çalışacak kodumuzu yazıyoruz
ac_kapa();//ac kapa fonksiyonunu çalıştırıyoruz fonksiyon loop içinde olduğu için 
}

void ac_kapa(){
  //kendimize ait bir fonksiyon yazıyoruz
  digitalWrite(led, HIGH);   // Ledi yakıyoruz
  delay(1000);                  // bir saniye led açık durumda bekliyoruz
  digitalWrite(led, LOW);    // ledi kapıyoruz
  delay(1000);                  // bir saniye daha bekliyoruz
  }

Daha sonra eklenecek örnek projelerde kullanımları ile fonksiyonları daha iyi kullanacağız.Ayrıca devre şemasını eklemiyorum sitemde 3 farklı örnek bulunmakta. Direnç eklemeyi unutmayın her ledin farklı bir iç direnci olduğu için bazı ledler direnç kullanmadan yanarken bazıları küçük dirençler kullansanız dahi bozulabilir bunun hesabını da ilerleyen günlerde paylaşacağım