ARDUİNO PROGRAMLAMA
fonksiyonu: Bu fonksiyon program ilk açıldığında bir kere çalışır ve gerekli kalibrasyon, setup komutlarını buraya yazarız. fonksiyonu: Diğer programlama dillerinden alışık olduğumuz main() fonksiyonu gibidir. Farklı olarak loop fonksiyonu işlevi bitince tekrar baştan başlar yani sonsuz bir döngüdür aslında. Arduino Programlama Şeması: // İlk başta kütüphaneleri ekleyebiliriz // Global cinsteki değişkenlerimizi tanımlayabiliriz // Fonksiyonlarımızı burada yazabiliriz // ilk başta çalışmasını istediğimiz kodlar buraya yazılır // sonsuz döngü şeklindeki main fonksiyonumuz 8 // programı buraya yazıyoruz Uygulama:1 10.Pine Bağlı olan led 1 Saniye aralıkla yanıp sönecektir. int LED = 10; // Pin numarası olarak 10 değerine yazmak yerine LED olarak tanımlandı pinmode(led, OUTPUT); digitalwrite(led,high); delay(1000); digitalwrite(led,low); delay(1000); // LED pini yani Arduino nun 10. Ayağı çıkış yapıldı // LED in bağlı olduğu pinden 5 volt gerilim sağlandı // 1000 ms yani 1 saniye program duruyor // LED söndürülüyor // bir saniye bekliyoruz
Arduino ile Buton Kullanımı Pull-Down Bağlantı Butona basıldığında 5 Volt arduinonun input ayağına ulaşır.(lojik 1 ) Butondan elimizi kaldırdığımızda input ayağı 10K lık direnç üzerinden şaselenir. (Lojik 0) Pull-up Bağlantı Butona basılmadığı durumlarda arduinonun input ayağı 5 volttadır.(lojik 1) Butona basıldığında akım arduinonun input ayağı yerine toprağa ulaşmaktadır. Pull-Down direnç sisteminin tam tersi şeklinde çalışmaktadır. Direncin konulma nedeni butona basıldığında 5 Voltun doğrudan toprağa şaseye ulaşmasını engellemektir. Genellikle 10K değerinde direnç kullanılmaktadır. Koşullar (if-else-elseif): Yazılım dillerinin en temel komutlarından birisidir. Elinizde bir durum var ve bu durum doğru ise a işini yapmasını eğer yanlış ise b işini yapmasını istiyorsanız, bu kod sistemi tam bu işe uygun. Kısaca kod şemasına bakalım. İf( a == 5 ) Else //Buraya doğru durumda çalışması istenilen kodlar A nın 5 olmadığı durumda çalışacak kodlar. a == 5 burada bizim koşulumuzu oluşturmaktadır. Dikkat edilmelidir ki iki tane eşittir kullanılmaktadır. Yani denk midir anlamına gelmektedir. Koşul alanında kullanabileceğim ifadeler, Koşullarımıza else kullanımı zorunlu değildir. Sadece if kullanımı yapılabilir, böylece koşul doğru değilse ekstradan bir kod çalışmaz. Birden fazla koşulumuz var ise elseif ile yeni koşullar ekleyebiliriz.
İf( a == 1 ) // a = 1 durumunda burası çalışır elseif (a == 2 ) // a = 2 durumunda burası çalışır elseif (a == 3 ) // a = 3 durumunda burası çalışır Uygulama:2 2. Pine bağlı olan butona basıldığı sürece 3.Pindeki ledi yakan program. int ButonDurumu = 0; // Butonun durumu adlı değişken tanımlandı ilk değeri sıfır atandı. pinmode(2, INPUT); pinmode(3, OUTPUT); // Butonun bağlı olduğu pini çıkış olarak ayarlıyoruz. // Ledin bağlı olduğu pini çıkış olarak ayarlıyoruz. Uygulama:3 ButonDurumu = digitalread(2); if (ButonDurumu == HIGH) digitalwrite(3, HIGH); else digitalwrite(3, LOW); // Butonun basılı olup olmadığını kontrol ediyoruz. // Buton basılı ise bize HIGH değil ise LOW olarak geri dönmektedir (1 veya 0) // Buton basılı mı? // 3.Pine Lojik 1 gönderildi. Led yandı. // Buton basılı değil ise ledi söndür 5 Led in sırayla döngüsel olarak yanıp sönmesi. (Karaşimşek_1).. Amatör programlama //9,10,11,12,,13. pinler çıkış olarak tanımlandı. pinmode (9, OUTPUT); pinmode (10, OUTPUT); pinmode (11,OUTPUT); pinmode (12, OUTPUT); pinmode (13, OUTPUT); //9.Ledi yak, bekle 9'u söndür 10'u yak bekle, 10'söndür 11'i yak bekle...13'ü söndür. digitalwrite (9, HIGH); delay (100); digitalwrite (9, LOW); digitalwrite (10, HIGH);
digitalwrite (10, LOW); digitalwrite (11, HIGH); digitalwrite (11, LOW); digitalwrite (12, HIGH); digitalwrite (12, LOW); digitalwrite (13, HIGH); digitalwrite (13, LOW); digitalwrite (12, HIGH); delay (100); digitalwrite (12, LOW); digitalwrite (11, HIGH); digitalwrite (11, LOW); digitalwrite (10, HIGH); digitalwrite (10, LOW); digitalwrite (9, HIGH); // Döngüsel olarak devam eder. For döngüsü: Yazdığımız kodların belli bir adet veya süre tekrar etmesini isteyebiliriz. Bunun için döngüler kullanmalıyız. For(int i =0; i < 10; i ++) // burası 10 kere okunacak // program buraya her uğradığında i değeri bir arttırılacak // i değeri 10 a ulaşana kadar döngü devam edecek While döngüsü: For gibi while kodları da döngü amacıyla kullanılır. b = 20; while( b > 10) // b değişkeninin 10 dan büyük olduğu durumlarda döngü devam eder b = b 1 ; // her döngüde b nin değerini bir azalttık // dikkat edilmelidir ki eğer b nin değerini değiştirmeseydik // döngü koşulu hep doğru olacağından program burada takılı kalacaktı
Uygulama:4 10.pine bağlı olan ledi 5 kere yakıp söndüren program. void setup () pinmode(10, OUTPUT); // 10. Pin çıkış yapıldı. for(int i=1; i<6;i++) digitalwrite(10,high); delay(500); digitalwrite(10,low); delay(500); Uygulama:5 8. Pindeki ledi 4 kere yakıp söndüren programı yazınız. void setup () pinmode(8, OUTPUT); // 8. pin çıkış yapıldı. for(int i=15; i>5;i=i-3) // i'nin değeri 15,12,9,6 için toplam 4 kere led yanıp sönecek digitalwrite(8,high); delay(500); digitalwrite(8,low); delay(500);
Uygulama:6 5 Led in sırayla döngüsel olarak yanıp sönmesi. (Karaşimşek_1).. Profesyonel programlama const int ledpini[] = 9,10,11,12,13; //int tipinde 5 elemanlı dizi tanımlandı. void setup () for(int i=0; i<5;i++) pinmode(ledpini *i+, OUTPUT); // LED pinlerini çıkış olarak tanımladık for(int i=0; i<5; i++) digitalwrite(ledpini[i],high); digitalwrite(ledpini[i],low); for(int j=4;j>-1; j--) digitalwrite(ledpini[j],high); digitalwrite(ledpini[j], LOW); Arduino ile SeriPort Üzerinden Bilgisayara Veri Yollama Gerek arduinonun kontrolü gerekse işlenen değerlerin kullanıcıya aktarılması için arduinomuz ile bilgisayarımız arasındaki haberleşmeyi yapmamız gerekir. Bu haberleşme arduinonun RX ve TX ayaklarından gerçekleşecektir. Haberleşme için her zamanki gibi arduinoyu USB üzerinden bilgisayarımıza takmamız yeterli olmaktadır. Haberleşme için setup fonksiyonumuza başlatma kodunu yazmayı unutmayalım. Aşağıdaki kod ile bilgisayara her saniye artan sayımızı yolluyoruz. Uygulama:7 int sayici = 32760; Serial.begin(9600); // sayici adında ve ilk değeri 32760 olan bir değişken tanımlandı. // Bilgisayar ile arduinomuzun haberleşmesini başlatıyoruz. // Bilgisayarın ve arduinonun aynı hızda çalışması için 9600 yazdık. // Yani saniyede 9600 tane bit transferi olacaktır. Serial.print("Sayicimizin degeri= "); // Ekrana mesajımızı yazdırıyoruz. Serial.println(sayici); // sayaç değerimizi ekrana yazdırıp yeni satıra geçiyoruz. delay(1000); // Bir saniye bekle sayici = sayici+1; //Sayıcının değerini bir arttır.
Not: İnt veri tipi maksimum +32767 değerini alır sayacın değeri bu rakamı geçtiğinde -32768 değeri oluşacaktır. Dolayısıyla veri tipleri ve değişkenler planlanırken limitlerine dikkat edilmesi gerekir. Uygulama:8 2.pindeki butona her basıldığında sayaç değerini 0 dan başlayıp bir arttıran ve seri bilgi olarak gönderen program. const int buttonpin = 2; // Butonun pin numarası int sayici = 0; //sayacimiz int ButonDurumu = 0; // Butonun durumu pinmode(buttonpin, INPUT); //butonpin olarak adlandırılan 2 nolu pin giriş olarak tanımlandı Serial.begin(9600); //Seri iletişim tanımlaması ButonDurumu = digitalread(buttonpin); //2.pin (buton pini) değeri lojik 1 veya lojik 0 değişkene aktarıldı if (ButonDurumu == HIGH) //Eğer butona basıldıysa sayici ++; // sayici = sayici + 1; Serial.print("Sayicimizin degeri= "); // Ekrana mesajımızı yazdırıyoruz. Serial.println(sayici); // sayaç değerimizi ekrana yazdırıp yeni satıra geçiyoruz. while(butondurumu == HIGH) // Butondan elini çekene kadar program burada kalır // Böylece butona her basıldığında sadece bir kere değer arttırılır ButonDurumu = digitalread(buttonpin); While korumasına rağmen butona bir kez basıldığı halde birkaç artım olması daha iyi çözüm bulunması gerektiğini göstermektedir.