3. Ders - Kara Şimşek Devresi Yapımı ve Temel Programlama Bilgileri




1. DEĞİŞKENLER VE OPERATÖRLER

Arduino programında C programlama dili kullanılır. Bu nedenle temel seviyede C programlama dilinden bahsedeceğim.

1.1. Değişkenler: Program içerisinde farklı değerler alarak programın işleyişini gerçekleştiren değerler kümesine denir. Değişken tanımlarken dikkat etmemiz gereken hususlar vardır. Bunlar:
  • Değişken tanımlanırken büyük ve küçük harf duyarlılığı vardır. Aşağıdaki örnekte tanımlanan değişkenler aynı isme sahip farklı değişkenlerdir.
                             int Deger;
                             int DEGER;
                             int DeGer;
  • Değişken isimleri kesinlikle rakamla başlamaz. Fakat ilk karakterden sonra diğer karakterler rakam olabilir.
                            int 9Deger; //Yanlış
                            int Deger9;
                            string Ad1;
  • Değişken isimleri içerisinde noktalama işaretleri ve diğer karakterler kullanılmaz. Sadece alt çizgi ( _ ) karakteri kullanılabilir.
                           int De&ger; //Yanlış
                           int Ad+1//Yanlış
                           string Ad_Soyad;
  • Değişken isimleri birden fazla kelimeden oluşamaz. Yani kelimeleri boşluk tuşuyla ayıramayız. birden fazla kelimeden oluşacaksa alt çizgi " _ " karakteri kullanılır.
                         string Ad  Soyad//Yanlış
                         strind Ad_Soyad;

  • Değişken tanımlamada Türkçe karakter kullanamayız. Değişken ismini nasıl tanımladıysak program içerisinde değiştirmeden kullanmalıyız.
  • C# programında kullanılan komutlar değişken ismi olarak kullanılmaz.
                        string text; // Yanlış

Kullanılan Değişken Türleri

1. Tamsayı Değişken Tipleri: Sadece sayısal değer alabilir. Sayısal değerlerinde ondalıklı kısımların kullanılmadığı değişken türüdür.

DeğişkenDeğişken AdıDeğişken Aralığı
SByteSigned Byte(-128) ~ (127)
ByteByte0 ~ 255
shortShort(-32768) ~ (+32767)
ushortUnsigned Short0 ~ 65535
intInteger(-2147483648) ~ (+2147483647)
uintUnsigned Integer0 ~ 4294967295
longLong(-9223372036854775808) ~ (+9223372036854775807)
ulongUnsigned Long0 ~ 184467440737095516157

2. Ondalıklı Sayı Değişken Tipleri: Sadece ondalıklı sayısal değerleri alabilir.

DeğişkenDeğişken AdıDeğişken Aralığı
floatFloat 1.5x10-45) ~ (±3.4x1038 )
doubleDouble 5.0x10-324) ~ (±1.7x10308 )
decimalDecimal 1.0x10e-28) ~ (±7.9x10e28 )

3. Metin Türü Değişken Tipleri: Sayısal değerler dışında metinsel değerleri barındırmak için kullanılan değişken tipidir.

  • String: Metinsel içerikli değerleri alabilen değişken tipidir
                          String Ad;
                          Ad="ALİ CAN";

  • Char: Metinsel bir değişken türüdür, fakat değer olarak içerisinde tek bir karakteri barındırır.
                          Char Karakter;
                          Karakter='A';
4. bool değişken: "true" ve "false" olmak üzere sadece 2 değer alır. Evli-Bekar, Evet-Hayır gibi iki secenekli durumlar için kullanılır.

bool Durum;
                       
5. Sabit Tanımlamak: Program içerisinde değişmeyen sayısal verileri tanımlamak için kullanılır. 

const Double Pi=3,14; //Sabit değer

Sabit tanımlarken "const" deyimi kullanılır arkasından sabitin veri türü tanımlar ve son olarak sabitin ismi belirtilerek değeri atanır. 

6. Dizi Değişkenlerin Tanımlanması: Çok elemanlı olan bir yapıda değişken tanımlarken dizi değişken kullanılır. Örneğin bir sınıfa ait öğrencilere ait veriler için değişken tanımlanırken dizi değişkenler kullanılır.

