Fonksiyonlar

advertisement
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;
}
Download