C etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Arduino Programlama Dili: Temel Yapılar (Değişkenler)

Arduino Programlama Dili: Temel Yapılar (Değişkenler)

Arduino Programlama Dili: Temel Yapılar - Değişkenler

Merhaba Arduino severler!

Bu yazımızda Arduino programlamanın temel taşlarından biri olan değişkenleri inceleyeceğiz. Değişkenler, programlarımızda verileri saklamak, işlemek ve yönetmek için kullandığımız temel araçlardır. Tıpkı bir kutu gibi düşünebilirsiniz, bu kutunun içine sayı, yazı veya herhangi bir bilgiyi koyup, gerektiğinde bu bilgiye erişebiliriz.

Değişken Nedir?

Değişkenler, bilgisayarın belleğinde (RAM) belirli bir alanı temsil eden, adlandırılmış depolama birimleridir. Her değişkenin bir adı (identifier) ve bir türü (data type) vardır. Tür, değişkenin hangi türde veriyi saklayabileceğini (sayı, metin, vb.) belirler. Ad ise, değişkenin değerine erişmek için kullandığımız etikettir.

Değişken Tanımlama (Declaration)

Bir değişkeni kullanmadan önce tanımlamamız gerekir. Tanımlama işlemi, değişkenin adını ve türünü belirtmekten ibarettir. Arduino'da değişken tanımlama sözdizimi şöyledir:


 veri_tipi değişken_adı;
 

Örneğin, bir tam sayı (integer) değişkeni tanımlamak için:


 int sayac;
 

Bu ifade, "sayac" adında bir tam sayı değişkeni oluşturur. Henüz bu değişkene bir değer atamadık, ancak artık bu değişkeni programımızda kullanabiliriz.

Veri Tipleri (Data Types)

Arduino'da sıkça kullanılan bazı veri tipleri şunlardır:

  • int: Tam sayıları (örneğin, -10, 0, 5, 100) saklamak için kullanılır. 2 byte (16 bit) yer kaplar. -32,768 ile 32,767 arasındaki değerleri saklayabilir.
  • long: Daha büyük tam sayıları saklamak için kullanılır. 4 byte (32 bit) yer kaplar. -2,147,483,648 ile 2,147,483,647 arasındaki değerleri saklayabilir.
  • float: Kayan noktalı sayıları (ondalıklı sayılar, örneğin 3.14, -2.5, 1.0) saklamak için kullanılır. 4 byte yer kaplar.
  • double: Daha yüksek hassasiyette kayan noktalı sayıları saklamak için kullanılır. Arduino'da `float` ile aynıdır (4 byte yer kaplar).
  • char: Tek bir karakteri (örneğin, 'a', 'B', '5') saklamak için kullanılır. 1 byte yer kaplar.
  • boolean: Doğru (true) veya yanlış (false) değerlerini saklamak için kullanılır. 1 byte yer kaplar.
  • byte: 0 ile 255 arasındaki değerleri saklamak için kullanılır. 1 byte yer kaplar.
  • word: 0 ile 65535 arasındaki değerleri saklamak için kullanılır. 2 byte yer kaplar.
  • unsigned int: `int` veri tipinin işaretsiz versiyonudur. 0 ile 65535 arasındaki değerleri saklayabilir.
  • unsigned long: `long` veri tipinin işaretsiz versiyonudur. 0 ile 4,294,967,295 arasındaki değerleri saklayabilir.
  • String: Metin dizilerini saklamak için kullanılır. Ancak Arduino'da `String` sınıfını kullanmak yerine, karakter dizilerini (char array) kullanmak daha iyi bir pratiktir, çünkü `String` sınıfı bellek yönetiminde sorunlara yol açabilir.

Değişkene Değer Atama (Assignment)

Bir değişkene değer atamak için eşittir (=) işaretini kullanırız.


 değişken_adı = değer;
 

Örneğin:


 int sayac = 10; // "sayac" değişkenine 10 değerini atadık
 float pi = 3.14;  // "pi" değişkenine 3.14 değerini atadık
 char ilkHarf = 'A'; // "ilkHarf" değişkenine 'A' karakterini atadık
 boolean durum = true; // "durum" değişkenine doğru (true) değerini atadık
 

Örnek Uygulama

Şimdi basit bir örnekle değişkenlerin kullanımını görelim. Bu örnekte, bir LED'i yakıp söndüreceğiz. LED'i kontrol etmek için bir pini çıkış olarak ayarlayacak ve bir değişken kullanarak LED'in durumunu (yanıp yanmadığını) kontrol edeceğiz.

