folder Tahribat.com Forumları
linefolder Elektronik / Embedded / Mobil Cihazlar
linefolder Arduino Irremote İle İlgili Hata İçin Yardım



Arduino Irremote İle İlgili Hata İçin Yardım

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    csfrt
    csfrt's avatar
    Kayıt Tarihi: 22/Nisan/2013
    Erkek

    Merhaba arkadaşlar kuzenim okul için bir arduino projesi geliştiriyor trafik ışıkları uygulaması ama hatayla karşılaşıyormuş ben de pek anlamadığım için müritlerden bilen vardır diye konu açayım dedim.

    bana yazdığı bu şekilde nasıl bir yol izleyebiliriz?

    -----------------

    Trafik sinyalizasyonunda kızılötesi kumanda kullanıyorum ama interrupt komutu istediğim gibi çalışmıyor . Normal akistan istenen duruma geçiş yapmıyor ama farklı sonuçlar alıyorum

    Trafik sinyalizasyonu bir kavşakta normal seyirinde giderken kızılötesi kumanda yardımıyla normal akışı geçiş önceliği olan araçlar için değiştiriyorum. Gelen araç için ışık yeşil yanması hedeflenirken diğer yön için kırmızı olması isteniyor . Ama kumandaya basıldığında bütün ışıklar yanıyor ve sönmüyor .

    kod aşağıda arkadaşlar 

     

    #include <IRremote.h>  //kütüphane indirme adresi:  https://github.com/z3t0/Arduino-IRremote
    int RECV_PIN = 2;    // IR alıcısı giriş portu
    IRrecv irrecv(RECV_PIN);
    
    decode_results results;
    
    void setup()
    {
      //1. yol 
      pinMode(3,OUTPUT); //1. yol yeşil 
      pinMode(4,OUTPUT); //1. yol sarı
      pinMode(5,OUTPUT); //1. yol kırmızı
      //2.yol
       pinMode(6,OUTPUT);//2. yol yeşil   
      pinMode(7,OUTPUT); //2. yol sarı
      pinMode(9,OUTPUT);//2. yol kırmızı
      
     
     Serial.begin(9600);
      irrecv.enableIRIn(); // Alış başlıyor
      Serial.println("KODLAR:");
    pinMode(RECV_PIN, INPUT_PULLUP);
    IrReceiver.begin(RECV_PIN);
    attachInterrupt(digitalPinToInterrupt(2), denetle, FALLING); 
    }
    
    
    void ikinciyol(){
       
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
    
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(9, LOW);
      delay(5000);
     digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
    
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(9, LOW);
      delay(3000);
    digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
    
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(9, HIGH);
      delay(5000);
       
      
      }
      
      void birinciyol(){
        
        
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
    
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(9, HIGH);
      delay(5000);
     digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
    
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(9, LOW);
      delay(3000);
    digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
    
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(9, LOW);
      delay(5000);
      
      }
    
     void denetle(){ 
     if (irrecv.decode(&results)) {
         Serial.print("HEX> "); 
         Serial.println(results.value, HEX); // Gelen veri hexadecimal (16'lık) tabanda yazılır
        
     if(results.value==0xFFA25D){
      Serial.println("1. yol için basıldı");
       birinciyol();
        }
        else if(results.value==0xFF629D){
          Serial.println("2. yol için basıldı ");
          ikinciyol();
          }
           else if(results.value==0xFFE21D){
          Serial.println("3. yol için basıldı");
          birinciyol();
          }
           else if(results.value==0xFF22DD){
          Serial.println("4. yol için basıldı ");
          ikinciyol();
          }
       else   
       irrecv.resume(); 
     }
     }
    
    void loop() {
      Serial.println("trafik normalden devam ediyor  "); 
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
    
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(9, HIGH);
      delay(5000);
     digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
    
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(9, LOW);
      delay(3000);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
    
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(9, LOW);
      delay(5000);
        
        }
    

     


    ruh eşi çok sıradan, bana suç ortağı lazım.
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    BiUyeOlamadim
    BiUyeOlamadim's avatar
    Kayıt Tarihi: 10/Eylül/2005
    Erkek

    109. satırda "else" için parantez açılmamış.


    The tip of the tongue taking a trip of three steps down the palate to tap, at three, on the teeth. Lo. Lee. Ta.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    end
    end's avatar
    Kayıt Tarihi: 16/Ekim/2016
    Erkek
    BiUyeOlamadim bunu yazdı

    109. satırda "else" için parantez açılmamış.


    Parantez kume içine almaya yarar.

    One line conditionlarda kume parantezi kullanmana gerek yoktur. 

    end tarafından 25/May/22 17:22 tarihinde düzenlenmiştir

    0x0480 takilin madem ﷽﷽﷽
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    shock56
    shock56's avatar
    Kayıt Tarihi: 31/Mart/2007
    Erkek

    Hocam burada loop() fonksiyonu içerisinde ve diğer fonksiyonların içerisinde delay() fonksiyonu kullanılmış. delay() fonksiyonu ile bekleme yaparsan arduino daki bütün işlemler durur, yani asenkron değildir. Arduino daki bütün işlemler beklediği için diğer kodlar da sağlıklı çalışmaz.

    Bunun için delay() kullanmadan bekleme yapman lazım. millis() kullanabilirsin bunun yerine.

    https://forum.arduino.cc/t/interrupt-with-delay/455056/2

     

     

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    NiKoTiN
    NiKoTiN's avatar
    Kayıt Tarihi: 14/Şubat/2005
    Erkek

    denemedim ama şu şekilde bir deneyebilir mi ? 

    birde üst mesajdaki arkadaşın dediği gibi delay kullanmasın. bekleme esnasında kumandadan tuşlara bassa da çalışmayacak tepki vermeyecek. millis ile değiştirsin delay verdiği kısımları.

     

    #include   //kütüphane indirme adresi:  https://github.com/z3t0/Arduino-IRremote
    int RECV_PIN = 2;    // IR alıcısı giriş portu
    IRrecv irrecv(RECV_PIN);
     
    decode_results results;
     
    void setup()
    {
      //1. yol
      pinMode(3,OUTPUT); //1. yol yeşil
      pinMode(4,OUTPUT); //1. yol sarı
      pinMode(5,OUTPUT); //1. yol kırmızı
      //2.yol
       pinMode(6,OUTPUT);//2. yol yeşil  
      pinMode(7,OUTPUT); //2. yol sarı
      pinMode(9,OUTPUT);//2. yol kırmızı
       
      
     Serial.begin(9600);
      irrecv.enableIRIn(); // Alış başlıyor
      Serial.println("KODLAR:");
    pinMode(RECV_PIN, INPUT_PULLUP);
    IrReceiver.begin(RECV_PIN);
    }
     void loop() { 
    denetle();
    normal();
     }
     void normal() {
      Serial.println("trafik normalden devam ediyor  ");
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
     
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(9, HIGH);
      delay(5000);
     digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
     
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(9, LOW);
      delay(3000);
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
     
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(9, LOW);
      delay(5000);
         
        }
    
    void ikinciyol(){
        
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
     
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(9, LOW);
      delay(5000);
     digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
     
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(9, LOW);
      delay(3000);
    digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
     
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(9, HIGH);
      delay(5000);
        
       
      }
       
      void birinciyol(){
         
         
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
     
      digitalWrite(6, LOW);
      digitalWrite(7, LOW);
      digitalWrite(9, HIGH);
      delay(5000);
     digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
     
      digitalWrite(6, LOW);
      digitalWrite(7, HIGH);
      digitalWrite(9, LOW);
      delay(3000);
    digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, HIGH);
     
      digitalWrite(6, HIGH);
      digitalWrite(7, LOW);
      digitalWrite(9, LOW);
      delay(5000);
       
      }
     
     void denetle(){
     if (irrecv.decode(&results)) {
         Serial.print("HEX> ");
         Serial.println(results.value, HEX); // Gelen veri hexadecimal (16'lık) tabanda yazılır
         
     if(results.value==0xFFA25D){
      Serial.println("1. yol için basıldı");
       birinciyol();
        }
        else if(results.value==0xFF629D){
          Serial.println("2. yol için basıldı ");
          ikinciyol();
          }
           else if(results.value==0xFFE21D){
          Serial.println("3. yol için basıldı");
          birinciyol();
          }
           else if(results.value==0xFF22DD){
          Serial.println("4. yol için basıldı ");
          ikinciyol();
          }
       else  
       normal();
       irrecv.resume();
     }
     }
     
    

     

     

    NiKoTiN tarafından 25/May/22 21:13 tarihinde düzenlenmiştir

    NiKoTiN
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    _PesimisT_
    _PesimisT_'s avatar
    Kayıt Tarihi: 27/Nisan/2008
    Erkek

    Hocam denetle ve loop içindekileri yer değiştir... Şartların en sonunda normalakışı çağır... 


    Bu dahil; tüm genellemeler yanlıştır! Yolcu; Kendi Yolunda.... Şükür biz Allahtan başka sahibi olmayanlarız!
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    csfrt
    csfrt's avatar
    Kayıt Tarihi: 22/Nisan/2013
    Erkek

    teşekkürler arkadaşlar cevaplar için iletiyorum hepsini kendisine.


    ruh eşi çok sıradan, bana suç ortağı lazım.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    bisson
    bisson's avatar
    Kayıt Tarihi: 24/Kasım/2008
    Erkek

    Herkese merhaba, dostum buna benzer bir proje yapmıştım ama ben manyetik butonla yapmıştım bir fikir verebilir sana.

    Kod aşağıda  nasıl çalıştığına dair video da bu linkte: https://s6.dosya.tc/server7/txqui2/Trafik_isigi.mp4.html

     
     

    // << Coded by İbrahim Yılmaz >> 19.01.2020
    byte kirmizi13 = 13; // 4. satırdan 25.satıra kadar değişkenlere isim atadım
    byte kirmizi12 = 12;
    byte kirmizi11 = 11;
    byte kirmizi10 = 10;
    byte yesil9 = 9;
    byte yesil8 = 8;
    byte yesil7 = 7;
    byte yesil6 = 6;
    byte mavi5 = 5;
    byte mavi4 = 4;
    byte mavi3 = 3;
    byte mavi2 = 2;
    byte Reset = A0;
    byte Yol_1 = A1;
    byte Yol_2 = A2;
    byte Yol_3 = A3;
    byte Yol_4 = A4;
    int sayici;
    int say1;
    int say2;
    int say3;
    int say4;

    void yol1() // 1 numaralı yoldan ambulans sinyali geldiğinde bu döngü devreye girip resetleme yapana kadar çalışır.
    {

    while(digitalRead(Reset) != HIGH)
    {
    if(say1 >= 0 && say1 <=2000)
    {
    digitalWrite(yesil9,HIGH);
    digitalWrite(yesil8,LOW);
    digitalWrite(yesil7,LOW);
    digitalWrite(yesil6,LOW);
    digitalWrite(kirmizi13,LOW);
    digitalWrite(kirmizi12,HIGH);
    digitalWrite(kirmizi11,HIGH);
    digitalWrite(kirmizi10,HIGH);
    if(say1 >= 0 && say1 <= 1000)
    {
    digitalWrite(mavi5,HIGH);
    }
    if(say1 >= 1000 && say1 <= 2000)
    {
    digitalWrite(mavi5,LOW);
    }
    digitalWrite(mavi4,LOW);
    digitalWrite(mavi3,LOW);
    digitalWrite(mavi2,LOW);
    digitalRead(Reset);
    }
    delay(10);
    say1=say1+10;
    if(say1 >= 2001)
    {
    say1=0;
    }
    }
    }
    void yol2()// 2 numaralı yoldan ambulans sinyali geldiğinde bu döngü devreye girip resetleme yapana kadar çalışır.
    {
    while(digitalRead(Reset) != HIGH)
    {
    if(say2 >= 0 && say2 <=2000)
    {
    digitalWrite(yesil9,LOW);
    digitalWrite(yesil8,HIGH);
    digitalWrite(yesil7,LOW);
    digitalWrite(yesil6,LOW);
    digitalWrite(kirmizi13,HIGH);
    digitalWrite(kirmizi12,LOW);
    digitalWrite(kirmizi11,HIGH);
    digitalWrite(kirmizi10,HIGH);

    if(say2 >= 0 && say2 <= 1000)
    {
    digitalWrite(mavi4,HIGH);
    }
    if(say2 >= 1000 && say2 <= 2000)
    {
    digitalWrite(mavi4,LOW);
    }
    digitalWrite(mavi5,LOW);
    digitalWrite(mavi3,LOW);
    digitalWrite(mavi2,LOW);
    }
    delay(10);
    say2=say2+10;
    if(say2 >= 2001)
    {
    say2=0;
    }
    }
    }
    void yol3()// 3 numaralı yoldan ambulans sinyali geldiğinde bu döngü devreye girip resetleme yapana kadar çalışır.
    {
    while(digitalRead(Reset) != HIGH)
    {
    if(say3 >= 0 && say3 <=2000)
    {
    digitalWrite(yesil9,LOW);
    digitalWrite(yesil8,LOW);
    digitalWrite(yesil7,HIGH);
    digitalWrite(yesil6,LOW);
    digitalWrite(kirmizi13,HIGH);
    digitalWrite(kirmizi12,HIGH);
    digitalWrite(kirmizi11,LOW);
    digitalWrite(kirmizi10,HIGH);
    if(say3 >= 0 && say3 <= 1000)
    {
    digitalWrite(mavi3,HIGH);
    }
    if(say3 >= 1000 && say3 <= 2000)
    {
    digitalWrite(mavi3,LOW);
    }
    digitalWrite(mavi5,LOW);
    digitalWrite(mavi4,LOW);
    digitalWrite(mavi2,LOW);
    }
    delay(10);
    say3=say3+10;
    if(say3 >= 2001)
    {
    say3=0;
    }
    }
    }
    void yol4()// 4 numaralı yoldan ambulans sinyali geldiğinde bu döngü devreye girip resetleme yapana kadar çalışır.
    {
    while(digitalRead(Reset) != HIGH)
    {
    if(say4 >= 0 && say4 <=2000)
    {
    digitalWrite(yesil9,LOW);
    digitalWrite(yesil8,LOW);
    digitalWrite(yesil7,LOW);
    digitalWrite(yesil6,HIGH);
    digitalWrite(kirmizi13,HIGH);
    digitalWrite(kirmizi12,HIGH);
    digitalWrite(kirmizi11,HIGH);
    digitalWrite(kirmizi10,LOW);

    if(say4 >= 0 && say4 <= 1000)
    {
    digitalWrite(mavi2,HIGH);
    }
    if(say4 >= 1000 && say4 <= 2000)
    {
    digitalWrite(mavi2,LOW);
    }
    digitalWrite(mavi5,LOW);
    digitalWrite(mavi4,LOW);
    digitalWrite(mavi3,LOW);
    }
    delay(10);
    say4=say4+10;
    if(say4 >= 2000)
    {
    say4=0;
    }
    }
    }
    void setup()
    {
    pinMode(kirmizi13,OUTPUT);
    pinMode(kirmizi12,OUTPUT);
    pinMode(kirmizi11,OUTPUT);
    pinMode(kirmizi10,OUTPUT);
    pinMode(yesil9,OUTPUT);
    pinMode(yesil8,OUTPUT);
    pinMode(yesil7,OUTPUT);
    pinMode(yesil6,OUTPUT);
    pinMode(mavi5,OUTPUT);
    pinMode(mavi4,OUTPUT);
    pinMode(mavi3,OUTPUT);
    pinMode(mavi2,OUTPUT);
    pinMode(Reset,INPUT);
    pinMode(Yol_1,INPUT);
    pinMode(Yol_2,INPUT);
    pinMode(Yol_3,INPUT);
    pinMode(Yol_4,INPUT);

    }
    void loop() // Ana döngümüz burasıdır ambulans sinyali gelmediği sürece buradaki döngü çalışacaktır.
    {
    if(sayici >= 0 && sayici <=5000)
    {
    digitalWrite(yesil9,HIGH);
    digitalWrite(yesil8,LOW);
    digitalWrite(yesil7,LOW);
    digitalWrite(yesil6,LOW);
    digitalWrite(kirmizi13,LOW);
    digitalWrite(kirmizi12,HIGH);
    digitalWrite(kirmizi11,HIGH);
    digitalWrite(kirmizi10,HIGH);
    digitalWrite(mavi5,LOW);
    digitalWrite(mavi4,LOW);
    digitalWrite(mavi3,LOW);
    digitalWrite(mavi2,LOW);
    } //ilk döngü tamamlanıyor.
    if(sayici >= 5001 && sayici <=10000)
    {
    digitalWrite(yesil9,LOW);
    digitalWrite(yesil8,HIGH);
    digitalWrite(yesil7,LOW);
    digitalWrite(yesil6,LOW);
    digitalWrite(kirmizi13,HIGH);
    digitalWrite(kirmizi12,LOW);
    digitalWrite(kirmizi11,HIGH);
    digitalWrite(kirmizi10,HIGH);
    digitalWrite(mavi5,LOW);
    digitalWrite(mavi4,LOW);
    digitalWrite(mavi3,LOW);
    digitalWrite(mavi2,LOW);
    } //ikinci döngü tamamlanıyor.

    if(sayici >= 10001 && sayici <=15000)
    {
    digitalWrite(yesil9,LOW);
    digitalWrite(yesil8,LOW);
    digitalWrite(yesil7,HIGH);
    digitalWrite(yesil6,LOW);
    digitalWrite(kirmizi13,HIGH);
    digitalWrite(kirmizi12,HIGH);
    digitalWrite(kirmizi11,LOW);
    digitalWrite(kirmizi10,HIGH);
    digitalWrite(mavi5,LOW);
    digitalWrite(mavi4,LOW);
    digitalWrite(mavi3,LOW);
    digitalWrite(mavi2,LOW);
    } //üçüncü döngü tamamlanıyor.
    if(sayici >= 15001 && sayici <=20000)
    {
    digitalWrite(yesil9,LOW);
    digitalWrite(yesil8,LOW);
    digitalWrite(yesil7,LOW);
    digitalWrite(yesil6,HIGH);
    digitalWrite(kirmizi13,HIGH);
    digitalWrite(kirmizi12,HIGH);
    digitalWrite(kirmizi11,HIGH);
    digitalWrite(kirmizi10,LOW);
    digitalWrite(mavi5,LOW);
    digitalWrite(mavi4,LOW);
    digitalWrite(mavi3,LOW);
    digitalWrite(mavi2,LOW);
    }
    delay(10);
    sayici=sayici+10;
    if(sayici >= 20001)
    {
    sayici = 0;
    }
    if(digitalRead(Yol_1)==HIGH) // 1 numaralı yoldan sinyal gelince 1 numaralı döngüye gider.
    {
    yol1();
    }
    if(digitalRead(Yol_2)==HIGH) // 2 numaralı yoldan sinyal gelince 2 numaralı döngüye gider.
    {
    yol2();
    }
    if(digitalRead(Yol_3)==HIGH) // 3 numaralı yoldan sinyal gelince 3 numaralı döngüye gider.
    {
    yol3();
    }
    if(digitalRead(Yol_4)==HIGH) // 4 numaralı yoldan sinyal gelince 4 numaralı döngüye gider.
    {
    yol4();
    }
    }

     


    I know me you know you.......
Toplam Hit: 1109 Toplam Mesaj: 8
arduino irremote arduino