1

C++ の知識をすべて失ったと思います...

私が望むのは、2D unsigned char 配列を適切な (読み取り可能な) 方法で初期化することです: 私のアプローチ:

#define RADIO_ONOFF 0
#define RADIO_P1 1
#define RADIO_P2 2
... 

#define NR_OF_CODES = 5
#define CODE_LENGTH = 10

#1:

unsigned char** codes = new unsigned char*[NR_OF_CODES];
codes[RADIO_ONOFF] = new unsigned char[CODE_LENGTH]{ 9,180,88,11,33,4,0,255,64,191 }; //     does not work
...

#2:

unsigned char ICODES[NR_OF_CODES][CODE_LENGTH];
ICODES[RADIO_ONOFF] = { 9,180,88,11,33,4,0,255,64,191 };  // same as above
...

#3:

class Test {
  private:
    unsigned char data[CODE_LENGTH];

  public:
    Test(unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4, unsigned char a5, unsigned char a6, unsigned char a7, unsigned char a8, unsigned char a9, unsigned char a10);

    unsigned char* getData(void);
};

Test::Test(unsigned char a1, unsigned char a2, unsigned char a3, unsigned char a4, unsigned char a5, unsigned char a6, unsigned char a7, unsigned char a8, unsigned char a9, unsigned char a10) {
  this->data[0] = a1;
  this->data[1] = a2;
  this->data[2] = a3;
  this->data[3] = a4;
  this->data[4] = a5;
  this->data[5] = a6;
  this->data[6] = a7;
  this->data[7] = a8;
  this->data[8] = a9;
  this->data[9] = a10;
}

unsigned char* Test::getData(void) {
  return data;
}

void setup() {

  test[RADIO_ONOFF] = new Test( 9,180,88,11,33,4,0,255,64,191 );
  test[RADIO_P1] = new Test( 9,180,88,11,33,4,0,255,64,192 );
  ...
}

#4

const unsigned char RADIO_ONOFF[]  = { 9,180,88,11,33,4,0,255,64,191 };
const unsigned char RADIO_P1[]     = { 9,180,88,11,33,4,0,255,64,192 };
...

#1 と #2 で表示されるエラー メッセージ: (コードは Arduino 用にコンパイルする必要があり、セットアップ関数が必要です)

関数 'void setup()': revTest:58: エラー: '{' トークンの前にプライマリ式が必要です revTest:58: エラー: `;' が必要です '{' トークンの前

OK - 私の質問:

私にとって - #3 と #4 は素晴らしく、読みやすいです。#3の労力が最も高いですが、switchステートメントで配列を使用したい場合は、これが最速の方法だと思います。- 真実?

#1 と #2 の配列の初期化はこのように動作するはずだと思いました????

非常にArduino特有のもの:

setup() の内部で何を定義する必要があり、setup() の外部で何を定義する必要があるのか​​ わかりません。静的初期化とグローバル外部、動的内部または何?

私は Arduino の PROGMEM について赤字です - この場合、努力する価値はないと思います。私は正しいですよ?(50種類くらいのコードを持っていると思います...)

どうも!

4

2 に答える 2