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種類くらいのコードを持っていると思います...)
どうも!