19 Ekim 2018

Arduino Fonksiyonlar

Fonksiyonlar, bir program içerisinde aynı işlem defalarca yapılıyorsa, her seferinde aynı kodları yazmak yerine o işlem için bir fonksiyon yazılıp o fonksiyonu gereken yerde çağırmaya yarar.

Fonksiyonlar parametre alan ya da almayan, geriye değer döndüren ya da döndürmeyen olarak sınıflandırılır.

Dersimiz boyunca aşağıdaki devreyi kullanacağız.

Aynı devrenin aşağıda şematik gösterimini veriyorum arkadaşlar. Eğer şematik gösterimini bilmiyorsanız öğrenmenizi tavsiye ederim.

1- Parametre Almayan, Geriye Değer Döndürmeyen Fonksiyon:

Bu tip fonksiyonlara herhangi bir değer gönderilmez ve geriye değer döndürmesi beklenmez. Geriye değer döndürmediğini belirtmek içim “void” komutu ile başlar.

Sözdizimi:

Fonksiyon tanımlama: void FonksiyonAdi(){ }

Fonksiyonu çağırma: FonksiyonAdi();

void komutunun, fonksiyonun geriye değer döndürmediğini belitmek için kullanıldığını söylemiştik. void kelimesi ardından fonksiyon adı yazılır ve ardından parantez açıp kapatılır. Ardından küme parantezi içerisinde fonksiyon çağrıldığında çalışacak kodlar yazılır.

Örneğin bir fonksiyon yazalım ve 2 numaralı dijital pine bağladığımız butona her bastığımızda fonksiyonu çağıralım. Fonksiyonu her çağırdığımızda 12 ve 13 sayısını toplasın ve toplamı seri porta göndersin. Kodlarımız şu şekilde olacak;

2- Parametre Alan Geriye Değer Döndürmeyen Fonksiyon:

Bu tip fonksiyonlara değer gönderilir ve fonksiyon bu değeri işleme tabii tutar ancak fonksiyon geriye değer döndürmez. Aslında arduino programlarken bu fonksiyonları çok kullanıyoruz. Örneğin digitalWrite() fonksiyonu bu fonksiyonlara örnektir.

Sözdizimi:

Fonksiyon tanımlama: void fonksiyonAdi(int birinciParametre, int ikinci parametre, string n’inciParametre){}

Fonksiyonu Çağırma: fonksiyonAdi(birinciDeger, ikinciDeger, n’inciDeger);

digitalWrite() fonksiyonu int ve bool türünde iki adet parametre alır; digitalWrite(int, bool).

Örneğin bir toplama fonksiyonu yazalım. 2 numaralı pine bir buton bağlayalım. Butona her bastığımızda fonksiyona iki adet sayı gönderelim, fonksiyon bu sayıları toplayıp çıkan sonucu seri porta yazdırsın.

Kodlarımız aşağıdaki gibi olacak;

Yukarıdaki kodda biz “loop” döngüsü içerisinde 2 numaralı pine bağladığımız butona bastığımızıda  on üçüncü satırdaki “if” sorgusu içerisine girdik, sorgu içerisinde “topla” fonksiyonuna “2” ve “3” değerini gönderdik; “topla(2,3)” .

Altıncı satırımızda fonksiyon bu iki değeri sırasıyla sayi1 ve sayi 2 değişkenine atadı ve fonksiyon parantezi içerisine girdi.

Yedinci satırımızda sayi1 ve sayi2 değişkeni değeri toplanıp (2+3) sonuc değişkenine atandı.

Ardından dokuzuncu satırsa sonucu seri porta yazdırdık.

3- Parametre Almayan, Geriye Değer Döndüren Fonksiyon:

Bu tip fonksiyonlara parametre gönderilmez ancak fonksiyon geriye değer döndürür. Geriye değer döndüren fonksiyonlarda “void” komutu yerine fonksiyonun geri dönüş türü (int, string, bool vs.) yazılır. Fonksiyonun sonunda ise return komutu ile sonuç geriye döndürülür.

Sözdizimi:

Fonksiyon Tanımlama: int fonksiyonAdi(){}

Fonksiyonu çağırma: int gelen = fonksiyonAdi();

Örneğin 2 numaralı dijital pine bağladığımız butona her bastığımızda fonksiyonu çağıralım. Fonksiyonu her çağırdığımızda 12 ve 13 sayısını toplasın ve toplamı bize geri döndürsün. Biz de o değeri alıp seri porta yazdıralım. Kodlarımız şu şekilde olacak;

Yukarıdaki kodda biz “loop” döngüsü içerisinde 2 numaralı pine bağladığımız butona bastığımızıda  on üçüncü satırdaki “if” sorgusu içerisine girdik, on dördüncü satırda “topla” fonksiyonunu çağırdık ve dönen değeri seri porta yazmasını istedik: Serial.print(toplama()); .

Altıncı satırımızda fonksiyon çalışmaya başladı. Fonksiyon kendi içerisinde 12 ve 13 sayısını toplayıp toplam değişkenine atadı. Ardından dokuzuncu satırda “return” komutu ile sonucu bize geri gönderdi.

Program tekrar ondördüncü satıra gitti ve dönen değeri seri porta yazdırdı.

4- Parametre Alan, Geriye Değer Döndüren Fonksiyon:

Bu tip fonksiyonlara değer gönderilir ve fonksiyon bu değeri işleme tabii tutar ve fonksiyon sonucu geriye döndürür. Bir sonraki dersimizde inceleyeceğimiz matematiksel fonksiyonlar bu tür fonksiyonlara örnektir.

Sözdizimi:

Fonksiyon Tanımlama: int fonksiyonAdi(int birinciParametre, int ikinciParametre, string n’inciParametre){}

Fonksiyonu çağırma: int gelen = fonksiyonAdi(birinciDeğer, ikinciDeğer, n’inciDeğer);

Örneğin 2 numaralı dijital pine bağladığımız butona her bastığımızda fonksiyona parametre (değer) göndererek çağıralım. Fonksiyonu her çağırdığımızda gönderdiğimiz sayıları toplasın ve toplamı bize geri döndürsün. Biz de o değeri alıp seri porta yazdıralım. Kodlarımız şu şekilde olacak;

Yukarıdaki kodda biz “loop” döngüsü içerisinde 2 numaralı pine bağladığımız butona bastığımızıda  on üçüncü satırdaki “if” sorgusu içerisine girdik, on dördüncü satırda “topla” fonksiyonuna 14 ve 18 sayısını göndererek çağırdık ve dönen değeri seri porta yazmasını istedik: Serial.print(toplama(14, 18));.

Altıncı satırımızda fonksiyon bu iki değeri sırasıyla sayi1 ve sayi2 değişkenine atadı ve fonksiyon parantezi içerisine girdi. Sonra fonksiyonumuz sayi1 ve sayi2 değişkeni değerini topladı ve “toplam” değişkenine atadı.  Ardından dokuzuncu satırda return komutu ile sonucu bize geri gönderdi.

Program tekrar ondördüncü satıra gitti ve dönen değeri seri porta yazdırdı.

Ders dosyalarını buradan indirebilirsiniz:  Arduino-Fonksiyonlar.zip (5 indirme)

Samet Karaca

Hakkımda

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir