7 Haziran 2025 Cumartesi

 



Kısaca PWM Nedir?



tone() ve noTone() Komutları

tone(pin, frekans, süre) komutu, bir pin üzerinde belirtilen frekansta ve sürede bir kare dalga oluşturur (% 50 görev döngüsünde). Bu dalga için bir süre belirtilmezse komut; tone(pin, frekans) şeklinde kullanılır. Bu durumda kare dalga noTone () fonksiyonu çağrılana kadar devam eder . Pin , tonu çalmak için piezo zil veya başka bir hoparlöre bağlanabilir. Bir seferde yalnızca bir ton üretilebilir. 31Hz'den daha düşük tonlar üretmek mümkün değildir. 



Örnek Program Kodları

Butona basıldığında belirlenen değerlere göre ton üretir. Hoparlörden ses gelir. Butonu bırakınca ses kesilir.


#define buzzer 12

#define buton 9

unsigned int frekans;

void setup()

{

      pinMode(buzzer, OUTPUT);

      pinMode(buton, INPUT);

}


void loop()

{

  if (digitalRead(buton) == 1)

  {

        while (digitalRead(buton) == 1)

        {

          //Burada tone() komutu "tone(pin, frekans)" şeklinde kullanılmış ve noTone() komutu görülene kadar pinden kare dalga verilmeye devam etmiştir.

          tone(buzzer, 35);

        }

  }

  noTone(buzzer);

}


_______________________________________________________________________________________________________________________________________________________



 



pulseIn() komutu, Bir pinin ne kadar süre HIGH veya LOW durumunda kaldığını takip eder ve geçen süreyi mikrosaniye cinsinden döndürür. Eğer zaman aşımı süresi içinde tam bir pulse alınmadıysa takibi bırakır ve 0 değerini döndürür. Komut zaman aşımı süresi belirtilmeden de kullanılabilir ama süre parametresi kullanılırsa kod daha hızlı yürütülür. Aynı zamanda, zaman aşımı süresi kullanılmazsa, 500ms gibi bir süre sonunda zaman aşımı gerçekleşebilir ve komut sıfır değerini verebilir.

 

Kullanımı:

pulseIn(pin, durum);

pulseIn(pin, durum, süre);             (Tavsiye edilen kullanım şekli)

pin        : Okunacak pin.

durum : HIGH yada LOW.

süre     : 10 mikrosaniyeden 3 dakikaya kadar. Veri türü: unsigned long.

 

Örnek:

sure = pulseIn(9, HIGH, 10000000);

Bu komut; 9 nolu pinin durumu HIGH olduğu zaman saymaya başlar. Pin LOW konumuna düştüğünde saymayı bırakır ve geçen süreyi “sure” değişkenine atar. Eğer pin 10000000 mikrosaniye(10sn) boyunca HIGH olmazsa yani bir pulse oluşmazsa 0 değerini döndürür.


Örnek Program Kodları:

#define buton 7

unsigned long sure=0;  //mikrosaniye cinsinden değer alacağı için bellekte büyük yer ayırdık.

void setup()

{

      Serial.begin(9600);

      pinMode(buton, INPUT);

}


void loop()

{

      sure = pulseIn(buton, HIGH,10000000);                                   

      Serial.print("Butona Basık Kalma Süresi= ");

      Serial.print(sure);

      Serial.println(" mikrosaniye");

}



______________________________________________________________________________________________________________________________________________________


6 Haziran 2025 Cuma

 


1 sn = 1000 ms = 1000000 µs.


delay(ms)

ms : duraklatılacak milisaniye sayısı. İzin verilen veri türleri: unsigned long

Program akışına milisaniye cinsinden bekletme verir. 1 saniyelik gecikmeye ihtiyacımız var o zaman delay(1000); kullanırız. Şunu unutmamalıyız ki delay Arduino’ yu tamamen durdurur, delay ileri seviye programlarda tavsiye edilmeyen bir durumdur. Örneğin; bir ledimiz 1’er saniye aralıklarla yanıp sönsün aynı zamanda butona basılıp basılmadığını kontrol etmek istersek edemeyiz. Program sağlıklı olmaz. Bunu çözmek için interruptlar veya timerlar kullanılır. İleri seviye kullanıcılar 10ms’den büyük beklemeler için başka metotlar kullanır.


delayMicroseconds(mikrosaniye)

µs: duraklatılacak mikrosaniye sayısı. İzin verilen veri türleri: unsigned int

