9 Ekim 2026 Cuma

 

Programlama Kodları

//AÇIKLAMA
//Bu uygulamada IR kumandadan 1 ile 9 arasında hangi tuşa basıldığı seri port ekranına yazdırılır.
//switch case yöntemi kullanılmıştır. Eski olan "IRremote.zip" kütüphanesi kullanılmıştır. Samsung
//kumanda kullanılmıştır. Önceki uygulamalar ile Samsung kumandanın 1'den 9'a kadar olan tuş kodları 
//öğrenilerek define ile değişkenlere tanımlanmıştır.

#include <IRremote.h>

#define tus1 0xE0E020DF
#define tus2 0xE0E0A05F
#define tus3 0xE0E0609F
#define tus4 0xE0E010EF
#define tus5 0xE0E0906F
#define tus6 0xE0E050AF
#define tus7 0xE0E030CF
#define tus8 0xE0E0B04F
#define tus9 0xE0E0708F

int pin = 11;               //IR alıcıyı bağlayacağımız pini belirledik.
IRrecv alici(pin);          //IR alıcı için pin kodunun bulunduğu "alici" isimli nesne tanımladık.
decode_results veri;        //Gelen verileri çözen kod. Çözülen kodun atanacağı "veri" isimli değişken tanımlandı.

void setup()
{
  Serial.begin(9600);
  Serial.println("Enabling IRin");
  alici.enableIRIn();   //Alıcı nesnesini başlattık.Yani IR veri alma işlemi başlatılır.
  Serial.println("Enabled IRin");
}

void loop()
{
  if (alici.decode(&veri))
  {
    switch (veri.value)
    {
      case tus1:
        Serial.println("Tuş-1");
        break;
      case tus2:
        Serial.println("Tuş-2");
        break;
      case tus3:
        Serial.println("Tuş-3");
        break;
      case tus4:
        Serial.println("Tuş-4");
        break;
      case tus5:
        Serial.println("Tuş-5");
        break;
      case tus6:
        Serial.println("Tuş-6");
        break;
      case tus7:
        Serial.println("Tuş-7");
        break;
      case tus8:
        Serial.println("Tuş-8");
        break;
      case tus9:
        Serial.println("Tuş-9");
        break;
      default:
        Serial.println("Hatalı Tuş. Lütfen 1- 9  Arası Bir Tuşa Basınız!");
        break;
    }
    delay(300); //sık aralıklarla okuma olmaması için bekleme koyduk. diğer türlü tuşa 1 kez bastığımızda birden fazla okuma olur.
    alici.resume(); //veri okuma işlemine devam etmek için bu komut yazıldı.
  }
}


Devre Şeması




Bu uygulamada IR kumandadan gönderilen veriler Arduino tarafından alınarak, Arduino'nun  PC'ye bağlı usb portu üzerinden PC'ye gönderilir. Bu veriler Excel tarafından alınır. Kumandanın ses yükseltme tuşuna basınca Excel hücresinde 'M', ses azaltma tuşuna basınca 'G', diğer tuşlara basınca '?' karakteri görünür. Uygulama Samsung kumandaya göre yapılmıştır.

Uygulama için indireceğiniz "vba7-seri porttan veri alma-1.xlsm" dosyasını açtıktan sonra Dosya -> Seçenekler -> Güven Merkezi -> Güven Merkezi Ayarları ->Makro Ayarları Kısmından "Tüm makroları etkinleştir" ve "VBA projesi nesne modeli erişimine güven" seçeneklerini aktif etmeyi unutmayın.

Ardından kumandadan veri almak için  "PORTTAN VERİ AL" butonuna basmasınız gerekmektedir.


Programlama Kodları

//AÇIKLAMA
//Bu uygulamada "Arduino-IRremote-master.zip" kütüphanesi ve Samsung kumanda kullanıldı.
//Bu uygulamada IR kumandadan gönderilen veriler Arduino tarafından alınarak, Arduino'nun 
//PC'ye bağlı usb portu üzerinden PC'ye gönderilir. Bu veriler Excelde tarafından alınır.
//Kumandanın ses yükseltme tuşuna basınca Excel hücresinde 'M', ses azaltma tuşuna basınca
//'G', diğer tuşlara basınca '?' karakteri görünür.
//NOT: Arduino IDE'de seri port penceresi açılırsa kumandadaki tuşa bastığımızda karakterler
//Arduino seri port penceresinde görünür.

#include <IRremote.hpp>
#define pin 11
#define artir 4161210119  //HEX: 0xF8070707
#define azalt 4094363399  //HEX: 0x6546C02B
void setup()
{
  Serial.begin(9600);
  IrReceiver.begin(pin);
}