Double[] Sinif=new Double[30];

Yukarıda "Sinif" isminde, 30 elemanlı,  double veri türünde bir dizi değişken tanımlanmıştır. Burada dikkat etmemiz gereken nokta dizilerde indis değeri "0" (Sıfır) ile başlar. Yukarıda tanımladığımız dizinin ilk elemanın indis değeri "0" son elemanın indis değeri ise "29" olacaktır.

const int ledPini [] = {8,9,10,11,12};

Yukarıki örnekte ise integer veri türünde 5 boyutlu sabit bir dizi tanımlanmıştır.Bu dizideki elemanların değerleriaşağıdaki gibidir

ledPini[0]=8, ledPini[1]=9, ledPini[2]=10, ledPini[3]=11, ledPini[4]=12, 

1.2. Operatörler

Programda kullanılan değişkenler ve sabitler üzerinde yapılan  matematiksel ve karşılaştırma işlemleri operatörler tarafından gerçekleştirilir.


OperatörAnlamıÖrnekAçıklama
+Toplma10+30
-Fark30-20
*Çarp25*10
/Böl50/5
%Mod10%3
=AtamaA=20
= =Gerçek Eşitlikİf(A= =20)
!=Eşit Değilif(x ! =20)
||Veyaif( (k= =5) || (m>10) )
|Mantıksal Veya
&&Veif( (k= =5) && (m>10) )
&Mantıksal Ve
>>Sağa Ötele20>>520/25
<<Sola Ötele20<<520*25
* =Çarp
+ =Topla
- =Çıkar
/=Böl
<<=Sola ÖteleX<<=2
>>=Sağa ÖteleX>>=2
%=ModY%=2Y=Y%2
>Büyükm>45
<Küçükm<45
>=Büyük Eşitm>=45
<=Küçük Eşitm<=45
+ +Bir arttırm++m=m+1
- -Bir eksiltm--m=m -1

2. Kara Şimşek Programı ve Çalıştırılması

Kara şimşek olarak adlandırılan, paralel bağlı LED’lerden oluşan uygulamayı anlatacağım. Uygulamada devremizi istediğimiz kadar LED bağlayabiliriz. Bu uygulamayı 6 adet LED ile gerçekleştireceğiz. Aşağıdaki ilk uygulamamızda çıkış pinleri tek tek tanımlandı. Ana programda 7 numaralı pine bağlı portdan başlayarak sırasıyla 12 numaralı pine bağlı porta kadar ilk önce port lojik 1 yapıldı (5 volt çıkış) arkasından 100 mili saniye beklendi ve aynı port lojik 0 (Çıkış 0 volt) yapıldı. Bu işlemler tanımlanan portların hepsine sırasıyla uygulandı.



Kara Şimşek İlk Uygulama

void setup()
{
    pinMode (7, OUTPUT); // 7 Numaralı Digital Pin Çıkış yapıldı
    pinMode (8, OUTPUT); // 8 Numaralı Digital Pin Çıkış yapıldı
    pinMode (9,OUTPUT); // 9 Numaralı Digital Pin Çıkış yapıldı
    pinMode (10, OUTPUT); // 10 Numaralı Digital Pin Çıkış yapıldı
    pinMode (11, OUTPUT); // 11 Numaralı Digital Pin Çıkış yapıldı
    pinMode (12, OUTPUT); // 12 Numaralı Digital Pin Çıkış yapıldı
}