Program akışına mikrosaniye cinsinden bekletme verir. Bu işlev 3 mikrosaniye ve daha yüksek aralıklarda çok hassas bir şekilde çalışır. Birkaç bin mikrosaniyeden daha uzun gecikmeler için delay() kullanmalısınız.


micros()

zaman=micros(). "zaman" değişkeni veri türü unsigned long.

Arduino kartı geçerli programı çalıştırmaya başladığından bu yana mikrosaniye sayısını döndürür. Bu sayı yaklaşık 70 dakika sonra taşacaktır (sıfıra geri dönecektir).  Çünkü bellekte ayrılan unsigned long kadar yer dolacaktır.

Arduino başka işlemler yaparken hatta delay() ile çalışma esnasında bekleme bile yapsa micros() komutu paralelde çalışmaya devam eder ve bekleme komutundan etkilenmez.


millis()

zaman=millis(). "zaman" değişkeni veri türü unsigned long.

Arduino kartının geçerli programı çalıştırmaya başlamasından bu yana geçen milisaniye sayısını döndürür. Bu sayı yaklaşık 50 gün sonra taşacak (sıfıra geri dönecektir). Çünkü bellekte ayrılan unsigned long kadar yer dolacaktır.

Arduino başka işlemler yaparken, hatta delay() ile çalışma esnasında bekleme bile yapsa millis() komutu paralelde çalışmaya devam eder ve bekleme komutundan etkilenmez.


Örnek Program Kodları:

unsigned long zaman1,zaman2;

void setup() 

{

      Serial.begin(9600);

      Serial.println("delay ms bekliyor...");

      delay(1000);

      Serial.println("delay mikrosn bekliyor...");

      delayMicroseconds(1000);

      Serial.println("bitti");

}


void loop() 

{

      zaman1=micros();

      Serial.print("zaman1= "); Serial.println(zaman1);

      delay(1000);

      zaman2=millis();

      Serial.print("zaman2= "); Serial.println(zaman2);

      delay(1000);

}


delay() komutu kullanmadan bir Led'in belirli aralıklarla yanıp-sönmesini sağlayan program:

Aşağıda yaptığımız uygulamada millis() komutu ile Led'in 1 ms aralıklarla yanıp-sönmesini sağlarken, butona bastığımızda ekrana "butona basıldı" yazısının yazdırılmasını sağladık. 

delay() komutunu ile bekleme yaptığımızda program işleyişi bir süre durdurulduğu için Arduino bu bekleme esnasında dışarıdan gelen bazı bilgilere, girişlere vs. kapalı kalabilir, algılayamayabilir. Bunun için ledin yanıp sönme süresini millis() komutu ile kontrol ederek, Arduino'nun dıştan gelen verilere duyarsız kalmasının önüne geçmiş oluruz.


Örnek Program Kodları:

#define buton 3

#define led 2

unsigned long simdiki_zaman = 0;

unsigned long eski_zaman = 0;

bool led_durum = 0;

void setup()

{

      Serial.begin(9600);

      pinMode(buton, INPUT);

      pinMode(led, OUTPUT);

}

void loop()

{

      if (digitalRead(buton) == 1)

      {

            Serial.println("butona basıldı");

            while (digitalRead(buton) == 1)

            {

                  delay(10);

            }

       }

      simdiki_zaman = millis();

      if (simdiki_zaman - eski_zaman > 1000)

      {

            led_durum = !led_durum;   //led_durum eşittir led_durumun tersi. yani 1 ise 0, 0 ise 1 yapar.

            eski_zaman = simdiki_zaman;

      }

      digitalWrite(led, led_durum);

}



_________________________________________________________________________________________________________________________________________________________


 

random() komutu ile rastgele sayı üretilir ama program her baştan başladığında aynı rastgele sayılar üretilir. Bunun önüne geçmek için randomSpeed(deger) komutu ile referans bir başlangıç değeri verilebilir.  Fakat aynı referans değeri için her program başladığında aynı rastgele sayılar üretilir. Bunun için referans değeri olarak herhangi bir pinden okunan değer kullanılabilir.


Komutun kullanımı:

Tanımlanan x değişkeninin türü Long’tur. 

x = random(100);           : 0 ile 99 arasında rastgele bir sayı üretilip x’e atanır.

x = random(100,1000);    : 100 ile 999 arasında rastgele bir sayı üretilir ve x'e atanır.

randomSeed(45);           : Rastgele sayı üretmek için referans değeri 45 olarak belirlenir.


Örnek Program Kodları:

long rastgele;

