DİZİLER/ARRAY: Dizi yi çeşitli şekillerde tanımlamak mümkün. Dizi içlerinde birden fazla değer saklayabilen veri kümeleridir diye tanımlarsak uygun olur sanırım. Diziler yan yana dizilmiş kutucuklar olarak ifade edebiliriz. Örneğin posta kutuları bir dizi örneğidir. Burada 5 adet posta kutusu gözü bir dizi oluşturur. Her bir göze aynı türden ürünler yerleştirilebilir. Örneğin posta kutumuza atılan ürünleri bir düşünün. Hepsi de kâğıt ve türevleri ürünlerdir. Elektrik,su, doğalgaz faturaları,zarflar,reklam ilanları vb. kâğıt ürünlerdir. Posta kutusundaki bu bilgiye veya evraka ulaşmak için o kutuya ait anahtarı kullanmamız gerekir. Programlama dilinde kullanılan dizilerde buna benzer aynı türdeki bilgiler bellekte ardışık adreslerden oluşan bir bölüm bu dizi için ayrılır. Daha sonra bilgi gerektiğinde hücre bilgisi verilerek bu bilgi alınıp okunabilir veya bu hücreye yeni bilgi yazılabilir. Örneğin yukarıdaki posta kutusunu bir program yazılımında dizi halinde ifade etmek istersek bununla ilgili basit bir kod yazalım ve ekrana yazdıralım. Burda postakutusu degişkenine rastgele verileri yazalım Köşeli parantez içerisinde yazılan 0,1,2,3,4 indeks değeridir. Karşılarında yazan rakamlar 10,12,15,20,30 rakamları ise dizinin elemanlarının içeriğidir.
Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir. İnt postakutusu[5]={10,12,15,20,30}; İnt : değişken türünü belirtir. posta kutusu: dizimize verdiğimiz isimdir. [5] : Köşeli parantez içindeki sayı dizinin kaç elemanlı olduğunu belirtir. Bizim örnekte göz sayısı 5 dir. = atama deyimidir. Köşeli parantez içindeki bilgileri posta kutusu dizinine yükler. {10,12,15,20,30} : Beş elemanlı dizinin elemanlarıdır. Daha sonra dizi içerisindeki herhangi bir bilgiye ulaşmak isterseniz köşeli parantez içeresinde dizinin indeks değerini yazmanız gerekir. Mesela int postakutusu[5]={ 10,12,15,20,30}; diye bir diziniz var ve siz 20 değerini istiyorsanız bu durumda postakutusu [3]; yazmanız gerekir. Dizi kullanırken dizinin elemanlarını tek tek tanımlayabilirsiniz. Ama yukarıdaki dizi tanımlama daha pratik bir yöntemdir ve daha yaygın olarak bu şekil kullanılır.ama her ikiside doğrudur. Şimdi diziyi tek satırda tanımladığımız haliyle tekrar yazalım. Ekran çıktılarına baktığımızda aynı sonucu elde ettiğimizi görüyoruz. Her iki kullanımda doğru olmasına rağmen dizi tanımalarınızda ikinci yöntemi kullanmanızı tavsiye ederim. Diziler, aynı posta kutularında olduğu gibi tek bir satırdan ve çok hücreden oluşabileceği( tek boyutlu diziler)gibi çok sayıda sütün ve satırdan da oluşabilir.(iki boyutlu diziler)
Mesela yukarıdaki posta kutusu 3 satır ve 4 sütundan oluşmaktadır. Burada sütün ve satır sayısını daha da artırabilirsiniz. Kırmızı lar sütunları, maviler satırları, siyahlarda hücrelerdeki bilgileri gösteriyor. Siyahlar yerine istediğiniz sayı yazılabilir. Şimdi bu yeni posta kutusunu dizi halinde nasıl gösterildiğini görelim. İnt postakutusu[3] [4] { { 0,1,2,3}, { 0,1,2,3}, { 0,1,2,3} }; Şeklinde yazılabileceği gibi matris formatında da yazılabilir İnt postakutusu[3] [4] { { 0,1,2,3}, { 0,1,2,3}, { 0,1,2,3} }; İki yazım arasında sadece şekil farkı vardır. İstediğiniz gibi yazabilirsiniz. Aynı işlemi yapar. Sadece yazım şekline ve işaretlerin kullanımına dikkat etmek gerekir. İki boyutlu diziler tanımlanırken önce satır sayısı, sonra sütün sayısı yazılır. postakutusu[3] [4] de 3 satır sayısını, 4 sütün sayısını gösterir. Veriler sıra ile girilmelidir. Yani ilk yazdığınız veriyi 0,sonraki veriyi 1,sonrakini 2 diye yorumlar. Yani buraya yazacağınız sayıların yeri önemlidir. Sayıları rast gele yazarsanız veriyi kullanırken sizin kafanızdaki sıraya göre değil buradaki sıralamaya göre işlem yapar. Dizi tanımlarken [] köşeli parantez içerisine eleman sayısını yazmayabilirsiniz. Ancak kullanacağınız eleman sayısı belli ise burayı boş bırakmamak, eleman sayısı yazmak daha doğru bir işlemdir. Çünkü siz bir sayı belirttiğinizde bellek te sizin yazdığınız değere göre bir alan ayırır. İnt postakutusu[5]={10,12,15,20,30}; ile İnt postakutusu[ ]={10,12,15,20,30}; arasında programın çalışma mantığı açısından hiçbir fark yoktur. Her ikisi de doğrudur. Ancak bellekte daha az yer işgal etmek açısından ilk gösterim şekli daha uygundur. Dizileri oluşturan bilgi sayı olabileceği gibi harf ve karakterlerden de oluşabilir. Bu durumda değişken tipimizin int yerine char seçilmesi gerekir. Char türünde bir dizi tanımlanırken her bir karakter ayrı ayrı ve tek tırnak içinde yazılır.her bir karakter arasına virgül(,) işareti konur ve yine tüm karakterler küme parantezi içerisine alınır. char isim[7]={'i','n','c','i','r','l','i'}; Köşeli parantez içerisinde dizi eleman sayısı yukarıdaki gibi belirtilebileceği gibi aşağıdaki gibi belirtilmeden de yazılabilir. char isim[ ]={'i','n','c','i','r','l','i'};
Eğer tek tek karakterler işlem yapmamız gerekmiyorsa, daha doğrusu kelimelerle çalışacaksak bu durumda karakterlerin birleşimi olan String den faydalanırız. String kullandığımızda kelime veya kelimeleri çift tırnak içerisinde yazarız. String kullanımıda aynı String kelime1 = incirli meslek lisesi String kelime2= elektrik elektronik teknolojileri String kelime3= alani String kullandığınızda kelimelerle işlem yapabilirsiniz. Kelimeleri birleştirebilirsiniz, birbiri ardına ekleyebilirsiniz, Stringin yanına başka karakterleri de ekleyebilirisiniz. Son bir uyarı daha String yazarken ilk harf S büyük yazılır. Dizi kullanımı ile ilgili iki örnek verip konuyu bitirelim. Önce tek boyutlu dizilere örnek yapalım. Daha önce kara şimşek uygulamasını yapmıştık ve hatırlarsanız bu uygulamanın normalde böyle yapılmadığını sadece konuyu pekiştirmek amacıyla böyle yaptığımızı daha sonra tekrar bu uygulamayı yapacağımız belirtmiştik. İşte şimdi o zaman. Daha önce fritzing şemasını paylaştığım için buraya şemayı eklemiyorum sadece kodlarımız paylaşalım daha az yer kaplasın. Bu uygulamada önce arduino kartımızın 2,3,.,10,11 nolu pinlerini dizi şeklinde tanımlıyoruz.burada for döngüsünü kullanacağımız için bir sayma adında sayaç tanımlıyoruz.ledlerin yanma süresini ayarlamak ve kontrol etmek üzere zaman isimli değişkeni tanımlıyoruz.setup fonksiyonunda for döngüsünü kullanarak pinlerin tamamını çıkış yapıyoruz. Loop döngüsünde iki ayrı for döngüsü kullanıyoruz. İlk döngümüz ilk ledde itibaren zaman süresince bir ledi önce yakıyor sonra söndürüyor. Her döngü zamanında bir led yakıp söndürülerek led lerin örneğin sağa doğru yanıp sönmesini sağlıyor. İlk for döngü tamamlandığında alttaki for döngüsüne geçiyor. Bu sefer sayaç bir eksiltilerek ledlerin yanıp sönmesi sağlanıyor. İki for döngüsü loop fonksiyonunda yazıldığı için sayma işlemi önce 1 den 10 doğru ileri yönde, daha sonrada 9 dan 0 a doğru geri yönde sürekli devam ediyor. Bu kod yazım şekli daha önceki uygulamaya göre çok daha az yer kaplar ve hafızada da az yer kaplaması nedeniyle tercih edilir. Şimdi gelelim kodları paylaşmaya
Bu örneğe ek olarak birde iki boyutlu dizilere bir örnek verelim ve konuyu bitirelim. Programlama anlatılırken klasikleşen bazı örnekler vardır. Her kitapta her kaynakta mutlaka bulunur. Mesela seri port ekranına veya lcd ye hello World yazdırmak gibi. Yine o klasiklerden biri öğrenci notlarıdır. Bizde geleneği bozmayalım iki boyutlu örnek için mesela 4 öğrencinin 5 tane notu olduğunu düşünelim ve buna göre bir iki boyutlu dizi oluşturalım ve bunu seri port ekranına yazdıralım. Söylemeye gerek var mı bilmiyorum ama burada ki notları yazarken buraya bağlı kalmanız gerekmez siz istediğiniz notları yazabilirsiniz
SON: Sanırım Arduino programlama konusunda işlenebilecek konuların üçte birine yakın bir kısmını anlatmaya ve örneklerle açıklamaya çalıştım. Ancak forumdan görebildiğim kadarıyla beklediğim kadar kişiye ulaşmak mümkün olmadı. Sanırım okumayı sevmeyen bir toplum olduğumuzu unuttum. Bu nedenle yazı dizimize burada son veriyorum. Bundan sonra forumda sadece uygulamaya yönelik temrinler paylaşılacak. Hem konu anlatımı hem de örnekleri youtube ortamında paylaşmayı düşünüyorum.