PythonやNodejs等々の言語になれてしまい、Arduino言語のプログラミングが歯がゆいと感じる今日このごろです
歯がゆいと感じる一つに配列の連結があります
pythonとかとかの言語の配列連結は簡単ですがArduinoではそうはいきません(ベースがC++だから仕方ないね)
色々調べて個人的やりやすいなーと思ったものができたのでメモ程度にまとめておきます
私が行った方法はでっかい配列を一つ用意しておきそのなかで配列Aと配列Bを連結させる方法です
色々やり方はありますがこれがシンプルでわかりやすかったです
他にもポインタを使ってやる方法がありますが簡単な実装方法にしました
プログラム
#define GET_ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
uint8_t resultArray[14];
void ArrayLink(uint8_t aray1[], int index1, uint8_t aray2[], int index2){
//array1
for(int i=0; i<index1; i++){
resultArray[i] = aray1[i];
}
//array2
for(int i=0; i<index2; i++){
resultArray[index1 + i] = aray2[i];
}
}
void setup(){
Serial.begin(115200);
uint8_t aray1[] = {1,2,3,4,5,6,7};
uint8_t aray2[] = {8,9,10,11,12,13,14};
ArrayLink(aray1, GET_ARRAY_SIZE(aray1), aray2, GET_ARRAY_SIZE(aray2));
for(int i=0; i<GET_ARRAY_SIZE(resultArray); i++){
Serial.println(resultArray[i]);
}
}
void loop() {
}
グローバル変数にて連結した結果を格納する配列を用意しておきます
そしてArrayLinkという関数でfor文で連結してます
ArrayLinkを呼ぶ引数として、“arrayA,arrayAの長さ,arrayB,arrayBの長さ”としました
こうすることで結合前の配列を可変長で持ってくることができます
マクロで定義している GET_ARRAY_SIZEがとても便利で配列の長さを持ってきてくれます
私が日頃書くプログラムにも記述することが多いです