void setup()

{

      Serial.begin(9600) ;

      randomSeed(45);

}


void loop()

{

      rastgele = random(0,100); 

      Serial.print("Rasgele Sayı= "); Serial.println(rastgele);

      delay(1000);

}



______________________________________________________________________________________________________________________________________________________________


5 Haziran 2025 Perşembe

 



    Arduino'da bulunan pinleri kullanım amacımıza göre giriş ya da çıkış pini olarak kullanabiliriz. Giriş olarak kullanacağımız pinden veri alırken, çıkış olarak kullanacağımız pine veri göndeririz. Veriler 0 veya 5 volt olarak gönderilir. 

     Arduino'da bulunan A0....A5 pinlerini ise analog giriş işlemleri için kullanabiliyoruz. Yani 0 ve 5 volt aralığındaki herhangi bir voltaj değerini okuyabiliyoruz. Okunan bu analog değer, Arduino içerisinde bulunan Analog Digital Converter (ADC) tarafından 0 - 1023 arasında digital değere çevriliyor. Örneğin 2,5 volt bir değer okuduğumuzu düşünürsek, ADC tarafından bu voltaj 512 gibi bir digital değere çevriliyor. Bununla ilgili detaylardan ilerleyen konularda bahsedeceğiz.

         Şimdi pinlerin giriş ya da çıkış olarak belirlenmesi için gereken komutlardan bahsedeceğiz.


pinMode(4, OUTPUT);          //4 nolu pin çıkış yapıldı.

pinMode(5, INPUT);              //5 nolu pin giriş yapıldı.

pinMode(A0, OUTPUT);       //A0 pini çıkış yapıldı.

pinMode(A0, INPUT);           //A0 pini giriş yapıldı.


DDRD = B11111111;              //Arduino D portunun tüm pinleri çıkış yapıldı. Binary sayı kullanıldı.

DDRD = 0b11111111;            //Arduino D portunun tüm pinleri çıkış yapıldı. Binary sayı kullanıldı.

DDRD = 0xFF;                    //Arduino D portunun tüm pinleri çıkış yapıldı. 16 lık yani hexedecimal sayı kullanıldı.

DDRD = B00000000;        //Arduino D portunun tüm pinleri giriş yapıldı. Binary sayı kullanıldı.

DDRD = 0b00000000;    //Arduino D portunun tüm pinleri giriş yapıldı. Binary sayı kullanıldı.

DDRD = 0x00;                   //Arduino D portu portunun tüm pinleri giriş yapıldı. 16 lık yani hexedecimal sayı kullanıldı.


NOT: Analog pinler; analog olarak kullanılacaksa pinMode() ile giriş -çıkış olarak tanımlamasına gerek yoktur ama digital olarak kullanılacaksa pinMode() ile giriş -çıkış olarak tanımlama yapılmalıdır.



___________________________________________________________________________________


 


x; 16 bitlik bir sayı olsun:

lowByte(x);          : x değişkeninin ilk 8 bitini alır.

highByte(x);        : x değişkeninin son 8 bitini alır.

bitRead(y, 0);      : y değişkeninin 0. bitini alır.

bitWrite(y, 4, 0);  : y değişkeninin 4. bitini 0 yapar.

bitSet(z, 5);          : z değişkeninin 5. bitini 1 yapar.

bitClear(z, 1);       : z değişkeninin 1. bitini 0 yapar.


Örnek Program Kodları:

int x, y, z;

void setup()

{

      Serial.begin(9600);

      x = 0b1111000110000001;     //2 baytlık bir sayı.

      y = 0b10010011;

      z = 0b11010011;


    Serial.print("x'in düşük baytı= "); Serial.println(lowByte(x), BIN);    //x'in ilk 8 bitini yazdırır.

   Serial.print("x'in yüksek baytı= "); Serial.println(highByte(x), BIN);  //x'in son 8 bitini yazdırır.

     Serial.println(" ");      //bir satır boşluk.


   Serial.print("y'nin 0. biti= "); Serial.println(bitRead(y, 0));         //y'nin 0. bitini yazdırır.

   Serial.print("y'nin 2. biti= "); Serial.println(bitRead(y, 2));         //y'nin 2. bitini yazdırır.

    Serial.println(" ");      //bir satır boşluk.


    Serial.print("y'nin 4. biti değiştirildi= "); Serial.println(bitWrite(y, 4, 0), BIN); //y'nin 4. biti 0 yapıldı.

   Serial.print("y'nin 2. biti değiştirildi= "); Serial.println(bitWrite(y, 2, 1), BIN); //y'nin 2. biti 1 yapıldı.

    Serial.println(" ");  //bir satır boşluk.


   Serial.print("z'nin 5. biti 1 yapıldı= "); Serial.println(bitSet(z, 5), BIN);   //z'nin 5. biti 1 yapıldı.

   Serial.print("z'nin 1. biti 0 yapıldı= "); Serial.println(bitClear(z, 1), BIN); //z'nin 1. biti 0 yapıldı.

   Serial.println(" ");  //bir satır boşluk.

}


