Fonksiyonlar FONKSİYONLAR • Fonksiyonlar bazı alt işlemleri gruplara ayırıp, modüler olarak çözmek için yazılırlar. • Fonksiyonlarda fonksiyon adı, gelen ve giden parametresi olur. #include <stdio.h> void mesajyaz () { printf("Ben bir fonksiyonum !\n"); } int main () { mesajyaz (); return 0; } FONKSİYON ANATOMİSİ • • • Fonksiyon tipi(çıkış parametre türü) : int Fonksiyon adı: toplama Fonksiyon giriş parametreleri: a,b • // basit parametreli fonksiyon ornegi1 #include <stdio.h> int toplama (int a, int b) { int r; r=a+b; return (r); } int main () { int z; z = toplama (5,3); printf(‘’%d’’, z); return 0; } ARDUINODA FONKSİYONLAR Fonksiyonlar bazı alt işlemleri gruplara ayırıp, modüler olarak çözmek için yazılırlar. Arduino fonksiyon yazımı, C dilindeki fonksiyon yapısına çok benzer. Fonksiyonlar loop, setup veya başka bir fonksiyon içerisinden çağrılabilirler. FONKSİYONLAR DÖNÜŞ PARAMETRELERİ FONKSİYON PARAMETRELERİ • Arduino Programlama dili c,c++ yapısında fonksiyonlar kullanır. Burada fonksiyon parametre alabilir, ve çağrıldığı yere değer döndürebilir. Giriş Parametresiz Fonksiyon Giriş Parametreli Fonksiyon Değer döndürmeyen fonksiyon örneği void printmessage () { Serial.println("I'm a function!"); } loop () { printmessage (); } ARDUINO FONKSİYONLAR ÇAĞIRMA /* Seri haberleşme üzerinden “Arduino” yazdıran fonksiyon saniyede 1 kez çağırılıyor. Bilgisayar Ekranindan Arduino IDE monitorunu açınız. Arduino yazısı 1 Sn aralıklarla gorulebilir.Seri Haberleşme örneği (UART) Baud rate = 9600 olarak ayarlandi. IDE ortamındaki Seri monitor’ un de default değeri 9600’ dur. */ void setup() { Serial.begin(9600); } void loop() { ArduinoYazdir(); // Fonksiyon çağrısı delay(1000); // Bir saniye bekle } Void ArduinoYazdir() ; // Bizim tanımladığımız fonksiyon { /* Aşağıdaki fonksiyon Arduino IDE de mevcuttur */ Serial.println (“Arduino”); // Bir saniye bekle } Fonksiyon Değer Kopyalanması main() veri alanı toplam() veri alanı i 12 j 25 k 45 kopyalandı kopyalandı kopyalandı a 12 b 25 c 45 Değer ve Referansla Çağırma main() veri alanı Değer Referans i 12 toplam() veri alanı Değişkenin Kopyası main() veri alanı &i 12 a 12 toplam() veri alanı Değişkenin &i Kendisi 12 Değerle Çağırma // basit fonksiyon ornegi2 #include <stdio.h> int cikarma (int a, int b) { int r; r=a-b; return (r); } int main () { int x=5, y=3, z; z = cikarma (7,2); printf(‘’%d’’, z); z= 4 + cikarma (x,y); printf(‘’%d’’, z); return 0; } Referansla Çağırma // referans adresiyle parameter donduren fonksiyon ornegi #include <iostream> using namespace std; void ikikat (int& a, int& b, int& c) { a*=2; b*=2; c*=2; } int main () { int x=1, y=3, z=7; ikikat (x, y, z); printf(‘’%d %d %d’’, x,y,z); return 0; } Karışık Değerli • • • • • • • • • • • • • • • • • // karisik parametreli fonksiyon ornegi #include <stdio.h> void oncesonra (int x, int& prev, int& next) { prev = x-1; next = x+1; } int main () { int x=100, y=0, z=0; printf(y,z); oncesonra (x, y, z); printf(y,z); return 0; } FONKSİYONLAR GERİ DÖNÜŞ DEĞERİ • Örnekler: return (a+b/c); /* parantez kullanmak zorunlu değil */ return 10; /* değişken kullanmak mecbur değil */ return topla(a, b)/2.0; /* önce topla fonksiyonu çalışır */ • Programın çözüm mantığına göre bir fonksiyon içerisinde birden çok geri dönüş değeri kullanılabilir. • Fakat, ilk karşılaşılan "return" deyiminden sonra fonksiyon sonlanır ve çağrılan yere bu değer gönderilir. 16 FONKSİYON ÖRNEKLERİ FONKSİYON PROTOTİPİ KULLANMA • Bir fonksiyon prototipi, derleyiciye fonksiyon tarafından döndürülen verinin tipini, fonksiyonun almayı beklediği parametre sayısını, parametrelerin tiplerini ve parametrelerin sırasını bildirir. 18 FONKSİYON PROTOTİPİ KULLANMA • • • // fonksiyon prototipi tanimlama #include <iostream> using namespace std; • • void tek (int a); void cift (int a); • • • • • • • • • • int main () { int i; do { cout << "Bir sayi girin (Cıkıs icin 0 girin): "; cin >> i; tek (i); } while (i!=0); return 0; } • • • • • void odd (int a) { if ((a%2)!=0) cout << "Sayi tektir.\n"; else cift (a); } • • • • • void cift (int a) { if ((a%2)==0) cout << "Sayi cifttir.\n"; else tek (a); } fonksiyonlarda parameter olarak array(dizi) kullanimi void printarray (int arg[], int length) { for (int n=0; n<length; n++) Serial.println (arg[n] ); Serial.println ("\n"); } loop () { int firstarray[] = {5, 10, 15}; int secondarray[] = {2, 4, 6, 8, 10}; printarray (firstarray,3); printarray (secondarray,5); } SERİ MONİTÖR FONKSİYONLARI Seri Monitör I/O FONKSİYONLARI Serial.begin(9600) Monitörü seri iletişimle bağlantıya açar. Serial.print() , Serial.println() Seri monitöre değer yazar. Serial.read(), Serial.readBytes(), Serial.readString(), Serial.readBytesUntil(), Serial.parseInt(), Serial.parseFloat(), Seri monitörden değer okur. ARDUINO MATEMATİK FONKSİYONLARI Temel matematik işlemleri matematik operatörleriyle gerçekleştirebiliyoruz. Karekök alma, trigonometrik hesaplamalar gibi işlemler için matematik kütüphanesi fonksiyonlarını kullanabiliriz. #include <math.h> ile kütüphane dahil edilir. Matematik kütüphanesi fonksiyonlarından belli başlıcaları aşağıda sıralanmıştır. double cos (double __x) // returns cosine of x double fabs (double __x) // absolute value of a float double fmod (double __x, double __y) // floating point modulo double sin (double __x) // returns sine of x double sqrt (double __x) // returns square root of x double tan (double __x) // returns tangent of x double exp (double __x) // function returns the exponential value of x. double atan (double __x) // arc tangent of x double atan2 (double __y, double __x) // arc tangent of y/x double log (double __x) // natural logarithm of x double log10 (double __x) // logarithm of x to base 10. double pow (double __x, double __y) // x to power of y double square (double __x) // square of x double min (double __x, double __y) // min of x to and y double max (double __x, double __y) // max of x to and y ARDUINO DİLİ MATEMATİK FONKSİYONLARI Val = min(Val, 100); // Val değeri ile 100 sayısını karşılaştırır hangisi // küçükse Val Değerine atama yapar. // Sonuç Hiç bir zaman 100 değerinden büyük olamaz. Val = max(Val, 20); // Val değeri ile 20 sayısını karşılaştırır. hangisi büyükse // Val Değerine atama yapar. // Sonuç hiç bir zaman 20 değerinden küçük olamaz. abs(a); // a değişkeninin mutlak değerini hesaplar. a++; // Sonra a’ nın değerini “1” artır. sqrt(val); // Sayının karekökünü hesaplar. Dönen değer Double sayı // tipindedir. Bölüm 3: ARDUINO PROGRAMLAMA DİLİ Konu 3.12.8:ARDUINO’ DA KÜTÜPHANE (LIBRARY) KULLANIMI Arduino platformunda diğer programlama platformları gibi, kütüphanelerin kullanımı mevcuttur. Kütüphaneler, taslaklarınıza ekstra işlevsellik kazandırabilir. Bir taslağınızda kütüphane kullanmak için, Sketch> Import Library komutunu seçiniz. IDE ile yüklü gelen Kütüphaneler vardır, ama aynı zamanda kendi kütüphanelerizi oluşturabilirsiniz. Aşağıdaki listede bir kısım Arduino kütüphanlerinin kullanımını göreceksiniz. Standart Arduino Kütüphaneleri EEPROM – EEPROM entegreden veri okuma ve veri yazma Ethernet - Arduino Ethernet Shield aracılığıyla internete bağlanmak Firmata – Standart seri bağlantı aracılığıyla bilgisayar uygulama GSM - GSM shield ile GSM/GRPS networkunu kullanmak. LiquidCrystal – LCD ekran kullanımı. SD - SD kartlara okumak ve yazmak. Servo - Servo motor kullanımı. SPI - Serial Peripheral Interface (SPI) cihazlarla haberleşme. SoftwareSerial – Herhangi bir dijital pinden seri iletişim gerçekleştirme. Stepper – Step motor kontrolü. TFT - Arduino TFT ekran ile şekiller ve resimler oluşturmak. WiFi - Arduino WiFi shield ile internete bağlanmak. Wire – (TWI/I2C) I2C cihazlarla bağlantı. Daha fazla bilgi için aşağıdaki linke bakınız. https://www.arduino.cc/en/Reference/Libraries GECİKME VE ZAMAN FONKSİYONLARI Delay() : milisaniye cinsinden gecikme sağlar delayMicroseconds(us_gecikme) : Microsaniye cinsinden gecikme sağlar. millis() fonksiyonu Arduino’nun çalışmasından itibaren geçen süreyi ms cinsinden döndürür. Dönüş değeri yüksek bir değer olabileceğinden “unsigned long” tipi kullanılmalıdır. ( unsigned long – işaretsiz long tipindeki sayıdır. Alabileceği değerler 0 – 4.294.967.295 arasındadır) Aşağıda gecikme ile ilgili örnek program parçacıkları görülüyor. delay(1000); // 1000 Ms (1 Saniyelik) gecikme sağlar. delayMicroseconds(50); // 50 microsaniyelik gecikme sağlar. Serial.print("Time: "); // Bilgisayar ekranında “Time:” yazısını göster. time = millis(); //Arduino programının çalışmasından itibaren geçen süreyi miliSaniye Serial.println(time); // mS cinsinden geçen zamanı gösterir. Fonksiyonlarda Dizi Kullanımı • • • // fonksiyonlarda parameter olarak array(dizi) kullanimi #include <iostream> using namespace std; • • • • • void diziyaz (int arg[], int length) { for (int n=0; n<length; n++) cout << arg[n] << " "; cout << "\n"; } • • • • • • • • int main () { int ilkdizi[] = {5, 10, 15}; int ikincidizi[] = {2, 4, 6, 8, 10}; diziyaz (ilkdizi,3); diziyaz (ikincidizi,5); return 0; }