void loop()
{
    digitalWrite (7, HIGH); // 7 Numaralı Pin Lojik 1 yapıldı (5 Volt) - LED Yanar
    delay (100); // 100 mili saniye bekle
    digitalWrite (7, LOW); // 7 Numaralı Pin Lojik 0 yapıldı (0 Volt) -  LED Söner
    digitalWrite (8, HIGH); // 8 Numaralı Pin Lojik 1 yapıldı (5 Volt) - LED Yanar
    delay(100); // 100 mili saniye bekle
    digitalWrite (8, LOW); // 8 Numaralı Pin Lojik 0 yapıldı (0 Volt) - LED Söner
    digitalWrite (9 , HIGH); // 9 Numaralı Pin Lojik 1 yapıldı (5 Volt) - LED Yanar
    delay(100); // 100 mili saniye bekle
    digitalWrite (9, LOW); // 9 Numaralı Pin Lojik 0 yapıldı (0 Volt) - LED Söner
    digitalWrite (10, HIGH); 10 Numaralı Pin Lojik 1 yapıldı (5 Volt) -  LED Yanar
    delay(100); // 100 mili saniye bekle
    digitalWrite (10, LOW); 10 Numaralı Pin Lojik 0 yapıldı (0 Volt) - LED Söner
    digitalWrite (11, HIGH); 11 Numaralı Pin Lojik 1 yapıldı (5 Volt) - LED Yanar
    delay(100); // 100 mili saniye bekle
    digitalWrite (11, LOW); 11 Numaralı Pin Lojik 0 yapıldı (0 Volt) - LED Söner
    digitalWrite (12, HIGH); 12 Numaralı Pin Lojik 1 yapıldı (5 Volt) -LED Yanar
    delay(100); // 100 mili saniye bekle
    digitalWrite (12, LOW); 12 Numaralı Pin Lojik 0 yapıldı (0 Volt) - LED Söner

}

Kara Şimşek İkinci Uygulama

İlk uygulamamızı programlama bilgimizi kullanarak kısaltabilir ve daha anlaşılır hale getirebiliriz. İlk olarak kullanacağımız port numaraları için integer veri türünde sabit bir dizi tanımlıyoruz. Arkasından bu dizi değişkeni ve for döngüsünü kullanarak Port pinlerini çıkış olarak tanımladık. For döngüsü program içerindeki tekrarlı işlemleri gerçekleştirmek için kullanılır. For döngüsünün yapısı aşağıdaki gibidir.

For(int i =Başlangıç Değeri; i <= Bitiş Değeri; Artım Değeri)
{
      // Buradaki kodlar başlangıç değeri ile bitiş değerine arasındaki fark kadar tekrar eder.
      // Bitiş değerine kadar sayılırken değer artım değeri kadar artar.
}

For(int i =1; i < =10; i ++)
{
      // Bu aradaki kodlar 10 defa tekrar edecek
      // Her tekrarda i değeri 1 arttırılacak
      // i değeri 10’a eşit olana kadar döngü devam edecek
}

const int ledPini [] = {7,8,9,10,11,12}; // Port Numaraları için Sabit Dizi - ledPini[0]=7 gibi
void setup ()
{
    for(int i=0; i<6;i++)
   {
        pinMode(ledPini [i], OUTPUT); // LED pinlerini çıkış olarak tanımladık
    }
}

void loop()
{
    for(int i=0; i<=5; i++) //İleri Sayım için
   {
       digitalWrite(ledPini[i],HIGH); //ledPini[i] Lojik 1 yapıldı (5 Volt) - LED Yanar 
       delay(100); // 100 mili saniye bekle
       digitalWrite(ledPini[i],LOW); // ledPini[i] Lojik 0 yapıldı (0 Volt) - LED SÖNER
   }

 for(int j=5; j>=0; j--) //Geri Sayım için
   {
       digitalWrite(ledPini[j],HIGH); //ledPini[i] Lojik 1 yapıldı (5 Volt) - LED Yanar 
       delay(100); // 100 mili saniye bekle
       digitalWrite(ledPini[j],LOW); // ledPini[i] Lojik 0 yapıldı (0 Volt) - LED SÖNER
   }
}
Ana programda ledPini[i] olarak tanımlanan sabit dizi ile pin çıkışları iki for döngüsü içerisinde kontrol edildi. Sırasıyla ledPini[i] numaralı pine bağlı port ilk önce lojik 1 yapıldı (5 volt çıkış) arkasından 100 mili saniye beklendi ve aynı port lojik 0 (Çıkış 0 volt) yapıldı. Bu işlemler for döngüsü bitene kadar tanımlanan portların hepsine sırasıyla uygulandı.


Ders Videosu