Hızlı Çizgi İzleyen Kodları ve frenle Hatası

Çavuş

GadgetEfsanesi
Merhaba,

Hızlı çizgi izleyen bir robot için aşağıdaki kodları kullanıyorum. Ancak kodu çalıştırırken şu hatayı alıyorum:

Kod:
‘frenle’ was not declared in this scope

Kodun tam hali:

Kod:
#include <QTRSensors.h>
#define tabanhiz 150
#define sagmotor1 10
#define sagmotor2 9
#define sagmotorpwmpin 11
#define solmotor1 6
#define solmotor2 7
#define solmotorpwmpin 5
#define MZ80 8
#define taktik 12
#define LED 13

QTRSensorsAnalog qtra((unsigned char[]) { A0, A1, A2, A3, A4, A5, A6, A7} , 8);
unsigned int sensors[8];

float Kp = 0.04;  float Kd = 0.6;  float Ki = 0.0001; int integral = 0;
int ekhiz = 0;    int sonhata = 0;  int hata = 0; byte K=0; 
int sagmotorpwm = 0;  int solmotorpwm = 0;    unsigned char zemin = 1;
int cizgisay=0;     long baslamazamani=0;   long doksanzamani=50000;
void setup() 
{
pinMode(sagmotor1, OUTPUT);
pinMode(sagmotor2, OUTPUT); 
pinMode(sagmotorpwmpin, OUTPUT); 
pinMode(solmotor1, OUTPUT); 
pinMode(solmotor2, OUTPUT); 
pinMode(solmotorpwmpin, OUTPUT); 
pinMode(MZ80, INPUT);  
pinMode(taktik, INPUT_PULLUP);  
delay(1000);
digitalWrite(LED, HIGH);

for (int i = 0; i< 150; i++)
{
  if (0 <= i  && i < 5)    hafifsagadon();
  if (5 <= i  && i < 15)   hafifsoladon();
  if (15 <= i && i < 25)   hafifsagadon();
  if (25 <= i && i < 35)   hafifsoladon();
  if (35 <= i && i < 40)   hafifsagadon();
  if (45 <= i && i < 50)   hafifsoladon();
  if (i >= 50) {
    frenle(1);
    delay(3);
  }
  qtra.calibrate();
  delay(1);
 }
 flashyap();
 while (digitalRead(MZ80) == LOW) {frenle(1);}

}

Kodda ‘frenle’ fonksiyonunun tanımlı olduğunu görebiliyorum:

C++:
void frenle(int bekle){motorkontrol(0,0); delay(bekle);}

Bu hatayı nasıl çözebilirim? Yardımcı olabilir misiniz?
 
Çözüm
Sorununuz, derleyicinin frenle fonksiyonunu çağırmadan önce tanımlı olmaması nedeniyle oluşuyor. Çözüm olarak ya fonksiyon prototipini tanımlayın ya da fonksiyonu çağrıldığı yerin üzerine taşıyın.
‘frenle’ fonksiyonu kodun alt kısmında tanımlı. Ancak, derleyici yukarıdaki satırlarda bu fonksiyonu tanıyamıyor olabilir. ‘frenle’ fonksiyonunu kodun başına taşıyarak bu sorunu çözebilirsiniz.
 
Sorununuz, derleyicinin frenle fonksiyonunu çağırmadan önce tanımlı olmaması nedeniyle oluşuyor. Çözüm olarak ya fonksiyon prototipini tanımlayın ya da fonksiyonu çağrıldığı yerin üzerine taşıyın.
 
Çözüm
Alternatif bir çözüm olarak, frenle fonksiyonunu tanımlamadan önce çağırıyorsanız, void frenle(int); şeklinde bir prototip tanımı eklemelisiniz.
 
Kodunuzun derleme sırasını kontrol edin. Fonksiyonlarınızı çağırmadan önce doğru sırada tanımladığınızdan emin olun.
 
‘frenle’ hatası, derleyiciye fonksiyonun nerede olduğunu anlatmadığınızdan kaynaklanıyor. Derleyiciyi bilgilendirmek için fonksiyon prototiplerini kullanmayı unutmayın.
 
Fonksiyon prototiplerini eklemek sadece bu tür sorunları önlemekle kalmaz, aynı zamanda daha düzenli bir kod yapısı sağlar.
 
Eğer frenle fonksiyonunun çalışmaması gibi bir durum yaşarsanız, motorkontrol fonksiyonunun doğru çalıştığından emin olun.
 
Kodunuzu derlemeden önce IDE'nin doğru sürümünü kullandığınızdan emin olun. Eski sürümler bu tür hatalar verebilir.
 
Bir fonksiyon prototipi oluşturmak yerine, frenle fonksiyonunu setup fonksiyonunun üstüne taşıyabilirsiniz. Bu da çözüm olacaktır.
 

Benzer Konular

Yeni Konular

Geri
Üst