Temel Arduino Kodları

Bu çalışmamızı Arduino kodlarına internetten bakıp anlamakta zorlanan arkadaşlar için bir  yaptık. Temel Arduino kodları ve programlamayla ilgili temel bilgileri bulabilirsiniz.

Tamamının Pdf dosyasını indirmek için tıklayınız.
https://drive.google.com/file/d/1FU93JUq36yQ-3lMN-wMzhoXILwecSNbJ/view?usp=sharing

Temel Arduino Fonksiyonları

 

Kütüphane ekleme

Yeni bir kütüphane eklemek için kütüphane dosyalarını Arduino programını kurduğunuz dizinin altında bulunan 'libraries' klasörüne taşıyın. 
#include <kutuphaneadi.h>

Setup ve Loop fonksiyonları


void setup(){
    /*
        Burası sadece bir kere çalışır
        Genel ayarlar buradan yapılır
    */
}
void loop(){
    /*
        Bu fonksiyon sonsuza kadar çalışır
        Arduino'nun yapması gereken işlemler buraya yazılır
    */
}

PinMode

Arduino kartı üzerinde bulunan pinleri çıkış veya giriş olarak tanımlayabilirsiniz. Giriş olarak tanımlanmış pinler düğme gibi elemanlar için kullanılırken, çıkış olarak tanımlanmış pinler ise LED gibi elemanlar için kullanılır. Programın en başında (Setup içerisinde), kullanılacak pinler ayarlanmalıdır. Bunun için aşağıdaki kod kullanılır:
pinMode(13,OUTPUT);
Böylece 13. Pin çıkış olarak tanımlanır. Giriş olarak tanımlanması için OUTPUT yerine INPUT yazılması gerekir.


DigitalWrite: 

Çıkış olarak tanımlanmış pinlerden enerji vermek için veya enerji vermeyi durdurmak için kullanılır. Örneğin:
digitalWrite(13,HIGH);
Böylece, daha önce çıkış olarak tanımlanmış 13 numaralı pinden enerji çıkışı sağlanır. Enerji çıkışı durdurulmak istenildiğinde HIGH yerine LOW yazılması yeterlidir.

AnalogWrite:

Seçilen pinde PWM sinyalinin üretilmesini sağlar. PWM sinyalinin görev zamanı (Duty cycle) fonksiyona verilen değer ile belirlenir. Örneğin bu pine bağlanan bir LED ışığının parlaklığı verilen PWM sinyali ile ayarlanabilir.
analogWrite(LEDPin, 175);

DigitalRead
durum = digitalRead(13);
13 numaralı pindeki gerilim 5 volta yakın ise 'durum' değişkeni 1 (HIGH), 0 volta yakın ise 0 (LOW) olmuştur.

AnalogRead
Bir önceki fonksiyon ile 13 numaralı pindeki gerilimin 5 veya 0 olmasını ölçtük. digitalRead fonksiyonu, 0 ve 5 volt arasındaki gerilimlerin tam değerini ölçemez. 0 ve 5 volt arasındaki gerilimin tam değerinin ölçülmesi için analogRead fonksiyonu kullanılmalıdır. Fakat bu fonksiyon, tüm pinler için kullanılamaz. Bu fonksiyonun kullanılabileceği özel pinler vardır. Bunlara analog pinler denir ve genellikle A harfi ile başlarlar: A0, A1, A2… gibi. Kullanılan Arduino türüne göre bu pinlerin sayısı değişiklik gösterir.
Arduino Uno'da 6, Arduino Mega'da 16 tane analog giriş bulunur. Kullanılacak analog pin, öncelikle giriş olarak tanımlanmalıdır:
pinMode(A0,INPUT)
Örneğin A0'daki değeri 'analogDeger' değişkenine kaydedelim. A0'daki gerilim 10 bit olarak kaydedilecektir. Bu durumu ilerleyen bölümlerde daha detaylı olarak göreceğiz.
analogDeger = AnalogRead(A0);

Delay
İki kod arasında bir süre beklenmesi istenirse, delay fonksiyonu kullanılır.
delay(500);

 Serial.begin(9600)
