Arduino Fonksiyon Tanımlama Sıkıntısı

Gokrtl

Gökhan Kartal (TeknoDay)
Staff member
Katılım
27 Şubat 2019
Mesajlar
11,212
Screenshot_20210116-142243.jpg

Bir arkadaşın yukarıdaki gibi bir sıkıntısı var.
Şöyle birşey önerdim ama aşağıdaki gibi hata alıyor. Çeşitli denemeler yaptırsam da düzgün tanımlatamadım. Evde olmadığımdan deneyemeyip merakımdan konu açayım dedim.
Neden tanımlayamıyoruz bu fonksiyonu acaba?

Screenshot_20210116-142311.jpg


FB_IMG_1610795266449.jpg
 
O şekilde kullanabilmek için bir C++ class olarak tanımlanması gerekiyor.

C++:
class X113647Stepper
{
public:
  X113647Stepper(int a, int b, int c, int d, int e)
  {
    a = b = c = d = e = 0;
  }

  ~X113647Stepper()
  {
  }

  int setSpeed(int speed)
  {
    // set the speed
  }

  int step(int step)
  {
    // do the step
  }
};

X113647Stepper mystepper(1, 2, 3, 4, 5);

void setup() {
  // put your setup code here, to run once:

  mystepper.setSpeed(200);
}

void loop() {
  // put your main code here, to run repeatedly:

  mystepper.step(10);
}
 
O şekilde kullanabilmek için bir C++ class olarak tanımlanması gerekiyor.

C++:
class X113647Stepper
{
public:
  X113647Stepper(int a, int b, int c, int d, int e)
  {
    a = b = c = d = e = 0;
  }

  ~X113647Stepper()
  {
  }

  int setSpeed(int speed)
  {
    // set the speed
  }

  int step(int step)
  {
    // do the step
  }
};

X113647Stepper mystepper(1, 2, 3, 4, 5);

void setup() {
  // put your setup code here, to run once:

  mystepper.setSpeed(200);
}

void loop() {
  // put your main code here, to run repeatedly:

  mystepper.step(10);
}
Kütüphane ile mi alakalı abi?
 
Kütüphane olayı yok benim verdiğim örnekte. Ama istersen o step motor için kütüphane de hazırlayabilirsin.
 
Kütüphane olayı yok benim verdiğim örnekte. Ama istersen o step motor için kütüphane de hazırlayabilirsin.
Abi anlayamadığım nokta ben void fonks_adı(tür değişken){ XXXX } olarak void loop dışında istediğim fonksiyonu tanımlayabilirim diye düşünüyordum. Bu fonksiyonu neden "public" olarak tanımlıyoruz?
 
Bir dakka şimdi, bu X113647Stepper zaten var olan hazır bir kütüphane midir? Ben böyle bir kütüphane yok, kendisi birşeyler yapmaya çalışıyor diye düşündüm :)
 
Bir dakka şimdi, bu X113647Stepper zaten var olan hazır bir kütüphane midir? Ben böyle bir kütüphane yok, kendisi birşeyler yapmaya çalışıyor diye düşündüm :)
Kütüphanesi var abi. "include" ile eklemiş en başta.
Ben fonkisyonun adını "stepmotor" koyup oluşturduğum için kütüphane ile çakıştı diye düşündüm. Sonradan fonksiyon ismini değiştirdim yine çalışmadı dedi arkadaş.
 
Valla gördüğü yavaşlama probleminin, işleri bir fonksiyon içinde yapılarak çözülmez. Ama senin kodundaki sorun, fonksiyon isminin yukarıda tanımlı olan "stepmotor" objesi ile aynı olması. Adını değiştirince çalışması lazımdı. O arkadaş herhalde tamamen kaybolmuş durumda :)
 
