Çözüldü Arduino'da kumandada IR sensör her defasında farklı kod algılıyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Salih Gürbüz

Hectopat
Katılım
3 Ağustos 2020
Mesajlar
2.646
Makaleler
2
Çözümler
8
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar 3 gündür IR sensör ile bir proje yapmaya çalışıyorum fakat bir türlü çözemediğim bir sorun var. Kodumun ve devremin doğru olduğuna emin olduğum halde devre çalışmıyor (IR sonsör çalışıyor fakat LED'ler yanmıyor). Kodlarla yapmak istediğim şey kumandadan bazı tuşlara basınca bazı LED'lerin yanması bazılarının sönmesi.

Kodlarımdan ve devremden emin olduğum için yanlış kütüphaneyi mi kurdum diye düşündüm. Tüm videolarda aynı link veriliyor ve bende bu linkten kütüphaneyi indirmeme rağmen videolardaki hocaların kumandanın tuşlarının kodunu öğrenmek için kullandığı ve örnek projelerden açtığı "IRrecvdemo" örnek projesi ben de yoktu. Yani sorun kütüphaneden dolayı mı bilmiyorum. 2 farklı bilgisayarda denedim ikisinde de olmuyor.

Son olarak projeyi çalıştırdığımda seri ekranda önce bir hata mesajı sonrada kumandadan aynı tuşa basmama rağmen farklı kodlar çıkıyor. Yardımcı olursanız çok sevinirim . Şimdiden teşekkürler.

Hata mesajı ;
The function decode(&results)) is deprecated and may not work as expected! Just use decode() without a parameter and IrReceiver.decodedIRData.<fieldname> .

Kodlarım:
Kod:
#include <IRremote.h>
int sari=3,kirmizi=4,yesil=5,beyaz=6,ses=7;
int IRdatapin=2;
 
IRrecv IR0(IRdatapin);
decode_results results;
 
#define tusguc 3772793023 // bu kodları bir videodan aldım.
#define tus0 3772811383
#define tus1 3772784863
#define tus2 3772817503
#define tus3 3772801183
#define tus4 3772780783
#define tus5 3772813423
 
void setup() {
Serial.begin(9600);
pinMode(sari,OUTPUT);  
pinMode(kirmizi,OUTPUT);
pinMode(yesil,OUTPUT);
pinMode(beyaz,OUTPUT);
pinMode(ses,OUTPUT);
IR0.enableIRIn();
}
 
void loop() {
if(IR0.decode(&results))
{
  Serial.println(results.value);
  IR0.resume();
  if(results.value==tusguc)
  {
    digitalWrite(sari,HIGH);
    digitalWrite(kirmizi,HIGH);
    digitalWrite(yesil,HIGH);
    digitalWrite(beyaz,HIGH);
  }
  else if(results.value==tus0)
  {
    digitalWrite(sari,LOW);
    digitalWrite(kirmizi,LOW);
    digitalWrite(yesil,LOW);
    digitalWrite(beyaz,LOW);
  }
  else if(results.value==tus1)
  {
    digitalWrite(sari,!digitalRead(sari));
    digitalWrite(kirmizi,LOW);
    digitalWrite(yesil,LOW);
    digitalWrite(beyaz,LOW);
  }
  else if(results.value==tus2)
  {
    digitalWrite(sari,LOW);
    digitalWrite(kirmizi,!digitalRead(kirmizi));
    digitalWrite(yesil,LOW);
    digitalWrite(beyaz,LOW);
  }
  else if(results.value==tus3)
  {
    digitalWrite(sari,LOW);
    digitalWrite(kirmizi,LOW);
    digitalWrite(yesil,!digitalRead(yesil));
    digitalWrite(beyaz,LOW);
  }
  else if(results.value==tus4)
  {
    digitalWrite(sari,LOW);
    digitalWrite(kirmizi,LOW);
    digitalWrite(yesil,LOW);
    digitalWrite(beyaz,!digitalRead(beyaz));
  }
  else if(results.value==tus5)
  {
    digitalWrite(ses,!digitalRead(ses));
  }
}
delay(500); 
}
hata mesajı ;
The function decode(&results)) is deprecated and may not work as expected! Just use decode() without a parameter and IrReceiver.decodedIRData.<fieldname> .

Kodlarım ;
#include <IRremote.h>
int sari=3,kirmizi=4,yesil=5,beyaz=6,ses=7;
int IRdatapin=2;
 
IRrecv IR0(IRdatapin);
decode_results results;
 
#define tusguc 3772793023 // bu kodları bir videodan aldım.
#define tus0 3772811383
#define tus1 3772784863
#define tus2 3772817503
#define tus3 3772801183
#define tus4 3772780783
#define tus5 3772813423
 
void setup() {
Serial.begin(9600);
pinMode(sari,OUTPUT);  
pinMode(kirmizi,OUTPUT);
pinMode(yesil,OUTPUT);
pinMode(beyaz,OUTPUT);
pinMode(ses,OUTPUT);
IR0.enableIRIn();
}
 