Devre Bağlantısı:

  • LED'in anot (uzun bacak) -> 220 ohm direnç -> Arduino Dijital Pin 13
  • LED'in katot (kısa bacak) -> Arduino GND

 // LED'in bağlı olduğu pini tanımlıyoruz
 const int ledPin = 13;

 // LED'in durumunu saklayacak değişkeni tanımlıyoruz
 boolean ledDurumu = false;

 void setup() {
  // LED pinini çıkış olarak ayarlıyoruz
  pinMode(ledPin, OUTPUT);
 }

 void loop() {
  // LED'in durumunu tersine çeviriyoruz (yanıyorsa söndürüyor, sönükse yakıyoruz)
  ledDurumu = !ledDurumu;

  // LED'i yakıp söndürüyoruz
  digitalWrite(ledPin, ledDurumu);

  // Kısa bir süre bekliyoruz (1 saniye)
  delay(1000);
 }
 

Bu kodda, ledDurumu adında bir boolean değişkeni tanımladık. Bu değişken, LED'in o anki durumunu (yanıp yanmadığını) saklar. loop() fonksiyonunda, bu değişkenin değerini sürekli olarak tersine çevirerek (true ise false, false ise true yaparak) LED'i yakıp söndürüyoruz.

Değişkenlerin Kapsamı (Scope)

Bir değişkenin nerede tanımlandığı, o değişkenin hangi bölgelerde kullanılabileceğini belirler. Buna değişkenin kapsamı denir. Arduino'da genel (global) ve yerel (local) olmak üzere iki tür kapsam vardır.

  • Genel Değişkenler: Fonksiyonların dışında tanımlanan değişkenlerdir. Programın herhangi bir yerinden erişilebilirler.
  • Yerel Değişkenler: Bir fonksiyon içinde tanımlanan değişkenlerdir. Sadece o fonksiyon içinde erişilebilirler.

Örneğin:


 int globalSayi = 10; // Genel değişken

 void setup() {
  int yerelSayi = 5; // Yerel değişken

  Serial.begin(9600);
  Serial.println(globalSayi); // Global değişken kullanılabilir
  Serial.println(yerelSayi);  // Yerel değişken kullanılabilir
 }

 void loop() {
  // Serial.println(yerelSayi); // Hata! Yerel değişken loop() içinde erişilemez
  Serial.println(globalSayi); // Global değişken kullanılabilir
  delay(1000);
 }
 

Unutmayın, değişkenleri doğru şekilde kullanmak, Arduino projelerinizin başarısı için kritik öneme sahiptir. Bu temel bilgileri özümsedikten sonra, daha karmaşık projelere geçebilirsiniz.

Umarım bu yazı değişkenler konusunda size yardımcı olmuştur. Bir sonraki yazımızda görüşmek üzere!

Etiketler: Arduino, Programlama, Değişkenler, Veri Tipleri, Arduino Dersleri, Arduino Başlangıç

