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
-
Python Temelleri Genel Tekrar
14:39:24 - 13/12/2025 -
Python Performans İpuçları
14:38:59 - 13/12/2025 -
Python’da Temiz Kod Yazma
14:38:28 - 13/12/2025 -
Python Mini Proje: Sayı Tahmin Oyunu
14:37:58 - 13/12/2025 -
Python Mini Proje: Hesap Makinesi
14:37:31 - 13/12/2025