Şimdi Ara

arduino da 'was not declared in this scope' hatası

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
5 Misafir - 5 Masaüstü
5 sn
4
Cevap
1
Favori
3.980
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • kod bu:


    //motor

    #include <IRremote.h>

     

    int RECV_PIN = 11;

    int sagileri = 7;

    int saggeri = 8;

    int solileri = 9;

    int solgeri = 10;

    int itsONled[] = {0,0,0,0,0};


    #define code1 33150 //ileri


    #define code2 4590 //geri


    #define code3 16830 //sağ


    #define code4 2550 //sol



    IRrecv irrecv(RECV_PIN);

     

    decode_results results;

     //mesafe

    #define echoPin 6

    #define trigPin 7

    #define buzzerPin 8


    int maximumRange = 30;

    int minimumRange = 0;



    void setup() {

     {//motor

    Serial.begin(9600);

    irrecv.enableIRIn();

    pinMode(sagileri, OUTPUT);

    pinMode(saggeri, OUTPUT);

    pinMode(solileri, OUTPUT);

    pinMode(solgeri, OUTPUT);

    }

    {//mesafe

     pinMode(trigPin, OUTPUT);

     pinMode(echoPin, INPUT);

     pinMode(buzzerPin, OUTPUT);

    }

    }

    void loop() {

    {//motor

    if (irrecv.decode(&results)) {

    unsigned int value = results.value;

    switch(value) {

    case code1:

    if(itsONled[1] == 1) {

    digitalWrite(sagileri, LOW);

    digitalWrite(solileri, LOW);

    digitalWrite(saggeri, LOW);

    digitalWrite(solgeri, LOW);

    itsONled[1] = 0;

    } else {

    digitalWrite(sagileri, HIGH);

    digitalWrite(solileri, HIGH);

    digitalWrite(saggeri, LOW);

    digitalWrite(solgeri, LOW);

    itsONled[1] = 1;

    }

    break;

    case code2:

    if(itsONled[2] == 1) {

    digitalWrite(sagileri, LOW);

    digitalWrite(solileri, LOW);

    digitalWrite(saggeri, LOW);

    digitalWrite(solgeri, LOW);

    itsONled[2] = 0;

    } else {

    digitalWrite(sagileri, LOW);

    digitalWrite(solileri, LOW);

    digitalWrite(saggeri, HIGH);

    digitalWrite(solgeri, HIGH);

    itsONled[2] = 1;

    }

    break;

    case code3:

    if(itsONled[3] == 1) {

    digitalWrite(sagileri, LOW);

    digitalWrite(solileri, LOW);

    digitalWrite(saggeri, LOW);

    digitalWrite(solgeri, LOW);

    itsONled[3] = 0;

    } else {

    digitalWrite(sagileri, LOW);

    digitalWrite(solileri, HIGH);

    digitalWrite(saggeri, HIGH);

    digitalWrite(solgeri, LOW);

    itsONled[3] = 1;

    }

    break;

    case code4:

    if(itsONled[4] == 1) {

    digitalWrite(sagileri, LOW);

    digitalWrite(solileri, LOW);

    digitalWrite(saggeri, LOW);

    digitalWrite(solgeri, LOW);

    itsONled[4] = 0;

    } else {

    digitalWrite(sagileri,HIGH);

    digitalWrite(solileri, LOW);

    digitalWrite(saggeri, LOW);

    digitalWrite(solgeri, HIGH);

    itsONled[4] = 1;

    }

    break;



    }

    Serial.println(value);

    irrecv.resume();


    }

    }//motor bitiş

    {//mesafe

     int olcum = mesafe(maximumRange, minimumRange)

     melodi(olcum * 10);

    }


    int mesafe(int maxrange, int minrange);

    {

     long duration, distance;

     digitalWrite(trigPin, LOW);

     delayMicroseconds(2);

     digitalWrite(trigPin, HIGH);

     delayMicroseconds(10);

     digitalWrite(trigPin, LOW);

     duration = pulseIn(echoPin, HIGH);

     distance = duration / 58.2;

     delay(50);

     if (distance >= maxrange || distance <= minrange)

      return 0;

     return distance;

      

    }


    int melodi(int dly)

    {

     tone(buzzerPin, 440);

     delay(dly);

     noTone(buzzerPin);

     delay(dly);

    }//mesafe biitiş


    }


    Kod

    Yığını:
    int olcum = mesafe(maximumRange, minimumRange);

    kısmında hata veriyor.ne yaptıysam düzeltemedim. verdiği hata da şu:


    C:\Users\\Desktop\kendi_denemem\kendi_denemem.ino: In function 'void loop()':

    kendi_denemem:121:15: error: 'mesafe' was not declared in this scope

      int olcum = mesafe(maximumRange, minimumRange)

            ^~~~~~

    C:\Users\\Desktop\kendi_denemem\kendi_denemem.ino:121:15: note: suggested alternative: 'rename'

      int olcum = mesafe(maximumRange, minimumRange)

            ^~~~~~

            rename

    kendi_denemem:136:19: error: 'maxrange' was not declared in this scope

      if (distance >= maxrange || distance <= minrange)

              ^~~~~~~~

    kendi_denemem:136:43: error: 'minrange' was not declared in this scope

      if (distance >= maxrange || distance <= minrange)

                          ^~~~~~~~

    C:\Users\\Desktop\kendi_denemem\kendi_denemem.ino:136:43: note: suggested alternative: 'distance'

      if (distance >= maxrange || distance <= minrange)

                          ^~~~~~~~

                          distance

    C:\Users\\Desktop\kendi_denemem\kendi_denemem.ino:137:12: warning: return-statement with a value, in function returning 'void' [-fpermissive]

       return 0;

          ^

    C:\Users\\Desktop\kendi_denemem\kendi_denemem.ino:138:10: warning: return-statement with a value, in function returning 'void' [-fpermissive]

      return distance;

         ^~~~~~~~

    kendi_denemem:143:1: error: a function-definition is not allowed here before '{' token

     {

     ^

    exit status 1

    'mesafe' was not declared in this scope



    ne yapmam gerek yardımcı olur musunuz.








  • Gözüme çarpan temel hatanız ";" lere dikkat edin. Bazı yerlerde eksik, bazı yerlerde yanlış kullandınız.

  • Merhaba. Öncelikle forumda kodları öylece mesajın içine salıvermeniz okunaklı olmasını bayağı bir engellemiş.


    Alıntı

    metni:

    // kodları alıntı şekilde paylaşırsanız daha güzel görünür. // Yanda kaydırma çubuğu çıksaydı daha iyi olurdu ama yeni sistemi tam olarak çözemedim henüz.


    Ayrıca sekme(tab) kullanmanız kodları okumayı kolaylaştıracaktır. Göz atmak isteyen olursa kodların görünüşünü biraz düzenledim. Köşeli parantez ve noktalı virgül kullanımındaki hataları da düzelttim.


    Alıntı

    metni:

    //motor#include
    int RECV_PIN = 11;int sagileri = 7;int saggeri = 8;int solileri = 9;int solgeri = 10;int itsONled[] = {0,0,0,0,0};
    #define code1 33150 //ileri#define code2 4590 //geri#define code3 16830 //sağ#define code4 2550 //sol
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    //mesafe#define echoPin 6#define trigPin 7#define buzzerPin 8
    int maximumRange = 30;int minimumRange = 0;
    void setup() {//motor <-- bu satırdaki süslü parantezi sildim Serial.begin(9600); irrecv.enableIRIn(); pinMode(sagileri, OUTPUT); pinMode(saggeri, OUTPUT); pinMode(solileri, OUTPUT); pinMode(solgeri, OUTPUT);// <-- bu satırdaki süslü parantezi sildim
    //mesafe <-- bu satırdaki süslü parantezi sildim pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(buzzerPin, OUTPUT);// <-- bu satırdaki süslü parantezi sildim}

    void loop() {//motor <-- bu satırdaki süslü parantezi sildim if (irrecv.decode(&results)) { unsigned int value = results.value;
    switch(value) { case code1: if(itsONled[1] == 1) { <-- bu satıra süslü parantez ekledim   digitalWrite(sagileri, LOW); digitalWrite(solileri, LOW); digitalWrite(saggeri, LOW); digitalWrite(solgeri, LOW); itsONled[1] = 0; else { digitalWrite(sagileri, HIGH); digitalWrite(solileri, HIGH); digitalWrite(saggeri, LOW); digitalWrite(solgeri, LOW); itsONled[1] = 1; } break;
    case code2: if(itsONled[2] == 1) { digitalWrite(sagileri, LOW); digitalWrite(solileri, LOW); digitalWrite(saggeri, LOW); digitalWrite(solgeri, LOW); itsONled[2] = 0; else { digitalWrite(sagileri, LOW); digitalWrite(solileri, LOW); digitalWrite(saggeri, HIGH); digitalWrite(solgeri, HIGH); itsONled[2] = 1; } break;
    case code3: if(itsONled[3] == 1) { digitalWrite(sagileri, LOW); digitalWrite(solileri, LOW); digitalWrite(saggeri, LOW); digitalWrite(solgeri, LOW); itsONled[3] = 0; else { digitalWrite(sagileri, LOW); digitalWrite(solileri, HIGH); digitalWrite(saggeri, HIGH); digitalWrite(solgeri, LOW); itsONled[3] = 1; }
    break;
    case code4: if(itsONled[4] == 1) { digitalWrite(sagileri, LOW); digitalWrite(solileri, LOW); digitalWrite(saggeri, LOW); digitalWrite(solgeri, LOW); itsONled[4] = 0; else { digitalWrite(sagileri,HIGH); digitalWrite(solileri, LOW); digitalWrite(saggeri, LOW); digitalWrite(solgeri, HIGH); itsONled[4] = 1; } break; }
    Serial.println(value); irrecv.resume(); }
    //motor bitiş <-- bu satırdaki süslü parantezi sildim
    //mesafe <-- bu satırdaki süslü parantezi sildimint olcum = mesafe(maximumRange, minimumRange);<-- bu satıra noktalı virgül ekledimmelodi(olcum * 10);}
    int mesafe(int maxrange, int minrange) <-- bu satırdaki noktalı virgülü sildim // bkz: Arduino - FunctionDeclaration{ long duration, distance; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration / 58.2; delay(50);
    if (distance >= maxrange || distance <= minrange) return 0; return distance;}
    int melodi(int dly){ tone(buzzerPin, 440); delay(dly); noTone(buzzerPin); delay(dly);//mesafe bitiş <-- bu satırdaki süslü parantezi sildim}


    Kodu biraz daha düzenledikten sonra derleme hâlâ hata vermeye devam ediyor ama en azından koddaki asıl sorunu buldum.

    IRremote.h kütüphanesi ve tone() ile noTone() fonksiyonları aynı zamanlayıcıyı(Timer2) kullandıkları için bir çakışma oluşuyormuş. tone ve noTone satırlarını yorum hâline getirince derleme hatasız tamamlanıyor.


    Düzeltmek için kütüphanenin kaynak kodlarında değişiklik yapmışlar ama bu diğer projelerin çalışmasını da etkileyecektir, değişiklik yapmadan önce ne yaptığınızı bildiğinize emin olun.

    (bkz: tone() function and IRRemote master library. (arduino.cc))


    Forumdan bir arkadaş sorununu başka bir kütüphane kullanarak çözmüş, ama detay vermemiş. (bkz: arduino da derleme hatası » Sayfa 1 - 1 (donanimhaber.com))


    Son olarak, melodi fonksiyonunu neden int değer döndürecek şekilde tanımladığınızı anlamadım, zaten loop içinde de değişkene atamadan çağrılmış.




    < Bu mesaj bu kişi tarafından değiştirildi F3SV mağduru -- 24 Ocak 2021; 20:40:4 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.