```

Fonksiyonlar İçine Değişken Atama (Arduino Programlama - C/C++ dersleri 3)

Merhaba arkadaşlar bu yazımda daha önce oluşturduğumuz fonksiyonları biraz daha özelleştireceğiz ve parantez içine bir şeyler ekleyip eklediğimiz şeylere göre farklı sonuçlar elde edeceğiz. Tanım biraz karışık gelmiş olabilir farkındayım ama kodlar içindeki açıklamalar size yardımcı olacaktır.


İlk olarak daha önce burada örneğini yaptığımız led uygulamasının basit halini yapacağız sizde Arduinoya ısınmak için bu örneği aşağıdaki yöntemle yaparsanız sizin için çok iyi olur. Takıldığınız yer olursa yorum olarak sormaktan çekinmeyin.

İlk örnekte devre kurmamıza gerek yok direk Arduino kartımızda bulunan ledi kullanacağız.

 
// arduonik.blogspot.com
// Bu örnekte Arduino kartımızda dahili bulunan ve 13. pine bağlı led kullanacağız
int led = 13;  // pinimize "led" adını veriyoruz


void ac_kapa(int bekleme){ //daha sonra "ac_kapa" adında bir fonksiyon oluşturuyoruz ama daha önceki parantez içinin aksine burada bekleme adında bir int değişken var
// fonksiyonu kullanırken bu değişken yerine istediğimiz değeri yazarsak sadece bu fonksiyon içinde kullanılan bekleme değişkenleri yazdığımız değeri alacak
    digitalWrite(led, HIGH);   // ilk başta ledimizi açık duruma getiriyoruz
  delay(bekleme);               // ve bekleme değişkeni kadar bekliyoruz
  digitalWrite(led, LOW);    // ardından ledi kapatiyoruz
  delay(bekleme);            // ve led kapalıyken bekleme değişkeninin değeri kadar bekliyoruz
}  // fonksiyonu kapatmayı unutmayın :)
//kendi fonksiyonumuzdan sonra Setup fonksiyonunu oluşturuyoru
void setup() {

  pinMode(led, OUTPUT);  //led olarak adlandırdığımız 13 nolu pini çıkış pini olarak ayarlıyoruz
}

// Daha sonrada loop fonksiyonuna geçiyoruz
void loop() {
ac_kapa(500);             // ac_kapa fonksiyonunu çalıştırıyoruz ve bekleme değişkenini 500 yapıyoruz yani her iki delay da 500 ms olacak
}

Şimdi bu kodu biraz daha geliştirip açık kalma ve kapalı kalma sürelerini farklı farklı olarak kullanalım

// arduonik.blogspot.com
// Bu örnekte Arduino kartımızda dahili bulunan ve 13. pine bağlı led kullanacağız
int led = 13;  // pinimize "led" adını veriyoruz


void ac_kapa(int bekleme_acik,int bekleme_kapali){ //daha sonra "ac_kapa" adında bir fonksiyon oluşturuyoruz ama daha önceki parantez içinin aksine burada 
//bekleme_acik ve bekleme_kapali adında iki int değişken ekliyoruz
// fonksiyonu kullanırken bu değişkenler yerine istediğimiz değeri yazarsak  bu fonksiyon içinde kullanılan bekleme_acik ve bekleme_kapali değişkenleri yazdığımız değerleri alacak
    digitalWrite(led, HIGH);   // ilk başta ledimizi açık duruma getiriyoruz
  delay(bekleme_acik);               // ve bekleme_acik değişkeni kadar bekliyoruz
  digitalWrite(led, LOW);    // ardından ledi kapatiyoruz
  delay(bekleme_kapali);            // ve led kapalıyken bekleme_kapali değişkeninin değeri kadar bekliyoruz
}  // fonksiyonu kapatmayı unutmayın :)
//kendi fonksiyonumuzdan sonra Setup fonksiyonunu oluşturuyoru
void setup() {

  pinMode(led, OUTPUT);  //led olarak adlandırdığımız 13 nolu pini çıkış pini olarak ayarlıyoruz
}

// Daha sonrada loop fonksiyonuna geçiyoruz
void loop() {
ac_kapa(500,250);             // ac_kapa fonksiyonunu çalıştırıyoruz ve bekleme_acik değişkenini 500, bekleme_kapalı değişkenini 250 yapıyoruz yani her iki delay da farklı olacak
}

Daha öncede dediğim gibi blogta ki örneklerden Trafik Lambası örneğinin devresini kurup kendi yazdığınız foknsiyon ile fonksiyon içine yazılan rengi yakacak bir kod yazmak size bir şeyler katacaktır. Takıldığınız yeri  yorumda sorabilirsiniz.

Fonksiyonlar ve void setup - void loop ( BareMinimum) (Arduino Programlama - C/C++ dersleri 2)





    Uzun bir aradan sonra merhaba. Bu yazımda önce Arduino programlarken her zaman kullanacağımız   Setup, loop terimlerinden ve kendimiz nasıl yeni fonksiyon yazacağımız dan bahsedeceğim. Zaten yandaki şekil Setup ve Loop için kafanızda bir şeyler canlandırmıştır. Bu arada Void setup ve Void loop yani Arduinonun çalışması için gereken kodlara BareMinimum denmektedir.



    Void Setup

    void setup bir fonksiyondur ve yeni Arduino IDE lerinde siz yazmadan yeni sayafada karşınıza gelir. bu fonksiyon karta elektrik verdiğimizde sadece bir sefer çaılışır ve sırasını loop fonksiyonuna bırakır. Eğer reset butonuna basarsak yani gücü kesip geri verirsek tekrar çalışır. Sadece bir defa çalıştığı için adından da anlaşıldığı üzere kartın kurulum bilgilerini barındırır. Genelde seri bağlantı başlatılması, pinlerin nasıl çalışacağının belirlenmesi gibi sadece başta ve  bir defa yapılması gereken işlemler burada belirtilir. pinlere isim takma yada değişken belirleme işleri ise bu fonksiyon çalışmadan yapılır.

   Void Loop

   Setup fonksiyonun bir sefer çalışması ardından devamlı çalışan kısımdır. Bu kısımda devamlı olarak çalışmasını istediğimiz sensör ölçümü ve işlenmesi, veri alışverişi, pini aktif ve pasif ( 1-0 durumu) gibi kodlar içerir.


    Kullanımları aşağıda ki gibidir.

void setup() {
  // yalnızca bir sefer çalışacak kurulum kodları
}

void loop() {
  // devamlı bir döngü ile çalışacak işlem kodları
}

   Fonksiyon Oluşturma

    Fonksiyonlar bir işleme isim takma gibi düşünebiliriz. Özellikle uzun kodlarda kafamız karışabilir veya bir işlemi birçok kez kullanmamız gerekebilir, bu gibi durumlarda fonksiyonları kullanmak çok yararlı olacaktır. Mesela bir çizgi izleyen robot yaptığımızda motrun sola ve sağa dönmesi için iki farklı fonksiyon yazdığımızda kodumuz dağa anlaşılır olacak ayrıca düzeltmeleri  daha kolay yaparsınız. sözlü anlatımdan ziyade bir örnek daha anlaşılır olacaktır.


int led = 13; // 13. pinimizin adını led olarak belirliyoruz
void setup() {
  // sadece bir defa çalışacak kurulum kodlarımızı yazıyoruz(pin mod, seri bağlantı başlangıcı gibi)
  pinMode(led, OUTPUT); // led pinini çıkış pini olarak ayarlıyoruz
}

void loop() {
  //sürekli döngü içinde çalışacak kodumuzu yazıyoruz
ac_kapa();//ac kapa fonksiyonunu çalıştırıyoruz fonksiyon loop içinde olduğu için 
}

void ac_kapa(){
  //kendimize ait bir fonksiyon yazıyoruz
  digitalWrite(led, HIGH);   // Ledi yakıyoruz
  delay(1000);                  // bir saniye led açık durumda bekliyoruz
  digitalWrite(led, LOW);    // ledi kapıyoruz
  delay(1000);                  // bir saniye daha bekliyoruz
  }

Daha sonra eklenecek örnek projelerde kullanımları ile fonksiyonları daha iyi kullanacağız.Ayrıca devre şemasını eklemiyorum sitemde 3 farklı örnek bulunmakta. Direnç eklemeyi unutmayın her ledin farklı bir iç direnci olduğu için bazı ledler direnç kullanmadan yanarken bazıları küçük dirençler kullansanız dahi bozulabilir bunun hesabını da ilerleyen günlerde paylaşacağım

Değişkenler (Arduino Programlama - C/C++ dersi - 1)

Merhaba arkadaşlar bugün Arduino programlarken temel dil olan C dilinin değişkenlerinden bahsedeceğiz. Kod yazarken bir çok hesaplama, eşitleme ve adlandırma yaparız değişkenler bu değerlerin saklandığı yerlerdir. Mesela Arduino da pinler sayı olarak belirtilir ancak çok fazla pin kullınca hangi pin neye bağlı olduğunu karıştırabiliriz bu nedenle her bir pine ad veririz ve bu esnada değişken kullanırız, yada sensör değerlerini değişkenler de saklarız. Fark ettiyseniz verdiğim iki örnekten biri harf lerden oluşurken diğeri sayılardan oluşur ve biz bu ikisini farklı tür değişkenler de kullanırız. Bu yazıda en çok kullanılan char, int, long, float, double ile ön ekleri olan const ve unsigned terimlerini inceleyeceğiz. Önce ön ekleri inceleyelim bu ekler hepsinde geçerli ancak basit projeler de pek kullanılmazlar

Const 

Const önüne geldiği değişkenin daha sonra değişmesine engel olur. Yani sadece okunabilir yapar ve genelde Pi gibi sabit değerler ile pin tanımlamaları yapılırken  kullanılır.
const float pi = 3.14;

Unsigned

Önüne geldiği değişkenin negatif kısımlarını da pozitife ekler ve sadece pozitif sayıları algılatır. Mesela Char -128 ile 127 arsında sayı alırken Unsigned Char 0 ile 255 arasında değer alır. 
unsigned char e = 240;
Artık değişkenlere geçelim üsteki ön ekler için her bir değişkene özel örnek belirtmeyeceğim.

Char (character)
Char veri tipi her tek karakteri veya İşaretli -128 ile 127 arası tam sayı saklaya bildiğimiz ve hafızadan 1 byte yer çalan değişkendir. 
char c = 'd';

Int(integer)
Bu değişken türü en çok karşılaşılan değişkenlerin başında gelir. Uno gibi ATmega tabanlı kartlarda -32768 ile 32768 arası tam sayı değeri alıp 2 byte(16 bit) harcarken Due gibi kartlarda -2147483648 ile 2147483647 arsında tam sayı değeri alıp 4 byte ( 32 bit) yer kaplar.
int b= 3;   


Long
-2147483648 ile 2147483647 arasındaki sayıları barındırır ve 4 byte yer kaplar. Eğer int ile long değişken türleri arasında matematiksel işlem yapılacaksa sonuna rakamın sonuna L eklenir. 7 basamak hassasiyetine sahiptir.
 long l = 186000L;
 long f= -135.7;

Double
Long ile benzerdir ancak basamak hassasiyeti 16 dır. Uno gibi ATmega kartlarda 4 byte Due gibi kartlarda 8 byte yer kaplar. Long double ile hassasiyet 20'ye kadar artar.
 double g= -135.16;

Float
Bu değişken -3.4028235E+38 ile   -3.4028235E+38 arsındaki sayıları 4 byte yer kaplayarak saklar. Ondalıklı sayılar için sıkça kullanılır. İnteger ile işlem yapmadan önce integer değerin önüne "(float)" almalıdır.
    float s = 1.117;
    int x = 3;
    float z = (float)x / 2.2;

Boolean
Doğru ve yanlış anlamında "True" ve "False" değerleri içerir ve bir byte yer kaplar.
boolean calisma = false;

Arduino Nedir

     Arduino programlanabilir fiziksel bir açık kaynak platformudur. Tek başına nesneleri kontrol edebilmesinin yanı sıra bilgisyar gibi sistemler aracılığı ile çeşitli yazılımlara ve plartformlara bağlanabilir. Arduino kartlarını satın alabileceğiniz gibi Arduino resmi sitesinde yayınlanan dökümanlar sayesinde kendinizde üretebilirsiniz. Arduinolar genel olarak Atmel AVR tabanlı ve Arduino bootloaderına ssaahip işlemciler barındırsada son zamanlarda İntel tabanlı arduino kartlarıda çıkmıştır. Arduino lartlarının programlanması ise ücretsiz olarak sunukan Arduino IDE üzerinden C tabanlı kısmi özelleştirilmiş bir dil ile yapılır.

Arduino kartları aslında ürünlerin deneme aşamasını kolaylaştırmak için kullanılır, nihayi ürünler için arduino tabanlı yeni kartlar tasarlanır ama hobi elektroniği yada hobi robotiği ile uğraşan biriyseniz yada ürünü ticari olarak kullanmayacaksanız böyle bir zahmete girmek zorunda değilsiniz.

Arduinoları öne çıkaran özelliklerin başında fiziksel eklentileri(shield) gelir, bu eklentiler sayasinde hızlı ve zahmetsiz biçimde sisteminize istediğiniz özellikleri ekleyenbilirsinz. Wi-fi, Bluetooth, Gsm eklentileri ile kolay bir şekilde haberleşme yapabilirken gaz sensörü, hareket sensörü gibi sensör eklentileri ile arduinonuzun istediğiniz veriyi toplamasını sağlayabilir, motor sürücü eklenti kartları ile devre tasarımı ile uğraşmadan sisteminizi hareket ettirebilirsiniz. Şunuda belirtelim nu kartlar deneme aşamasında çok kullanışlı ve yararlı olsada görünüşü ve boyutları itibari ile ürününüzün son aşamasında kendi kartınızı tasarlamanız çok daha iyi bir seçim olacaktır.


Arduino çeşitleri, programlanması, eklentileri-sensörleri, örnek uygulamaları-projeleri ve kullanımları ile ilgili bilgiler ile çeşitli eğitim yazılarını
sitemizden bulabilirsiniz.

Arduino Çeşitlerinden bazıları
Arduino fiziksel eklentileri(shield) ile yapılmış bir sistem.