Arduino Değişkenler ve Veri Tipleri

Arduino'da değişkenler, veri tipleri ve belleği kullanma.

Arduino'da değişkenler, programınızın çalışması sırasında değişebilen veya depolamanız gereken bilgileri tutmak için kullanılan adlandırılmış bellek konumlarıdır. Bir nevi, verilerinizi sakladığınız 'kutucuklar' gibi düşünebilirsiniz. ### Değişken Tanımlama Sözdizimi (Syntax) Bir değişken tanımlamak için genel sözdizimi şöyledir: ```arduino veri_tipi degisken_adi; // Sadece tanımlama veri_tipi degisken_adi = baslangic_degeri; // Tanımlama ve başlangıç değeri atama ``` * **`veri_tipi`**: Değişkenin ne tür bir bilgi saklayacağını belirler (tam sayı, ondalıklı sayı, karakter vb.). * **`degisken_adi`**: Değişkene verdiğiniz isimdir. Bu isim harflerle, rakamlarla ve alt çizgiyle (`_`) başlayabilir, ancak rakamla başlayamaz ve boşluk içeremez. Anlamlı isimler vermek kodunuzu daha okunabilir yapar. * **`=`**: Atama operatörüdür. Değişkene bir değer atamak için kullanılır. * **`baslangic_degeri`**: Değişkene ilk başta vermek istediğiniz değerdir. Bu isteğe bağlıdır, ancak değişkenlerinizi bir başlangıç değeriyle tanımlamak iyi bir programlama pratiğidir. * **`;`**: Her C/C++ satırının sonunda olduğu gibi, değişken tanımlama satırının sonunda da noktalı virgül bulunur. **Örnekler:** ```arduino int sayi; // 'sayi' adında bir tam sayı değişkeni tanımlandı. float sicaklik = 23.5; // 'sicaklik' adında bir ondalıklı sayı değişkeni tanımlandı ve 23.5 değeri atandı. char harf = 'A'; // 'harf' adında bir karakter değişkeni tanımlandı ve 'A' değeri atandı. boolean durum = true; // 'durum' adında bir boolean değişkeni tanımlandı ve true değeri atandı. ``` --- ### Veri Tipleri (Data Types) Veri tipleri, değişkenin ne tür bir bilgi saklayacağını (sayı, metin, doğru/yanlış vb.) ve bu bilginin bellekte ne kadar yer kaplayacağını belirler. Doğru veri tipini seçmek, bellek kullanımınızı optimize etmenize (Arduino'ların belleği sınırlıdır) ve beklenmedik hataları önlemenize yardımcı olur. İşte Arduino'da sıkça kullanılan bazı veri tipleri: #### 1. Tam Sayı Tipleri (Integer Types) Bu tipler küsuratsız, tam sayı değerleri saklamak için kullanılır. * **`int` (integer)** * **Açıklama**: En sık kullanılan tam sayı tipidir. Arduino Uno/Nano gibi 16-bit işlemcilerde genellikle 2 bayt (16 bit) yer kaplar. * **Değer Aralığı**: Yaklaşık -32,768 ile 32,767 arası. * **Kullanım**: Pin numaraları, döngü sayaçları, küçük ve orta boyutlu sayısal değerler. ```arduino int potansiyometreDegeri = 512; ``` * **`long`** * **Açıklama**: Daha büyük tam sayılar için kullanılır. 4 bayt (32 bit) yer kaplar. * **Değer Aralığı**: Yaklaşık -2,147,483,648 ile 2,147,483,647 arası. * **Kullanım**: Milisaniye cinsinden zaman değerleri, büyük sayaçlar. ```arduino long sure = millis(); // Programın başlangıcından geçen milisaniye sayısı ``` * **`short`** * **Açıklama**: `int`'ten daha küçük tam sayılar için tasarlanmıştır. Ancak Arduino Uno/Nano gibi çoğu AVR tabanlı kartta `int` gibi 2 bayt yer kaplar. Bu nedenle, `int` yerine `short` kullanmak genellikle bellekten tasarruf sağlamaz. * **Değer Aralığı**: Yaklaşık -32,768 ile 32,767 arası. ```arduino short kucukSayi = -100; ``` * **`byte`** * **Açıklama**: 0 ile 255 arasındaki küçük, pozitif (işaretsiz) tam sayılar için idealdir. 1 bayt (8 bit) yer kaplar. * **Değer Aralığı**: 0 ile 255. * **Kullanım**: Dijital pin durumları, RGB renk değerleri (0-255), küçük sayaçlar. ```arduino byte ledPin = 13; byte kirmiziDeger = 200; ``` * **`unsigned int`, `unsigned long`, `unsigned char` (veya `byte`)** * **Açıklama**: Bu önek (`unsigned`) değişkenin yalnızca pozitif değerler saklayabileceği anlamına gelir. Bu sayede maksimum değer aralığı iki katına çıkar (çünkü negatif sayılar için kullanılan bit artık pozitif sayılar için kullanılır). * **`unsigned int`**: 0 ile 65,535 arası (2 bayt). * **`unsigned long`**: 0 ile 4,294,967,295 arası (4 bayt). * **`unsigned char`**: `byte` ile aynıdır, 0 ile 255 arası (1 bayt). ```arduino unsigned int pulsSayisi = 60000; unsigned long gecenZaman = 3000000000UL; // 'UL' unsigned long sabiti olduğunu belirtir ``` #### 2. Ondalıklı Sayı Tipleri (Floating-Point Types) Küsuratlı, ondalıklı sayı değerleri saklamak için kullanılır. * **`float`** * **Açıklama**: Ondalıklı sayılar için kullanılır. 4 bayt (32 bit) yer kaplar. Hassasiyeti yaklaşık 6-7 ondalık basamaktır. * **Kullanım**: Sıcaklık, voltaj, nem gibi sensör okumaları. ```arduino float sicaklik = 24.75; float pi = 3.14159; ``` * **`double`** * **Açıklama**: Daha yüksek hassasiyetli ondalıklı sayılar için tasarlanmıştır. Ancak çoğu Arduino kartında (Uno, Nano gibi), `double` genellikle `float` ile aynıdır ve 4 bayt yer kaplar. Bazı 32-bit kartlarda (ESP32, Teensy) 8 bayt olabilir. * **Kullanım**: Yüksek hassasiyet gerektiren matematiksel hesaplamalar (ancak Arduino Uno'da `float` ile aynıdır). ```arduino double hassasDeger = 1.23456789; // Arduino Uno'da float ile aynı hassasiyet ``` #### 3. Karakter ve Metin Tipleri (Character and String Types) Karakterleri ve metin dizilerini saklamak için kullanılır. * **`char`** * **Açıklama**: Tek bir karakteri saklamak için kullanılır. 1 bayt (8 bit) yer kaplar. Karakterler tek tırnak (`' '`) içine yazılır. Aynı zamanda ASCII değerlerini (0-255 arası küçük tam sayılar) de saklayabilir. * **Kullanım**: Klavyeden okunan karakterler, özel işaretler. ```arduino char basHarf = 'K'; char sayiKarakter = '5'; // '5' karakteri, 5 sayısı değildir. ``` * **`String` (Büyük 'S' ile)** * **Açıklama**: Birden fazla karakterden oluşan metin dizileri için kullanılan bir C++ sınıfıdır. Dinamik bellek kullanımı nedeniyle, küçük bellekli Arduino'larda dikkatli kullanılmalıdır (bellek parçalanmasına yol açabilir). * **Kullanım**: LCD ekranlara mesaj yazdırma, seri porttan metin gönderme/alma. ```arduino String mesaj = "Merhaba Arduino!"; ``` * **`char[]` (C-stil String)** * **Açıklama**: `String` sınıfına göre daha bellek verimli ve kontrolü daha kolaydır. Karakter dizisi olarak tanımlanır ve sonunda null karakter (`\0`) bulunur. * **Kullanım**: Sabit metinler, menü seçenekleri. ```arduino char isim[] = "Arduino"; // 'Arduino' ve sonuna eklenen '\0' karakteri char buffer[10]; // 9 karakter ve bir null karakter alabilen bir dizi ``` #### 4. Mantıksal Tip (Boolean Type) Mantıksal değerleri saklamak için kullanılır. * **`boolean`** * **Açıklama**: Sadece iki değer alabilir: `true` (doğru) veya `false` (yanlış). 1 bayt yer kaplar. * **Kullanım**: Koşullu ifadeler, bir durumun açık/kapalı, var/yok olduğunu belirtmek. ```arduino boolean ledAcikMi = false; ``` --- ### `const` Anahtar Kelimesi Bir değişkenin değerinin program boyunca **değişmeyeceğini** belirtmek için `const` anahtar kelimesini kullanırız. Bu, kodunuzu daha güvenli (yanlışlıkla değiştirilmesini engeller) ve daha okunabilir hale getirir. Genellikle pin numaraları gibi sabit değerler için kullanılır. ```arduino const int ledPin = 13; // Bu değişkenin değeri program boyunca 13 olarak kalacaktır. const float PI = 3.14159; // Sabit pi değeri ``` --- ### Global ve Lokal Değişkenler * **Global Değişkenler**: `setup()` veya `loop()` fonksiyonları dışında tanımlanan değişkenlerdir. Tüm program boyunca erişilebilir ve değerleri tüm fonksiyonlar arasında paylaşılabilir. * **Lokal Değişkenler**: Bir fonksiyon veya kod bloğu (`{ }`) içinde tanımlanan değişkenlerdir. Sadece tanımlandıkları blok içinde erişilebilirler ve o blok bittiğinde bellekten silinirler. ```arduino // Global değişken int globalSayac = 0; void setup() { Serial.begin(9600); // Lokal değişken (sadece setup() içinde geçerli) int lokalDegisken = 10; Serial.print("Lokal değişken (setup): "); Serial.println(lokalDegisken); } void loop() { globalSayac++; // Global değişkene erişilebilir ve değeri değiştirilebilir. Serial.print("Global sayaç: "); Serial.println(globalSayac); // Bu satır hataya neden olur: lokalDegisken, loop() içinde tanımlı değil. // Serial.println(lokalDegisken); delay(1000); } ``` --- ### Örnek Arduino Kodu Aşağıdaki örnek, farklı veri tiplerini ve değişken tanımlamalarını gösterir: ```arduino // GLOBAL DEĞİŞKENLER // Programın herhangi bir yerinden erişilebilirler. const int ledPin = 13; // LED'in bağlı olduğu dijital pin numarası (sabit) int sensorValue = 0; // Analog sensörden okunan değeri tutacak long lastMillis = 0; // En son millis() değerini tutacak boolean buttonPressed = false; // Butonun basılı olup olmadığını tutacak float temperature = 0.0; // Sıcaklık değeri (ondalıklı) char statusChar = 'R'; // Bir durumu temsil eden karakter ('R' for Ready) String welcomeMessage = "Arduino Basladi!"; // Karşılama mesajı void setup() { Serial.begin(9600); // Seri iletişimi başlat pinMode(ledPin, OUTPUT); // LED pinini çıkış olarak ayarla Serial.println(welcomeMessage); // LOKAL DEĞİŞKENLER // Sadece setup() fonksiyonu içinde geçerlidir. byte setupCounter = 0; // Sadece setup içinde kullanılacak küçük bir sayaç for (int i = 0; i < 3; i++) { setupCounter++; Serial.print("Setup sayaci: "); Serial.println(setupCounter); delay(100); } } void loop() { // Analog A0 pininden sensör değeri oku (0-1023 arası) sensorValue = analogRead(A0); Serial.print("Sensor Degeri: "); Serial.println(sensorValue); // Sıcaklık hesaplaması (örnek) temperature = sensorValue * (5.0 / 1023.0) * 100; // Basit bir dönüşüm Serial.print("Sicaklik: "); Serial.print(temperature); Serial.println(" C"); // Belirli bir koşula göre LED'i kontrol et if (sensorValue > 500) { digitalWrite(ledPin, HIGH); // LED'i aç buttonPressed = true; statusChar = 'H'; // Yüksek değer } else { digitalWrite(ledPin, LOW); // LED'i kapat buttonPressed = false; statusChar = 'L'; // Düşük değer } Serial.print("Buton Basili mi?: "); Serial.println(buttonPressed ? "Evet" : "Hayir"); // Üçlü operatör Serial.print("Durum Karakteri: "); Serial.println(statusChar); // Her 5 saniyede bir mesaj yaz if (millis() - lastMillis >= 5000) { lastMillis = millis(); // Zamanı güncelle Serial.println("5 saniye gecti!"); } delay(1000); // Her bir döngü arasında 1 saniye bekle } ``` Bu detaylı açıklama ile Arduino'da değişkenlerin nasıl tanımlandığını ve yaygın veri tiplerini anlamış olmanız gerekir. Doğru veri tiplerini seçmek ve değişkenleri doğru şekilde kullanmak, etkili ve hatasız Arduino programları yazmanın temelidir.
Son Paylaşımlar
Kategoriler