9 Ekim 2026 Cuma


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ü



0 comments:

Yorum Gönder

Arduino Eğitimi Konu - 7

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

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com