Robot Programlama – Arduino Tümleşik Geliştirme Ortamının “Değişken” Yapısı

9. Arduino Tümleşik Geliştirme Ortamının “Değişken” Yapısı

Sabitler

Sabitler Arduino dilinde önceden tanımlanmış ifadelerdir. Programların okunmasını kolaylaştırmak için kullanılırlar. Sabitler gruplar hâlinde sınıflandırılmaktadır.

HIGH | LOW

Okuma veya yazma yaparken dijital pine verilen aktif veya/pasif olma durumunu ifade eder. HIGH ile pin çıkışı aktif edilirken, LOW ile pin çıkışı pasif yapılmakta dır. Pim aktif hâle getirildiğinde (HIGH yapıldığında) 5 Volt ile çalışan kartlarda 3 volttan daha yüksek bir voltaj mevcutken 3.3 Volt ile çalışan kartlarda 2 volttan daha yüksek bir voltaj bulunmaktadır. LOW durumunda ise (LOW yapıldığında) 5 Volt ile çalışan boardlarda 3 volttan daha düşük bir voltaj mevcutken 3.3 Volt ile çalışan boardlarda 2 volttan daha düşük bir voltaj bulunmaktadır.

HIGH LOW kullanım örneği

INPUT | OUTPUT

Temelde dijital pine verilen modunun giriş ya da çıkış olacağı belirlenmektedir. Dijital pinler INPUT, INPUT_PULLUP, veya OUTPUT olarak kullanılabilmektedir. Dijital pinlerin elektriksel davranışı pinMode() ile değiştirilebilmektedir.

INPUT OUTPUT kullanım örneği

INPUT: Belirtilen pini giriş olarak ayarlamaktadır.

OUTPUT: Belirtilen pini çıkış olarak ayarlamaktadır.

INPUT_PULLUP: Belirtilen pini giriş olarak ayarlamakta ve dahili pull-up direncini aktif etmektedir. Pull-up direnci dijital pinlerin giriş olarak kullanıldığı uygulamalarda giriş sinyalinin bozulmasını önler (lojik seviyeyi koruyarak) ve harici direç kullanma ihtiyacını da ortadan kaldırır. Örneğin bir dijital pine buton bağlandığında harici direnç kullanılmasına gerek duyulmaz.

LED_BUILTIN

Arduino kartlarının bir çoğu, bir dirençle seri olarak bağlı bir LED’in bulunduğu bir pime sahiptir. Sabit LED_BUILTIN, yerleşik LED’in bağlandığı pinin numarasıdır. Genellikle bu LED dijital pin 13’e bağlanmıştır.

true | false



Arduino da doğruyu ve yanlışı belirtmek için kullanılan iki sabit mantıksal tanımlamadır. Yanlış false 0 (sıfır) olarak tanımlanır. Doğru ise true 1 olarak tanımlanır. Ancak doğru olarak tanımlamanın daha geniş bir anlamı vardır. Boolean anlamında, sıfır olmayan herhangi bir tam sayı doğrudur. Dolayısıyla -1, 2 ve -200 tümüyle Boolean anlamında doğru olarak tanımlanır.

True False kullanım örneği

integer constants

Sayı sistemleri için kullanılırlar. Tamsayı sabitleri, 123 gibi doğrudan bir eskizde kullanılan rakamlardır. Varsayılan olarak bu rakamlar int olarak kabul edilir, ancak bunlar U ve L değiştiricileriyle değiştirilebilmektedir. Normalde tamsayı sabitleri taban 10 (ondalık) tamsayılar olarak kabul edilirler, ancak diğer tabanlara sayı girmek için özel gösterim (formatlayıcılar) kullanılabilmektedir.

Decimal kullandığımız 10luk sayı sistemidir.

101 == ((1 * 10^2) + (0 * 10^1) + 1)

Binary ikili sayı sistemidir. 0 ve 1 kullanılmaktadır.

B101 == ((1 * 2^2) + (0 * 2^1) + 1) decimal

Octal sekizlik sayı sistemidir. 0 dan 7 ye kadar sayılardan oluşmaktadır.

0101 == ((1 * 8^2) + (0 * 8^1) + 1) decimal

Hexadecimal on altılık sayı sistemidir. Sembollerden 10 tanesi rakamlarla (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), geri kalan 6 tanesi harflerle (A, B, C, D, E, F) temsil edilmektedir.

0x101 == ((1 * 16^2) + (0 * 16^1) + 1) ==257

Integer Constants kullanım formatı

U & L

Sayı tanımlamaları varsayılan int olarak kabul edilmektedir. Başka bir veri türüne sahip olan sayıları belirtmek için U, L imzasız veri türü kullanılmaktadır.

Sabiti imzalamamış bir veri biçimine zorlamak için bir ‘u’ veya ‘U’. Örnek: 33u

Sabiti uzun bir veri formatına zorlamak için bir ‘l’ veya ‘L’. Örnek: 100000L