Bu fonksiyon ile iletişim hızını ayarlaıyoruz. Seri haberleşmede iletişim hızı “baud” adı verilen bir değerle ifade edilir. Bu değer saniyede gönderilen bit sayısını ifade eder (bits per second). Serial monitor’ün sağ alt köşesindeki değerle programımızdaki değerin aynı olduğuna dikkat edin. Arduino’dan gönderdiğimiz verileri düzgün görüntüleyebilmek için bu değerler aynı olmalıdır.

Serial.print() ve Serial.println() 
  Serial.print("Seri haberlesme: ");
  Serial.println(sayac);

Bu fonksiyonlar ile string’leri doğrudan ekrana yollayabiliyoruz. İki fonksiyon arasındaki tek fark println() fonksiyonunun string sonuna bir de satır sonu karakteri eklemesidir. Böylelikle veriler Serial monitor ile alt alta görüntülenebilir. Bu fonksiyonlara string parametreler verilebildiği gibi int, float türünde sayılar da verilebilir.

Düğme Kullanımı

Bu uygulamayı yapmak için ihtiyacınız olan malzemeler:
  • 1 x Arduino
  • 1 x düğme
  • 1 x 10K ohm direnç
  • 1 x LED
  • 1 x 220 ohm direnç
  • 1 x breadboard (gofret)

 


Bu devredeki düğmenin amacı LED'i kontrol etmek olacaktır. Kullanıcı düğmeye bastığında LED yanıyorsa sönecek, sönük ise de yanacaktır. Burada bilmemiz gereken bir diğer nokta ARK olaylarıdır. Düğmeye basıldığı anda oluşan atlamalardan dolayı Arduino çok kısa zamanda yüzlerce kere düğmeye basıldığını sanmaktadır. Bu istenmeyen durumdan kurtulmak için basıldığı anda Arduino'yu biraz bekleteceğiz (delay fonksiyonu ile). Böylece devremiz, düğmeye basıldığında oluşan istenmeyen dalgalanmalardan korunmuş olacaktır. Delay fonksiyonuna yazılan bekleme zamanı insanın fark edemeyeceği kadar kısa bir süredir.
Düğmeye her basıldığında yeni bir işlem yapılmasını istiyoruz. Bunu sağlamak için düğmeye basıldığında yapılması gereken işlem yapıldıktan sonra, kişinin düğmeden elini çekmesi beklenmelidir. Eğer bunu yapmazsak kişi, düğmeye bastığında LED'i sürekli yanıp sönecektir. Bu işlem o kadar hızlı olacaktır ki insan gözü bunu algılayamaz.
Düğmenin durumu digitalRead fonksiyonu ile kontrol edilecektir. Okunan düğme değeri 'dugmeDurumu' değişkenine yüklenecektir. Eğer düğmeye basılmışsa LED'in durumunu değiştireceğiz. LED'in düğmeye her basıldığında konumunun değişmesi için, LED durumu bir değişkene atanır ve LED'in eski durumuna göre LED farklı konuma getirilir


const int Dugme = 6; /* düğmenin bağlı olduğu pin */
const int LED =  5; /* LEDin bağlı olduğu pin */

int dugmeDurumu = 0; /* düğmenin durumu */ 
int LEDDurumu = 0; /* birinci yöntem için LED durumu */

void setup() {
  pinMode(LED, OUTPUT); /* LED pini çıkış olarak ayarlandı */
  pinMode(Dugme, INPUT); /* düğme pini giriş olarak ayarlandı */
}

void loop(){
  dugmeDurumu = digitalRead(Dugme); /* düğmenin durumu okundu ve değişkene aktarıldı */
  if(dugmeDurumu == HIGH) { /* düğmeye basılmış ise */   
    delay(10); /* dalgalanmalar için biraz bekleyelim */
    if(LEDDurumu == 0){ /* LED yanmıyorsa */
      digitalWrite(LED, HIGH); /* LEDi yak */
      LEDDurumu = 1;
    }else { /* LED yanıyorsa */
      digitalWrite(LED, LOW); /* LEDi sondur */
      LEDDurumu = 0
    }
       
    while(dugmeDurumu == HIGH){ /* düğmeye basili olduğu surece bekle */
      dugmeDurumu = digitalRead(Dugme); /* düğmenin durumunu kontrol et */
    }
    delay(10); /* dalgalanmalar için biraz bekleyelim */
  }
}


Hazırlayan: Sinan KARDAŞ

Bu notlar “ https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/101” adresinden derlenmiştir.

Yorumlar