void loop()
{
  if (IrReceiver.decode())
  {
    if (IrReceiver.decodedIRData.decodedRawData == artir)
    {
      Serial.write(77); //M karakteri
    }
    else if (IrReceiver.decodedIRData.decodedRawData == azalt)
    {
      Serial.write(71); //G karakteri
    }
    else
    {
      Serial.write(63); //? karakteri
    }
    delay(300); //sık aralıklarla okuma olmaması için bekleme koyduk. diğer türlü tuşa 1 kez bastığımızda birden fazla okuma olur.
    IrReceiver.resume();  //veri okuma işlemine devam etmek için bu komut yazıldı.
  }
}


Excel VBA Dosyası

İndirme Linki: vba7-seri porttan veri alma-1.xlsm


Devre Şeması





Programlama Kodları

//AÇIKLAMA
//Bu uygulamada "Arduino-IRremote-master.zip" kütüphanesi ve Samsung kumanda kullanıldı.
//Yapılan uygulama ile kumandanın ses tuşları kullanılarak temsili olarak ses artırma ve
//azaltma işlemi yapıldı.

#include <IRremote.hpp>

#define pin 11

#define artir 4161210119  //HEX: 0xF8070707
#define azalt 4094363399  //HEX: 0x6546C02B
int i = 7;

void setup()
{
  Serial.begin(9600);
  IrReceiver.begin(pin);
  Serial.print("Varsayılan Ses = ");
  Serial.print(i); Serial.println(" vol. ");
  Serial.println("Lütfen Sesi Artırıp/Azaltmak İçin Ses Tuşlarını Kullanın...");
}

void loop()
{

  if (IrReceiver.decode())
  {
    if (IrReceiver.decodedIRData.decodedRawData == artir)
    {
      i++;
      Serial.print("Ses = "); Serial.print(i); Serial.println(" vol.");
    }
    else if (IrReceiver.decodedIRData.decodedRawData == azalt)
    {
      i--;
      Serial.print("Ses = "); Serial.print(i); Serial.println(" vol.");
    }
    else
    {
      Serial.println("Yanlış Tuşa Bastınız");
    }
    delay(300); //sık aralıklarla okuma olmaması için bekleme koyduk. diğer türlü tuşa 1 kez bastığımızda birden fazla okuma olur.
    IrReceiver.resume();  //veri okuma işlemine devam etmek için bu komut yazıldı.
  }

}


Devre Şeması





Kumandadan gönderilen bitler alıcı göz tarafından terslendiğini için bitlerin nasıl ters çevrildiğini öğrenmemiz gerekir. Bu nedenle öncelikle bitlerin nasıl ters çevrildiğine bakalım.


Bit Kaydırma İşlemi:

for (int i = 0; i < 8; i++)

  {

    if (bin[i] == 1)

      addr += 1 << i; 

  }





i=0 için; 1 sayısı 0 kez sola kaydırılıp addr ile VEYA işlemine tabi tutulduğunda, addr=00000001 olur.

i=1 için; 1 sayısı 1 kez sola kaydırılıp addr ile VEYA işlemine tabi tutulduğunda, addr=00000011 olur.

i=2 için; bin[2]=0 olduğu için işlem olmaz.

i=3 için; bin[2]=0 olduğu için işlem olmaz.

i=4 için; 1 sayısı 4 kez sola kaydırılıp addr ile VEYA işlemine tabi tutulduğunda, addr=00010011 olur.

i=5 için; 1 sayısı 5 kez sola kaydırılıp addr ile VEYA işlemine tabi tutulduğunda, addr=00110011 olur.

i=6 için; bin[6]=0 olduğu için işlem olmaz.

i=7 için; bin[7]=0 olduğu için işlem olmaz.



Programlama Kodları

//Bu uygulamada NEC protokolü kullanan kumandadan gönderilen IR sinyalin Adres ve DATA'sı alınır.
//NOT: Kumandadan gönderilen bitlerin alıcı göz tarafından terslendiğini unutmayın.
//     Bilgiler ters olarak alındıktan sonra bit kaydırma ile gerçek verilere dönüştürülür.

uint16_t basla = 0;
int RECV_PIN = 11;

void setup()
{
  Serial.begin(9600);
  Serial.println("Enabled IRin");
}