void loop() 

{


}



___________________________________________________________________________________


 


a++;            :a yı 1 artır.

++b;               :b yi 1 artır.

e = ++c;         :önce c yi 1 artır sonra e ye ata.

f = d++;         :önce d yi f ye ata sonra d yi 1 artır.

a--;                 :a yı 1 azalt.

--b;                 :b yi 1 azalt.

e = --c;          :önce c yi 1 azalt sonra e ye ata.

f = d--;           :önce d yi f ye ata sonra d yi 1 azalt.

a += 10;          :a = a + 10;

a -= 8;            :a = a - 8;

a *= 4;            :a = a * 4;

a /= 2;            :a = a / 2;

b = a %= 5;    :a nın 5 ile bölümünden kalan b ye atandı.

c %= 3;            :c nin 3 ile bölümünden kalan tekrar c ye atandı.

a |= 0b00100000     :a ile 0b00100000 değerini "veya" işlemine tabi tut, sonucu "a" değişkenine ata.

b &= 0b11011111            :b ile 0b11011111 değerini "ve" işlemine tabi tut, sonucu "b" değişkenine ata.


Örnek Program Kodları:

int a, b, c, d, e, f, g, h;

void setup()

{

      Serial.begin(9600);


      //________Artırma Operatörü______

      Serial.println("Artırma Operatörü");

      a = 2; b = 2;

      c = 5; d = 5;

      a++;        //a yı 1 artır.

      ++b;        //b yi 1 artır.

      Serial.print("a= "); Serial.println(a);

      Serial.print("b= "); Serial.println(b);


      e = ++c;    //önce c yi 1 artır sonra e ye ata.

      f = d++;    //önce d yi f ye ata sonra d yi 1 artır.

      Serial.print("e= "); Serial.println(e);

      Serial.print("f= "); Serial.println(f);

      Serial.print("c= "); Serial.println(c);

      Serial.print("d= "); Serial.println(d);


      Serial.println(" ");    //1 satır boşluk bırak

      //_______Azaltma Operatörü_______

      Serial.println("Azaltma Operatörü");

      a = 2; b = 2;

      c = 5; d = 5;

      a--;        //a yı 1 azalt.

      --b;        //b yi 1 azalt.

      Serial.print("a= "); Serial.println(a);

      Serial.print("b= "); Serial.println(b);


      e = --c;    //önce c yi 1 azalt sonra e ye ata.

      f = d--;    //önce d yi f ye ata sonra d yi 1 azalt.

      Serial.print("e= "); Serial.println(e);

      Serial.print("f= "); Serial.println(f);

      Serial.print("c= "); Serial.println(c);

      Serial.print("d= "); Serial.println(d);


      Serial.println(" ");    //1 satır boşluk bırak

      //_______Üzerine Ekleme_______

      Serial.println("Üzerine Ekleme");

      a = 2; b = 2; c = 16;

      a += 10;    //a = a + 10.

      c += b;     //c = c + b.

      Serial.print("a= "); Serial.println(a);

      Serial.print("c= "); Serial.println(c);


      Serial.println(" ");    //1 satır boşluk bırak

      //_______Üzerinden Çıkarma_______

      Serial.println("Üzerinden Çıkarma");

      a = 10; b = 2; c = 16;

      a -= 8;    //a = a - 10.

      c -= b;    //c = c - b.

      Serial.print("a= "); Serial.println(a);

      Serial.print("c= "); Serial.println(c);


      Serial.println(" ");    //1 satır boşluk bırak

      //_______Çarparak Artırma_______

      Serial.println("Çarparak Artırma");

      a = 7; b = 4; c = 12;

      a *= 2;   //a = a * 2;

      c *= b;   //c = c * b;

      Serial.print("a= "); Serial.println(a);

      Serial.print("c= "); Serial.println(c);


      Serial.println(" ");    //1 satır boşluk bırak

      //_______Bölerek Azaltma_______

      Serial.println("Bölerek Azaltma");

      a = 18; b = 4; c = 12;

      a /= 2;   //a = a / 2;

      c /= b;   //c = c / b;

      Serial.print("a= "); Serial.println(a);

      Serial.print("c= "); Serial.println(c);


      Serial.println(" ");    //1 satır boşluk bırak

      //_______Kalan Bulma_______

      Serial.println("Kalan Bulma");

      a = 18; c = 13;

      b = a %= 5;   //a nın 5 ile bölümünden kalan b ye atandı.

      c %= 3;       //c nin 3 ile bölümünden kalan tekrar c ye atandı.

      Serial.print("b= "); Serial.println(b);

      Serial.print("c= "); Serial.println(c);

}