Sabiti imzasız bir uzun sabit hâline getirmek için bir ‘ul’ veya ‘UL’. Örnek: 32767ul

floating point constants

Tamsayı sabitlerine benzer şekilde, kayan nokta sabitleri kodu daha okunabilir hâle getirmek için kullanılmaktadır. ‘E’ ve ‘e’, geçerli üs göstergeleri olarak kabul edilir. Örnek
2.34E5=2.34 * 10^5 234000; 67e-12= 67.0 * 10^-12 .000000000067

Veri Tipleri

void

Void anahtar sözcüğü yalnızca işlev bildirimlerinde sadece fonksiyon tanımlanırken kullanılır. Bu işlevin çağrıldığı işleve herhangi bir bilgi döndürmemesi beklenmez. Yani fonksiyonun değer döndürmeyeceği anlamına gelir.

void kullanım örneği

boolean

Bir boolean doğru veya yanlış olmak üzere iki değerden birini tutar. 0 veya 1 değerlerini “true” ve “false” olarak alır.

boolean kullanım örneği

char

Bir karakter değeri saklayan (1 bayt bellek alan) veri tipidir. Karakter verisini tanımlamak için kullanılmaktadır. Karakter harfleri, tek tırnak işaretleriyle yazılır: ‘A’ (birden fazla karakter için çift tırnak kullanılır: “ABC”). Ancak karakterler sayı olarak saklanır.

char kullanım örneği

unsigned char

1 baytlık belleği kaplayan işaretsiz bir veri türüdür. Bayt veri türü ile aynıdır. 0-255 arası değer alır.

unsigned char kullanım örneği

byte

Bir bayt, 0’dan 255’e kadar 8 bitlik bir işaretsiz sayı verisi taşır. Binary olarak da işlem yapılabilir.

byte kullanım örneği

int

Tamsayıları saklamak için kullanılan birincil veri türüdür. 16 bit işlemcilerde -32,768 ile 32,767 arası 32 bit işlemcilerde ise -2,147,483,648 ile 2,147,483,647 arasında değişen veri saklanabilir.

int kullanım örneği

unsigned int



Negatif sayıları saklamak yerine 16 bitlik işlemcilerde sadece 0 ile 65,535 arasında değişen 2 baytlık (16 bit) bir pozitif değeri saklar. 32 bit işlemcilerde 0 ila 4,294,967,295 arasında değişen 4 baytlık (32 bit) bir pozitif değeri saklar.

unsigned int kullanım örneği

word

16 bitlik işlemcisi bulunan kartlarda 16 bitlik bir işaretsiz sayı saklanır. 32 bitlik işlemcisi bulunan kartlarda 32 bitlik bir işaretsiz sayı saklanır.

word kullanım örneği

long

Sayı saklamak için genişletilmiş boyut değişkenleridir ve 32 bit (4 bayt), -2,147,483,648 ile 2,147,483,647 arasında değişen değeri saklar. Tanımlanacak değişkenin saklaması gereken sayı 32 bit uzunluğunda tam sayi ise long kullanılmalıdır.

long kullanım örneği

unsigned long

Unsigned long değişkenler sayı saklamak için genişletilmiş boyut değişkenleridir ve 32 bit (4 bayt) depolamaktadır. Standart “long”un aksine, unsigned long 0 ile 4,294,967,295 arasında değişen pozitif sayıları saklar, negatif sayıları saklamaz. unsigned long değişken adı = o değişkene atayan değer olarak yazılır.

unsigned long kullanım örneği

short

Short, 16 bitlik (2 baytlık) bir veri türüdür. -32,768 ile 32,767 arasında değişen değeri saklar.

short kullanım örneği

float

Ondalıklı sayılar için kullanılan veri türüdür. Ondalıklı sayılar, tam sayılara göre daha yüksek çözünürlüğe sahip oldukları için genellikle analog ve sürekli değerleri yaklaştırmak için kullanılırlar. Ondalık sayıları 3.4028235E + 38 ile -3.4028235E + 38 arasında olabilirler. Bunlar 32 bit (4 bayt) bilgi olarak saklanırlar.

float kullanım örneği

double

Double, ondalıklı sayılar için kullanılan veri türüdür. Burada hassasiyet 2 kat yüksektir. “double” uygulaması tam olarak “float” ile aynıdır. Uno ve diğer ATMEGA tabanlı kartlarda 4 bayt yer kaplar. Arduino Due’da “double” 8 bayt (64 bit) hassaslığa sahiptir.

string char array

Yazı verisi depolamak için kullanılır. Karakter dizisidir. Metin dizeleri string ile gösterilir. Yandaki gösterimlerin tümü geçerli kullanım şekillerine örnektir.

string char array kullanım örneği

substring()

String, içindeki kelimeden kaç karakter alacağını belirtmek için kullanılır.

substring kullanım örneği

String – object

