Fonksiyonların ne olduğunu daha önce öğrenmiştik. Arduino geliştiricileri tarafından yazılmış bazı hazır fonksiyonlar vardır. Bu fonksiyonların yardımıyla yapmak istediğimiz işlemleri daha kolay yapabiliriz. Bazı genel fonksiyonlar için herhangi bir kütüphaneye ihtiyaç yoktur. Daha özel görevler için yazılmış fonksiyonları kullanmak için, o fonksiyonun kütüphanesini dosyanıza eklemeniz gerekir.
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. Eğer bu sırada Arduino programı açıksa, taşıma işlemi bittikten sonra, kapatıp yeniden açın. Dosyanın en başında kütüphaneyi projenize ekleyin. Bunun için aşağıdaki kodu kullanabilirsiniz.
#include <kutuphaneadi.h>
Setup ve Loop fonksiyonları
Arduino projenizi ilk açtığınızda karşınıza iki fonksiyon çıkar. Bunlar setup ve loop fonksiyonlarıdır.
Setup fonksiyonu, kod çalışmaya başladığında Arduino’nun ilk olarak okuduğu yerdir. Arduino bu kısmı okuduktan sonra diğer kısımları okumaya başlar. Bu kısım sadece bir kere okunur ve program esnasında yeniden okunmaz. Bu alanda, pinlerin çalışma modları gibi önemli ve bir kere yapılması yeterli olacak ayarlamalar yapılır.
Loop fonksiyonu, setup fonksiyonu okunduktan sonra okunur. Bu bir ana fonksiyondur ve yapılmasını istediğiniz görevler buraya yazılır. Loop fonksiyonu, sonsuz döngü şeklindedir, yani buradaki görevler tamamlandığında, program tekrar başa dönerek işlemleri yeniden yapar. Bu döngü, Arduino çalıştığı sürece devam eder.
Arduino programlamadan önce kodlarınız ilk başta aşağıdaki gibi olmalıdır.
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);
Seçilen pinlerde PWM desteği bulunmasına dikkat edilmelidir. Bu konu ilerleyen konularda daha detaylı olarak incelenecektir.
DigitalRead: Daha önce giriş olarak tanımlanmış bir pinin girişindeki gerilimin yüksek (5 volta yakın) veya düşük (0 volta yakın) olduğu anlaşılır. Örneğin daha önceden giriş olarak tanımlanmış 13 nolu pindeki durumu daha önceden tanımlanmış ‘durum’ değişkenine yazdıralım
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. Örneğin yanıp sönen lamba uygulaması yapılmak istenirse, lamba yakıp söndürme kodları arasında bekleme amacıyla delay fonksiyonu kullanılır. Delay fonksiyonunun içerisine yazılan değer milisaniye düzeyindedir. Bir saniyelik bir bekleme için fonksiyona 1000 değeri verilmelidir.
Örneğin yarım saniyelik bir bekleme fonksiyonu yazalım;
delay(500);
Bu bölümde, Arduino projelerimizde kullanacağımız temel fonksiyonları öğrendik. Geri kalan fonksiyonları, ilerleyen konularda örneklerle inceleyeceğiz.
//tek satırlık bir açıklama kodu Örnek Program //gerekli kütüphaneler eklenir #include <Servo.h> /* gerekli global değişkenler ve tanımlamalar bu alanda yapılabilir */ // arduino icin tek seferlik calışan fonksiyon void setup() { // tek seferlik ayarlar bu bölüme kodlanır } //arduino icin ana program sürekli çalışır void loop() { // sürekli çalışacak olan kodlar bu bölüme yazılmalıdır. } /* setup ve loop dışındaki oluşturulan fonksiyonlar setup ve loop dışında herhangi bir yerde oluşturulabilir */
Arduino ıde yi açtığımızda gelen kod ekranın sağ üst köşesinde serial monitör kısayolu bulunur.O kısayola tıkladığımızda aşağıdaki ekran karşımıza gelir.
Serial.begin(9600); Seri haberleşmeyi başlatıyoruz.9600 ifadesi veri hızını belirtir.Veri hızları olarak ; 4800,9600,14400,19200,28800 gibi değerlerde kullanabiliriz.Ancak genelde 9600 kullanılır ve bu değer saniyede 9600 bit gönderimine(yaklaşık 1000 karakter) karşılık gelir.
Serial.print(“merhaba”); Tırnak içerisindeki ifade seri monitöre gönderilir. Veriler ekranda yan yana yazdırlır.
Serial.println(“merhaba”); Tırnak içerisindeki ifade seri monitöre gönderilir.İmleç bir alt satıra geçer.
void setup() { //serial port kullanımı için tanımlama yapılıyor Serial.begin(9600); } void loop() { //serial port ekranına sürekli alt alta merhaba yazacaktır. Serial.println("Merhaba"); }