void loop() {
  again:   //aynı düğmeye iki kez basıldığında bu programın tekrarlanması için
  boolean bin[32];
  int addr = 0, data = 0;
  int sayy;
  sayy = 0;
  basla = 0;


//_______8 ms'den daha kısa LOW durumu varsa bekle______
  while (pulseIn(RECV_PIN, LOW) < 8000); // wait until start bit is received.
  {

  }


//________3 ms ile 5 ms arasında HIGH durumu varsa devam et. Yoksa bekle_____
  while (basla == 0)
  {
    sayy = (pulseIn(RECV_PIN, HIGH));
    // Serial.println(sayy);
    if (sayy > 3000 && sayy <= 5000) {
      //Serial.println(sayy);
      basla = 1;
    }
  }


//____________bitler okunup diziye kaydediliyor___________
  for (int i = 0; i < 32; i++)
  {

    if (pulseIn(RECV_PIN, HIGH) > 1000)
      bin[i] = 1;
    else
      bin[i] = 0;
  }


//____________diziye kaydedilen bitler ekrana yazdırılıyor___________
//____bitler LSB'den başlayarak, yani ters olarak geldiği için ekranda
//gerçek değerlerin tersi gözükür______________
  Serial.print("Bit Stream = ");
  for (int i = 0; i < 32; i++)
  {
    Serial.print(bin[i]);
  }
  Serial.println();


//_______Adres bitleri LSB'den başlayarak, yani ters olarak geldiği için kaydırma yaparak 
//gerçek adres değeri belirleniyor._____________
  Serial.print("Address = ");
  for (int i = 0; i < 8; i++)
  {

    if (bin[i] == 1)
      addr += 1 << i; //1 değerini i kadar sola kaydır ve sonucu addr değişkenine ekle.
                      //Yani; addr değişkeninde i. biti 1 ile VEYA işlemine tabi tut demektir.
  }
  Serial.print("   ");
  Serial.println(addr);
  

//_______Data bitleri LSB'den başlayarak, yani ters olarak geldiği için kaydırma yaparak 
//gerçek adres değeri belirleniyor__________
  Serial.print("Data = ");
  for (int i = 0; i < 8; i++)
  {

    if (bin[i + 16] == 1)
      data += 1 << i; //1 değerini i kadar sola kaydır ve sonucu addr değişkenine ekle.
                      //Yani; addr değişkeninde i. biti 1 ile VEYA işlemine tabi tut demektir.      
  }

  Serial.print("   ");
  Serial.println(data);
  Serial.println();

}


Devre Şeması



Seri Port Ekran Görüntüsü



Bu uygulamalar 2 farklı kütüphane kullanılarak yapılmıştır. Bu kütüphanelerin 2'si aynı anda Arduino'ya eklenmemelidir. Hangi kütüphane kullanılacaksa sadece o eklenmelidir. Diğeri silinmelidir. 2'si aynı anda Arduino'ya eklenirse yeni kütüphane geçerli olur.


1. "Arduino-IRremote-master" Kütüphanesi İle Uygulama

Adres: https://github.com/Arduino-IRremote/Arduino-IRremote


Desteklenen IR Protokolleri: 

  • NEC / Onkyo / Apple

  • Denon / Sharp

  • Panasonic / Kaseikyo

  • JVC

  • LG

  • RC5

  • RC6  

  • Samsung  

  • Sony  

  • Universal Pulse Distance

  • MagiQuest

  • Universal Pulse Width

  • Universal Pulse Distance Width

  • Universal Pulse Distance Width

  • Hash

  • Pronto

  • Pronto

  • BoseWave

  • Bang & Olufsen

  • Lego

  • FAST

  • Whynter


Programlama Kodları

//AÇIKLAMA
//Kullanılan "Arduino-IRremote-master.zip" kütüphanesi yenidir. Bu kütüphaneyi
//eklediğimizde "IRremote.zip" kütüphesi Arduino'dan silinmelidir.
//Bu uygulama ile kumandadan gönderilen sinyalin IR protokolü çözülerek
//tuş kodu tespit edilir ve seri port ekranına yazdırılır.
//"Arduino-IRremote-master.zip" kütüphanesi içerisinde örnek uygulamalar vardır.Bu uygulamaları
//açmak için; Dosya > Örnekler > IRremote > yolu izlenir.

#include <IRremote.hpp>

#define pin 11   //IR alıcıyı bağlayacağımız pini belirledik.

void setup()
{
  Serial.begin(9600);
  IrReceiver.begin(pin);  //11. pin için IR sinyal alma işlemini başlat.
}

void loop()
{
  //"IrReceiver.decode()" komutu gelen tuş bilgisini çözen komuttur. 
  //gelen tuş bilgisi de "IrReceiver.decodedIRData.decodedRawData" ya atanır.
  
  if (IrReceiver.decode())  //herhangi bir tuş kodu geldi mi? geldiyse if'in içi True olur.
  {
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);   //gelen tuş bilgisini seri port ekranına hex(16'lı) olarak yazdır.
    IrReceiver.printIRResultShort(&Serial);   //Alınan verilerin tamamını tek satırda yazdırır.
    //IrReceiver.printIRSendUsage(&Serial);   //Print the statement required to send this data
    delay(300); //sık aralıklarla okuma olmaması için bekleme koyduk. diğer türlü tuşa 1 kez bastığımızda birden fazla okuma olur.
    IrReceiver.resume(); //veri okuma işlemine devam etmek için bu komut yazıldı.
  }
  
}