String sınıfı, metin dizelerini karakter dizilerinden daha karmaşık yollarla kullanılmasına ve değiştirilmesine olanak tanır. Dizeler bir araya getirebilir, onlara eklenebilir, alt dizeler aranıp değiştirilebilir. Basit bir karakter diziliminden daha fazla bellek kullanır ancak daha kullanışlıdır.

array



Bir dizi, bir dizin numarasıyla erişilen değişkenlerin bir toplamıdır. Diğer bir ifadeyle her birine indeks numarası ile ulaşılan aynı türdeki veri topluluğudur. Dizi, bilgisayar belleğinde aynı isim altında genellikle aynı tipten çok sayıda veriyi bir arada saklayan veri yapısıdır. Yandaki yöntemlerin tümü, bir diziyi oluşturmak (bildirmek) için kullanılabilecek geçerli biçimlerdir.

array kullanım örneği

Bir dizi “myInts”’de olduğu gibi dizi başlatılmadan tanımlanabilir. Burada 6 farklı “int (integer)” veri tipinde değer tanımlaması yapılmıştır.

“myPins”’te açıkça bir boyut seçmeden bir dizi tanımlanmıştır. Bu durumda derleyici elemanları sayar ve uygun büyüklükte bir diziyi otomatik olarak oluşturur.

“mySensVals” örneğinde olduğu gibi dizi başlatabilir ve boyutlandırabilir.

char türündeki bir diziyi bildirirken, gerekli boş karakteri tutmak için fazladan bir eleman gerekmektedir.

Tanımlamış değişkenlere erişim için köşeli parantez ile değişkenin sıra numarası belirtilmektedir. Yani başta tanımlanan yada boş bırakılan indis’i çağırma işlemi gerçekleştirilmektedir. Dikkat edilmesi gereken nokta indisin ‘0’ dan başladığıdır. Yani örnekte yazdığımız 5 farklı değeri olan “mySensVals” kümemizde 4 numaralı elemana erişmek için köşeli parantez içinde [4] değilde [3] yazılmalıdır. Örnekte “mySensVals” kümemize 1. elaman olarak 10 değeri atanmıştır. Yine ayni diziden 4 numaralı değer (2) alınmıştır.

array’ın For döngüsünde kullanım örneği

Dizilerin for döngülerinde kullanımı için yukarıdaki kullanım şeklini inceleyiniz.

Dönüşümler

char()

Herhangi bir değeri char veri türüne dönüştürür.

char kullanım örneği 1

byte()

Herhangi bir değeri byte veri türüne dönüştürür.

byte kullanım örneği 1

int()

Herhangi bir değeri int (integer-tam sayı) veri türüne dönüştürür.

int kullanım örneği 1

word()

Herhangi bir değeri word veri türüne dönüştürür ya da iki bayt bir kelime oluşturur. Kelime oluştururken word (h, l) şeklinde ifade edilir. Burada H: sözcüğün üst sırası (en soldaki), L: sözcüğün en düşük (en sağdaki) baytını ifade eder.

word kullanım örneği 1

long()

Herhangi bir değeri long veri türüne dönüştürür.

long kullanım örneği 1

float()

Herhangi bir değeri float veri türüne dönüştürür.

float kullanım örneği 1

Değişken Kapsamları

static

Statik olarak tanımlanan değişkenler yalnızca bir işleve çağrıldığında (o işleve özel) ilk kez oluşturulur ve başlatılırlar. Bu değişkenler sonra silinmeyip bellekte tutulmaktadır ve daha sonra kullanılmak istendiğinde yeniden oluşturulmadan bellekten çağrılmaktadır.

static kullanım örneği

volatile

Volatile ile tanımlanan değişkenler Arduino mikro kontrolorünün ram bölgesine kaydedilir. Kullanılmak istendiğinde doğrudan ram bellekten okunur. Volatile kullanıldığında değişkenin değerini interrupt ile değiştirmek gerekmektedir.

volatile kullanım örneği

const

Const değişken türü diğer tüm değişkenler gibi kullanılır. Oluşturulan değişkenler sabitlenirler ve değerleri daha sonradan değiştirilemezler.

const kullanım örneği

Yardımcılar

sizeof()

Sizeof işleci, herhangi bir tipteki değişken türünün bayt sayısını (değişkenin kaç bayt olduğunu) verir veya bir dizinin işgal ettiği toplam bayt sayısını döndürür. Yandaki program bir seferde bir karakterlik bir metin dizisi yazmaktadır. Metnin ifadesini değiştirerek deneyiniz.

sizeof kullanım örneği

PROGMEM

Bilgiyi SRAM bellek yerine Flash bellekte depolamak için kullanılmaktadır. Programda uzun char yazıldığında sorun çıkarabilmektedir. Bu nedenle çok uzun metinlerin Flash belleğe kaydedilmesi gerekmektedir. PROGMEM değişken değiştiricidir, yalnızca pgmspace.h’de tanımlanan veri türleriyle birlikte kullanılmalıdır. Yani kullanılabilmesi için programa #include <avr/pgmspace.h> kütüphanesi eklenmelidir.

PROGMEM kullanım örneği

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir