CCS C Fonksiyon Oluşturma

Fonksiyonlar, bir programda farklı parametrelerle birden çok kez tekrarlanacak işlemleri yapmak için kullanılan yapılardır. Örneğin 5 adet analog girişi okumak ve ekrana yazdırmak için  bir kod yazacağımızı düşünelim. Her analog giriş için, analog giriş seçimi, bekleme, okuma ve ekrana yazdırma işlemi yazmamız gerekir. Bu gibi tekrarlayan işlemlerde fonksiyon içerisinde kodu bir kez yazıp fonksiyonu her çağırdığımızda aynı kod üzerinden farklı 5 adet girişi okumak mümkün kılınır. Bir fonksiyon tek başına bir şey ifade etmez. Fonksiyonların çalışabilmesi için çağrılmaya ihtiyacı vardır.

Örnek bir fonksiyon yapısı şu şekildedir:

Yukarıdaki örnek görüldüğü üzere fonksiyonlar “main” fonksiyonu dışında ve main fonksiyonundan önce yazılmalıdır. Main fonksiyonundan sonra tanımlanan fonksiyonlar hata verebilir. Şimdi fonksiyon türlerimizi inceleyelim.

Fonksiyonlar parametre alan ya da almayan, geriye dönüş değeri olan ya da olmayan olarak farklı şekillerde oluşturulabilir.

Şimdi geriye dönüş türüne ve parametrelere göre çeşitli fonksiyon türlerini inceleyelim.

1- Parametre Almayan, Değer Döndürmeyen Fonksiyonlar

Bu fonksiyonlar tanımlanırken, fonksiyon geriye değer döndürmeyeceği için başına “void” kelimesi eklenir. Ardından fonksiyon adı yazılır ve parantez açıp kapatılır. Fonksiyon parametre almayacağı için parantezler arası boş bırakılır. Ardından küme parantezi ile fonksiyon tanımlama işlemi sona erer. Küme parantezleri içerisine fonksiyon çağırıldığında çalışması istenen kodlar yazılır.

Örnek olarak “fonksiyonum” adında bir fonksiyon tanımlayalım ve bu fonksiyonu her çağırdığımızda “C” portunun “0” nolu pinine bağladığımız ledin 1 saniye aralıklarla yanıp sönmesini sağlayalım;

Yukarıda görüldüğü üzere main() fonksiyonundan önce fonksiyonum() adında kendi özel fonksiyonumuzu tanımladık. Fonksiyonun küme parantezleri içerisinde, fonsiyonu çağırdığımızda çalışacak kodlarımızı yazdık.

Fonksiyonu tanımlarken başına void kelimesini ekledik. Çünkü fonksiyon çalıştıktan sonra geriye değer döndürmeyecektir. Eğer geriye değer döndüren bir fonksiyon yazacak olsaydık, void kelimesi yerine, geriye dönüş değer türünü (int, char) yazacaktık.

2- Geriye Değer Döndüren Fonksiyonlar

Bir fonksiyon çalıştığında eğer geriye bir değer döndürecek ise, fonksiyonu tanımlarken başına void yerine geriye dönüş değer tipi yazılır.

Örneğin analogRead adında bir fonksiyon yazalım ve fonksiyonu her çağırdığımızda A0 pinindeki analog değeri okuyan fonksiyonumuzu yazalım:

Yukarıdaki kodda görüldüğü üzere fonksiyonumuz geriye float türünde değer döndüreceği için analogRead fonksiyonumuzu tanımlarken başına void yerine float türünü ekledik. Ardından fonksiyon içerisinde A0 ADC pinini set ettik ve adc_read() komutu ile A0 pininden okuduğumuz analog değeri “return” komutu ile fonksiyonu çağırdığımız noktaya geri döndürmesini istedik.

return komutu fonksiyondan geriye değer döndürmek için kullanılan komuttur!

main() fonksiyonumuz içerisindeki sonsuz döngümüzde “analogDeger = analogRead()” komutunu kullanarak fonksiyonu çağırdık. Bunun anlamı, analogRead() fonksiyonunu çalıştır ve fonksiyondan return komutu ile dönen değeri analogDeger değişkenine aktar demektir.

3- Parametre Alan Fonksiyonlar

Şimdiye kadar fonksiyon tanımlarken parantezler içerisini boş bırakmıştık. Bunun anlamı, fonksiyonun parametre almayacağını belirtmek içindir. Eğer fonksiyonu çağırırken, fonksiyon içerisinde bizim fonksiyona gönderdiğimiz değerlere göre işlem yapmasını istiyorsak fonksiyona partametre olarak değerleri göndermeliyiz. Yani biz fonksiyona “benim gönderdiğim değerlere göre işlem yap” demiş oluyoruz.

Örnek olarak 1 saniye aralıklarla A0, A1, A2, A3 ve A4 analog girişlerini okuyup okunan değerleri LCD ekrana yazdıran projemizi yapalım:

Yukarıdaki kodda 2 adet fonksiyon kullandık.

Birinci fonksiyonumuz olan analogRead() fonksiyonumuz, fonksiyona gönderilen parametrelere göre analog giriş değerini okuyup okunan değeri fonksiyonumuzu çağırdığımız noktaya geri döndürecek. Yani analogRead() fonksiyonumuz parametre alan ve geriye değer döndüren fonksiyonumuzdur. Fonkisyonumuzu yazarken parantezler içerisinde belirttiğimiz üzere “int” türünden parametre almaktadır ve fonksiyonun başında belirtttiğimiz üzere geriye “float” türünde değer döndürmektedir.

Bu fonksiyonumuzu çağırırken donenDeger = analogRead(parametre); şeklinde çağırdık.

İkinci fonksiyonumuz ise LCD_Yaz() fonksiyonumuzdur. Bu fonksiyonumuz ise parametre alan ancak geriye değer döndürmeyen “void” fonksiyonumuzdur. LCD_Yaz fonksiyonumuz “int” türünden okunan analog giriş numarasını ve “float” türünden okunan analog girişin değerini parametre olarak almaktadır. Ardından alınan bilgilere göre değerleri ekrana yazdırmaktadır.

Bu fonksiyonu çağırırken ise LCD_yaz(parametre1, parametre2); şeklinde çağırdık.

Fonksiyonlarımızın aldığı parametre değişkenleri yalnızca fonksiyona ait küme parantezleri içerisinde geçerlidir. Yani analogRead fonksiyonunun parametre değişkeni olan “oku” değişkeni yalnızca analogRead fonksiyonu içerisinde kullanılır.

Şimdi aşağıdaki devreyi kurup yazdığımız kodları yükleyip çalıştıralım. Potansiyometreleri oynadığımızda analog girişten alınan değerlerin değiştiğini LCD ekranda görebilirsiniz.

Böylelikle CCS C dilinde fonksiyonları incelemiş olduk. Eğer bu dersi karışık bulduysanız şöyle özetleyelim:

Parametre almayan geriye değer döndürmeyen fonksiyon

Parametre almayan geriye int türü değer döndüren fonksiyon

Parametre alan ancak geriye değer döndürmeyen fonksiyon

Float türü parametre alan ve geriye int türü değer döndüren fonksiyon

 

Yorum Yap