void loop() {
if(IR0.decode(&results))
{
  Serial.println(results.value);
  IR0.resume();
  if(results.value==tusguc)
  {
    digitalWrite(sari,HIGH);
    digitalWrite(kirmizi,HIGH);
    digitalWrite(yesil,HIGH);
    digitalWrite(beyaz,HIGH);
  }
  else if(results.value==tus0)
  {
    digitalWrite(sari,LOW);
    digitalWrite(kirmizi,LOW);
    digitalWrite(yesil,LOW);
    digitalWrite(beyaz,LOW);
  }
  else if(results.value==tus1)
  {
    digitalWrite(sari,!digitalRead(sari));
    digitalWrite(kirmizi,LOW);
    digitalWrite(yesil,LOW);
    digitalWrite(beyaz,LOW);
  }
  else if(results.value==tus2)
  {
    digitalWrite(sari,LOW);
    digitalWrite(kirmizi,!digitalRead(kirmizi));
    digitalWrite(yesil,LOW);
    digitalWrite(beyaz,LOW);
  }
  else if(results.value==tus3)
  {
    digitalWrite(sari,LOW);
    digitalWrite(kirmizi,LOW);
    digitalWrite(yesil,!digitalRead(yesil));
    digitalWrite(beyaz,LOW);
  }
  else if(results.value==tus4)
  {
    digitalWrite(sari,LOW);
    digitalWrite(kirmizi,LOW);
    digitalWrite(yesil,LOW);
    digitalWrite(beyaz,!digitalRead(beyaz));
  }
  else if(results.value==tus5)
  {
    digitalWrite(ses,!digitalRead(ses));
  }
}
delay(500); 
}
 
Çözüm
Maalesef çözememiştim hocam sorunu. Araştırmaya devam edin.
Hocam sorunu kısmen çözdüm. 2021 yılında çözümü var mıdır bilemiyorum fakat şu an için yeni sürümü çıkmış kütüphanenin. Kodunuzda kullandığınız kütüphane "IRremote.h" kütüphanesidir. "IRremote.hpp" son sürümdür. Bu kütüphane ve projeyi yeni sürüme geçirme ile her basışta farklı kod problemini çözdüm. Her tuşa kendi kodunu veriyor. Fakat şuan için bir problem daha oluştu. Test için bağladığım ledi kumandanın 1 tuşunun HEX id'sine tanımlıyorum fakat herhangi bir tuşa basınca da açılıyor led. Bunu da çözersem problem kalmayacak. İşinize yarar mı bilmem fakat konuyu yaklaşık 2.5 yıl sonra çözüme kavuşturmak istedim. Dilerseniz kodları paylaşabilirim.
Basılı tuttuğunu süreye göre vs sayılar değişiyor. Ona dikkat ederek tuşlara basın. Ben de IR araba yaptım, aynı sorunla uğraşmıştım.
 
Basılı tuttuğunu süreye göre vs sayılar değişiyor. Ona dikkat ederek tuşlara basın. Ben de ır araba yaptım, aynı sorunla uğraşmıştım.

Hocam her zaman farklı sayılar gösteriyor. Hata alıyordum onu çözdüm, artık hata almıyorum ama hala bir tuşa bastığım zaman farklı kodlar alıyorum. Yardımcı olursanız çok sevinirim.

Arkadaşlar bu tür konulardan anlayan kişileri buraya etiketleyebilirsiniz.
@Çağan Çelik hocam yardımcı olursanız sevinirim
 
Son düzenleme:
Konuyu hortlatıyorum Çözümü nedir hocam, hatırınızda mı?
 
Maalesef çözememiştim hocam sorunu. Araştırmaya devam edin.
Hocam sorunu kısmen çözdüm. 2021 yılında çözümü var mıdır bilemiyorum fakat şu an için yeni sürümü çıkmış kütüphanenin. Kodunuzda kullandığınız kütüphane "IRremote.h" kütüphanesidir. "IRremote.hpp" son sürümdür. Bu kütüphane ve projeyi yeni sürüme geçirme ile her basışta farklı kod problemini çözdüm. Her tuşa kendi kodunu veriyor. Fakat şuan için bir problem daha oluştu. Test için bağladığım ledi kumandanın 1 tuşunun HEX id'sine tanımlıyorum fakat herhangi bir tuşa basınca da açılıyor led. Bunu da çözersem problem kalmayacak. İşinize yarar mı bilmem fakat konuyu yaklaşık 2.5 yıl sonra çözüme kavuşturmak istedim. Dilerseniz kodları paylaşabilirim.
 
Çözüm
Paylaşın hocam sizin gibi başka çözüm arayan kişilere yardımcı olmuş olursunuz.
 
Paylaşın hocam sizin gibi başka çözüm arayan kişilere yardımcı olmuş olursunuz.
An itabaryla led problemini de çözdüm. HEX id bulma kodları aşağıdadır:


C++:
#include <IRremote.hpp>

#define RECV_PIN 11 // IR alıcının bağlı olduğu pinin numarası, uygun pin numarasını kullanın

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); // IR alıcısını başlat
}

void loop() {
  if (IrReceiver.decode()) {
    // Gelen HEX veriyi seri monitöre yazdır
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    IrReceiver.resume(); // Bir sonraki değeri almayı etkinleştir
  }
}


Led yakma ve belirlenen süre ile söndürme kodları aşağıdadır:

C++:
#include <IRremote.hpp>
#include <Servo.h>

#define RECV_PIN 11
#define LED_PIN 13
#define SERVO_PIN 9
#define BUTTON_HEX_CODE 0xE31CFF00
#define MAX_ANGLE 70
#define MIN_ANGLE 0 

IRrecv irrecv(RECV_PIN);
Servo myservo;

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(RECV_PIN);
  pinMode(LED_PIN, OUTPUT);
  myservo.attach(SERVO_PIN);
}

void loop() {
  if (IrReceiver.decode()) {
    Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);
    if (IrReceiver.decodedIRData.decodedRawData == BUTTON_HEX_CODE) {
      digitalWrite(LED_PIN, HIGH);
      myservo.write(MAX_ANGLE);
      delay(500);
      myservo.write(MIN_ANGLE);
      digitalWrite(LED_PIN, LOW);
    }
    IrReceiver.resume();
  }
}


Bunlardan da yararlanılarak çok daha geliştirilebilir
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…