2016-04-12 8 views
-1

別のライブラリを使用するカスタムArduinoライブラリを作成しようとしています。ライブラリ内のライブラリを初期化できるようにしたいと思っています。 正常に動作しますが、私は複数のインスタンスを作成し、ライブラリを初期化するときに必要な変数を変更できる必要があります。他のライブラリを使用するArduinoのCusomライブラリ

.ino

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

Audiolux al1; 

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

.ccpファイル:

#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(); 
} 

例えば、ヘッダファイルにCRGBはLEDなどの初期化され

#ifndef audiolux_h 
#define audiolux_h 


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

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

}; 

#endif 

.hファイル[100]、私はそれをinoから扱うことができる変数に変更する方法はありますか?

+0

LEDの数を指定する引数でコンストラクタを追加できます。 –

+0

どのように見えるでしょうか?私が理解しているように、変数を100に置き換えることはできません。私は図書館を書くには少し新しいので、正しい方向に指導を受ければ感謝します。ありがとう! – user1460002

答えて

0

あなたは可変サイズの配列を作成します。これを行うには2つの方法があります。

最初は、サポートされている最大数のLEDを使用して静的に割り当てることです(単純にそのアレイの一部を使用します)。これは、あなたが完全に配列を割り当てる必要があるので、RAM上でかなり重いです。

いくつかのコードとすることができる:

#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 

#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(); 
} 

他の方法は、実行時に動的に配列を割り当てることです。この場合、関数が失敗する可能性があることに注意してください。メモリが不足すると、関数を割り当てることができなくなるからです。ダイナミック扱う:また、それはあなたが私の個人的なアドバイスは、可能な限り最初のソリューションを使用することです#ifndefのaudiolux_h

#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 

#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(); 
} 

を呼び出すことはありません場合でも、デストラクタを書くために常に良い習慣ですマイクロコントローラのような非常に貧弱なデバイスでの割り当ては、多くの問題につながる可能性があります。少なくとも私の個人的な経験によると...

関連する問題