2016-04-12 24 views
-1

Başka bir kütüphane kullanan özel bir Arduino kütüphanesi oluşturmaya çalışıyorum. Kütüphanemdeki bir kütüphaneyi başlatabilmek istiyorum, şimdiye kadar elde ettiğim şey bu. İyi çalışıyor, ancak birden çok örneği yapabilmem ve kitaplığı başlatırken gerekli olan değişkeni değiştirmem gerekiyor.Diğer kütüphaneleri kullanarak Arduino için Cusom Kütüphanesi

.ino

#include "audiolux.h" 
#include <FastLED.h> 

Audiolux al1; 

void setup() { 
} 
void loop() { 
    al1.runs(); 
} 

.ccp dosyası:

#include "Arduino.h" 
#include "audiolux.h" 
#include <FastLED.h> 

Audiolux::Audiolux() 
{ 
    FastLED.addLeds<NEOPIXEL, 6>(leds, 100); 
} 

void Audiolux::runs(){ 
    leds[2] = CRGB::Red; 
    FastLED.show(); 
} 

Örneğin, başlık dosyasına CRGB LED'ler gibi başlatıldı

#ifndef audiolux_h 
#define audiolux_h 


#include "Arduino.h" 
#include <FastLED.h> 

class Audiolux 
{ 
    public: 
    Audiolux(); 
    void runs(); 
    private: 
    CRGB leds[100]; 

}; 

#endif 

.h dosya [100], ino'dan ele alabileceğim bir değişken olarak nasıl değiştirebilirim?

+0

LED'lerin sayısını belirten bir argümana sahip bir kurucu ekleyebilirsiniz. –

+0

Bu nasıl görünüyor? Anladığım kadarıyla, 100'ü bir değişkenle değiştiremem. Kitaplıkları yazmak için biraz yeniyim, bu yüzden doğru yönde rehberlik edersem minnettar olurum, teşekkürler! – user1460002

cevap

0

Tamam, bu nedenle değişken boyutlu bir dizi oluşturmak istiyorsunuz. Bunu yapmanın iki yolu var.

Bunlardan ilki, azami sayıda desteklenen led kullanarak statik olarak ayırmak (sizin yaptığınız gibi), daha sonra bu dizinin bir kısmını kullanmaktır. Bu, RAM'de oldukça ağır olduğundan, diziyi tamamen ayırmanız gerekecektir.

Bazı kod olabilir:

#ifndef audiolux_h 
#define audiolux_h 

#include "Arduino.h" 
#include <FastLED.h> 

#define MAX_LEDS 100 

class Audiolux 
{ 
    public: 
     Audiolux(uint8_t nLeds); 
     void runs(); 
    private: 
     uint8_t _nLeds; 
     CRGB leds[MAX_LEDS]; 
}; 

#endif 

ve

#include "audiolux.h" 

Audiolux::Audiolux(uint8_t nLeds) 
{ 
    if (nLeds <= MAX_LEDS) 
    { 
     _nLeds = nLeds; 
     FastLED.addLeds<NEOPIXEL, 6>(leds, _nLeds); 
    } 
} 

void Audiolux::runs(){ 
    // If you need to know the length of leds, look for _nLeds 
    leds[2] = CRGB::Red; 
    FastLED.show(); 
} 

diğer bir yöntem çalışma zamanında dinamik dizi tahsis etmektir. Bu durumda fonksiyonun başarısız olabileceğini unutmayın, çünkü hafızanız biterse onu ayıramazsınız. Dinamik uğraşan: Üstelik yıkıcı yazmak için iyi bir alışkanlıktır Eğer

#define audiolux_h 

#include "Arduino.h" 
#include <FastLED.h> 

class Audiolux 
{ 
    public: 
     Audiolux(uint8_t nLeds); 
     ~Audiolux(); 
     void runs(); 
    private: 
     uint8_t _nLeds; 
     CRGB *leds = NULL; 
}; 

#endif 

ve

#include "audiolux.h" 

Audiolux::Audiolux(uint8_t nLeds) 
{ 
    _nLeds = nLeds; 
    leds = new CRGB[_nLeds]; 
    FastLED.addLeds<NEOPIXEL, 6>(leds, _nLeds); 
} 

Audiolux::~Audiolux() 
{ 
    delete[] leds; 
} 

void Audiolux::runs(){ 
    leds[2] = CRGB::Red; 
    FastLED.show(); 
} 

Benim kişisel tavsiye audiolux_h #ifndef çağrı asla bile, her zaman var mümkünse ilk çözümü kullanmaktır Mikrodenetleyiciler gibi çok zayıf cihazlarla tahsis, çok fazla sıkıntıya yol açabilir. En azından kişisel deneyimime göre ...

İlgili konular