void loop() 

{


}


_________________________________________________________________________________


3 Haziran 2025 Salı

 



&     : ve(*)

|      : veya(+)

^     : xor(A'.B+A.B')=(A nın değili ve B) veya (A ve B nin değili). Yani aynılar 0, farklılar 1 demektir.

~     : not(değil)

<<  : 1 bit sola kaydır

>>  : 1 bit sağa kaydır


Program Kodları:

//değişkenlere 1 bayt yani 8 bitlik yer ayrıldı. Bir bayt için en düşük değer 0, en yüksek değer ise 255'tir.

byte a, b, c, d, e, f, g, m, x, y, z, k, i;

void setup()

{

  Serial.begin(9600);

  a = 0b11001010;         //a değişkenine binary olarak bir değer atadık

  b = 0b11001111;            //b değişkenine binary olarak bir değer atadık

  c = 0b00001111;          //c değişkenine binary olarak bir değer atadık

  e = 0b00001000;       //e değişkenine binary olarak bir değer atadık

  k = 0b00011000;        //k değişkenine binary olarak bir değer atadık

  x = a & b;                    //a ile b yi ve işlemine tabi tut x e ata

  y = a | b;                      //a ile b yi veya işlemine tabi tut x e ata

  z = a ^ b;                     //a ile b yi xor işlemine tabi tut x e ata

  Serial.print("a & b = "); Serial.println(x, BIN);        //x değişkenini binary olarak ekrana yaz

  Serial.print("a | b = "); Serial.println(y, BIN);           //y değişkenini binary olarak ekrana yaz

  Serial.print("a ^ b= "); Serial.println(z, BIN);           //z değişkenini binary olarak ekrana yaz


  d = ~c;     //c nin değili

  Serial.print("c nin değili= "); Serial.println(d, BIN);    //c değişkenini binary olarak ekrana yaz


  f = e << 2;   //e yi 2 bit sola kaydır f ye ata

  Serial.print("e yi 2 bit sola kaydır= "); Serial.println(f, BIN);    //f değişkenini binary olarak ekrana yaz


  g = e >> 2;   //e yi 2 bit sağa kaydır g ye ata

  Serial.print("e yi 2 bit sağa kaydır= "); Serial.println(g, BIN);    //g değişkenini binary olarak ekrana yaz

}


void loop() 

{


}



___________________________________________________________________________________


 



Karşılaştırma Operatörleri:

== Eşit eşit

!= Eşit değildir

< Küçüktür

> Büyüktür

<= Küçük eşittir

>= Büyük eşittir


Mantık Operatörleri:

&& Ve

|| Veya

! Değil


Aşağıdaki örnek program kodları verilmiştir. Burada "Serial.println" içerisinde karşılaştırma ve mantık işlemleri yaptırdık. Sonuç doğruysa 1(true), yanlışsa 0(false) olacak şekilde ekrana yazdırılmasını sağladık.



Program Kodları:

int a, b, c, d;


void setup()

{

      a = 1; b = 5; c = 7; d = 9;

      Serial.begin(9600);


      //karşılaştırma operatörleri

      Serial.println("Karşılaştırma Operatörleri");

      Serial.println(a < b); 

      Serial.println(b == c);

      Serial.println(d != a);

      Serial.println(d >= b);

      Serial.println((c + a) > d);


      //mantık operatörleri

      Serial.println("Mantık Operatörleri");

      Serial.println((b > a) && (d > c));

      Serial.println((a > c) || (c > b));

      Serial.println((b < c) && (c > d) || (a > d));

      Serial.println(!(c > b));

}


void loop()

{


}



___________________________________________________________________________________


Arduino Eğitimi Konu - 7

Toplam Sayfa Görüntüleme Sayısı

Sensörlerin Arduino İle Kullanımı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com