Valla gördüğü yavaşlama probleminin, işleri bir fonksiyon içinde yapılarak çözülmez. Ama senin kodundaki sorun, fonksiyon isminin yukarıda tanımlı olan "stepmotor" objesi ile aynı olması. Adını değiştirince çalışması lazımdı. O arkadaş herhalde tamamen kaybolmuş durumda :)
Ben zaten işe yarayacağını sanmıyorum demiştim. Fonksiyon çalışmayınca noktaydı, virgüldü derken biraz da ben karıştırmış oldum kafasını :D
 
Yalnız kod yazarken şuna dikkat etmek lazım: Sadece aynı kaynak kodunda çağrılan bir fonksiyonu yukarıya koyarsan, aşağıdaki fonksiyonlar onu "görür" ve kullanabilir. Ama çağrılan fonksiyonu senin yaptığın gibi en aşağı koyarsan, o zaman derleyici o fonksiyon için yukarı bir prototip koymanı ister.

Yani fonksiyonu alta koyarsan, o fonksiyonun prototipini de üste koyma yükümlülüğüne giriyorsun. Fonksiyonu değiştirecek olursan ileride, onun prototipini de değiştirmeyi unutmaman gerekiyor. Ayrıca prototipin de TAM OLARAK fonksiyon ile birebir örtüştüğünü garantilemen gerekiyor. C/C++ da program yazmak zaten yeterince zor, bir de böyle gereksiz yükümlülüklere girersen yazdığın kod bugdan geçilmez ve hem seni hem de senden sonra o kodla uğraşacak vatandaşı perişan eder.

C++:
// birsey yap ustte tanimli ve loop fonksiyonu bunu goruyor

static void birsey_yap(int a)
{
    // birseyler yap
}

void loop()
{
    birsey_yap(3);
}

C++:
// birsey yap altta tanimli o yuzden loop bu fonksiyonu normalde goremiyor
// Bu durumda ustte fonksiyonun prototipini koymamiz gerekiyor.

void birsey_yap(int a);

void loop()
{
    birsey_yap(3);
}

static void birsey_yap(int a)
{
    // birseyler yap
}
 
Yalnız kod yazarken şuna dikkat etmek lazım: Sadece aynı kaynak kodunda çağrılan bir fonksiyonu yukarıya koyarsan, aşağıdaki fonksiyonlar onu "görür" ve kullanabilir. Ama çağrılan fonksiyonu senin yaptığın gibi en aşağı koyarsan, o zaman derleyici o fonksiyon için yukarı bir prototip koymanı ister.

Yani fonksiyonu alta koyarsan, o fonksiyonun prototipini de üste koyma yükümlülüğüne giriyorsun. Fonksiyonu değiştirecek olursan ileride, onun prototipini de değiştirmeyi unutmaman gerekiyor. Ayrıca prototipin de TAM OLARAK fonksiyon ile birebir örtüştüğünü garantilemen gerekiyor. C/C++ da program yazmak zaten yeterince zor, bir de böyle gereksiz yükümlülüklere girersen yazdığın kod bugdan geçilmez ve hem seni hem de senden sonra o kodla uğraşacak vatandaşı perişan eder.

C++:
// birsey yap ustte tanimli ve loop fonksiyonu bunu goruyor

static void birsey_yap(int a)
{
    // birseyler yap
}

void loop()
{
    birsey_yap(3);
}

C++:
// birsey yap altta tanimli o yuzden loop bu fonksiyonu normalde goremiyor
// Bu durumda ustte fonksiyonun prototipini koymamiz gerekiyor.

void birsey_yap(int a);

void loop()
{
    birsey_yap(3);
}

static void birsey_yap(int a)
{
    // birseyler yap
}
Anladım abi.
 
O kütüphane stepleri delay ile atıyor ise kodun yavaş çalışması normal.

Stepmotor sürmek için sanırım en iyi kütüphane accelstepper

Bu kütüphaneyi kullan sorun kalmayacaktır
 

Forum istatistikleri

Konular
5,815
Mesajlar
99,291
Üyeler
2,476
Son üye
mrmandos

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Back
Top