Kontrol yapıları bir şartın doğru olup olmadığını kontrol ederek doğru olduğu sürece bir takım işlemler, doğru olmadığı sürece ise başka işlemler yapmamıza yardımcı olur.
İki adet kontrol yapısı vardır. Bunlar;
1- if – else Yapısı : if – else yapısı bir karşılaştırma sonucunda dönen değerin doğru olması durumunda if (eğer) parantezi içerisindeki değerin, yanlış olması durumunda else (değilse) parantezi içerisindeki değerin çalışmasını sağlar.
Örnek;
1 2 3 4 5 |
if (i < 3) { // eğer i değişkeni 3'ten küçükse digitalWrite(2, HIGH); // 2 numaralı dijital çıkışı 1 yap } else { // değilse digitalWrite(2, LOW); // 2 numaralı dijital çıkışı 0 yap } |
else yapısı isteğe bağlı olarak kullanılabilir. Yani else kısmını kullanmadan da kontrol sağlayabiliriz.
Bu kontrol yapımızda birde else if yapımız var ki aynı yapı üzerinde birden fazla sorgu yaparak çalışabiliriz.
Örnek;
1 2 3 4 5 6 7 8 9 |
if (i < 3) { // i değşikeni 3'den küçük ise digitalWrite(2, HIGH); // 2 numaralı dijital çıkışı 1 yap } else if (i == 3) { //değilse i değişkeni 3'e eşitse digitalWrite(3,HIGH); // 3 numaralı dijital çıkışı 1 yap } else {// yukarıdakilerin hiçbiri değilse digitalWrite(4, HIGH); // 4 numaralı dijital çıkışı 1 yap } |
switch – case Yapısı : switch – case yapısı switch alanında belirtilen değişken değerini her bir case yapısındaki değerle karşılaştırır. karşılaştırma sonucunda eşitlik sağlanan case alanındaki kod çalıştırılır ve karşılaştırma break komutuyla sona erer. Eğer case değerlerinde eşitlik sağlanmamışsa, default kapsamındaki kodlar çalıştırılır.
Örnek;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
int i = 3; switch (i) { // i değişkeninin değerini hafızada tut case 1: // i değişkeni değeri 1 ise digitalWrite(1, HIGH); // 1 numaralı dijital çıkışı 1 yap break; // kontrolü sonlandır case 2: // i değişkeni değeri 2 ise digitalWrite(2, HIGH); // 2 numaralı dijital çıkışı 1 yap break; // kontrolü sonlandır case 3: // i değişkeni değeri 3 ise digitalWrite(4, HIGH); // 4 numaralı dijital çıkışı 1 yap break; // kontrolü sonlandır default: // yukarıdaki şartların hiçbirinde eşitlik sağlanmazsa digitalWrite(5, HIGH); // 5 numaralı dijital çıkışı 1 yap break; // kontrolü sonlandır } |
switch – case yapısında default kısmı isteğe bağlı olarak kullanılmayabilir.
Şimdi bir buton kullanarak led yakma uygulamamızı yapalım. Biz butona bastığımız sürece ledimiz yansın, butondan elimizi çekince ledimiz sönsün. Buton uygulaması için digitalRead() fonksiyonunu kullanacağız, parantezler içerisine durumunu okuyacağımız dijital giriş pininin pin numarasını yazacağız. Ve sonuç olarak bu fonksiyon bize butona basılı iken true, butona basılı değil iken false değeri verecek.
Program kodları aşağıdaki gibi olacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 |
void setup() { pinMode(2, OUTPUT); // 2 numaralı pin çıkış ayarlandı pinMode(3, INPUT); // 3 numaralı pin giriş ayarlandı } void loop() { if (digitalRead(3) == 1) { // eğer 3 numaralı girişte +5V varsa digitalWrite(2, HIGH); // 2 numaralı çıkışı Lojik 1 (+5V) yap } else { // değilse digitalWrite(2, LOW); // 2 numaralı çıkışı Lojik 0 (0V) yap } } |
Yukarıdaki kodları arduinomuza yükleyip aşağıdaki devreyi kurduğumuzda, butona bastığımız sürece led yanacak, butondan elimiz çektiğimizde ise led sönecektir.
Yukarıdaki devrede 330 ohm direnç ile led seri bağlanmıştır. Bunun sebebi ise bizim ledimiz 2V ile çalışıyor olmasıdır. Butona ise 1K değerindeki direnç Pull-Down şeklinde bağlanmıştır. Bunun sebebi ise elimizi butondan çekince pinimizin GND değerini görmesidir. Bazı mikrodenetleyiciler boş olan pini +5V değerinde algılamaktadır. Pull-Down bağlantı şeklinde butona basmadığımız sürece giriş 0V olacaktır.