Devre Şeması



Seri Port Ekran Görüntüsü




2. "IRremote" Kütüphanesi İle Uygulama

Adres: https://github.com/Arduino-IRremote/Arduino-IRremote/releases/tag/v2.4.0


Desteklenen IR Protokolleri: 

  • NEC

  • Samsung

  • Sony

  • RC5

  • RC6

  • Denon

  • Panasonic

  • JVC

  • LG


Programlama Kodları

//AÇIKLAMA
//Kullanılan "IRremote.zip" kütüphanesi eskidir. Bu kütüphaneyi eklediğimizde
//"Arduino-IRremote-master.zip" kütüphesi Arduino'dan silinmelidir.
//Bu uygulama ile kumandadan gönderilen sinyalin IR protokolü çözülerek
//tuş bilgisi tespit edilir ve seri port ekranına yazdırılır.
//"IRremote.zip" kütüphanesi içerisinde örnek uygulama vardır. Bu uygulamayı
//açmak için; Dosya > Örnekler > IRremote > IRrecvDemo yolu izlenir.


#include <IRremote.h>
int pin = 11;               //IR alıcıyı bağlayacağımız pini belirledik.
IRrecv alici(pin);          //IR alıcı için pin kodunun bulunduğu "alici" isimli nesne tanımladık.
decode_results veri;        //Gelen verileri çözen kod. Çözülen kodun atanacağı "veri" isimli değişken tanımlandı.

void setup()
{
  Serial.begin(9600);
  //In case the interrupt driver crashes on setup, give a clue to the user what's going on.
  //(Kurulum sırasında kesme sürücüsünün çökmesi durumunda, kullanıcıya ne olduğunu gösteren bir ipucu verilir)
  Serial.println("Enabling IRin");
  alici.enableIRIn();   //Alıcı nesnesini başlattık.Yani IR veri alma işlemi başlatılır.
  Serial.println("Enabled IRin");
}

void loop()
{
  //"alici.decode(&veri)" komutu gelen tuş bilgisini çözen komuttur. gelen tuş bilgisi de "veri.value" ye atanır.

  if (alici.decode(&veri))   //herhangi bir tuş bilgisi geldi mi? geldiyse if'in içi True olur.
  {
    Serial.println(veri.value, HEX);  //gelen tuş bilgisini seri port ekranına hex(16'lı) olarak yazdır.
    delay(300);   //sık aralıklarla okuma olmaması için bekleme koyduk. diğer türlü tuşa 1 kez bastığımızda birden fazla okuma olur.
    alici.resume();   //veri okuma işlemine devam etmek için bu komut yazıldı.
  }

}


Devre Şeması



Seri Port Ekran Görüntüsü






 

Program Kodları

//Bu uygulama ile IR protokolün başlangıç palsi süresi ölçülür.

int RECV_PIN = 11;

void setup()
{
  Serial.begin(9600);

  Serial.println(" IR gönder ");
}

void loop()
{
  Serial.println(" IR gönder ");
  int temp = 0; uint16_t basla = 0;
  uint16_t temp2 = 0;
  uint16_t temp3 = 0;
  while (pulseIn(RECV_PIN, HIGH) > 21000)
  {
  }
  while (temp == LOW)
  {
    temp = digitalRead(RECV_PIN);
    // Serial.print(" temp :  ");Serial.println(temp);
  }
  temp3 = 0;
  while (temp3 == 0)
  {

    temp = digitalRead(RECV_PIN);

    if (temp == 0 && temp2 == 0)
    {
      temp2 = micros();
      //Serial.print(" süre :  ");Serial.println(temp2);
    }
    if (temp == 1 && temp2 > 0)
    {
      temp3 = micros();
      //Serial.print(" sssssüre :  ");Serial.print(temp2);Serial.print("  ,  ");Serial.println(temp3);
    }

  }
  if (temp3 < temp2)
  {
    loop();
  }
  temp = temp3 - temp2;
  Serial.print(" süre :  "); Serial.print(temp2); Serial.print("  ,  "); Serial.println(temp3);
  Serial.print(" Başlangıç palsi mikrosaniye "); Serial.println(temp);
  delay(1000);
}


Devre Şeması




Seri Port Ekran Görüntüsü






Arduino Eğitimi Konu - 7

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

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com