Arduinoを使っている時に、void loop()の関数で作った配列を他の関数で使おうとしたらうまく行かず(解決した)、結構悩んだのでメモとして残しておきます。
旧プログラム
void setup() { Serial.begin(9600); } void hoge(int data[], int index){ for(int x=0;x<index; x++){ Serial.println(data[x]); delay(1000); } } void loop() { int data1[] = {10, 20, 30, 40, 50}; hoge(data1, sizeof(data1)/sizeof(data1[0])); //配列と配列の要素数を引数とする }
Arduinoにおいて配列を関数に渡すには配列名と配列の要素数の2つを引数として与えないとうまく行きません
結構悩みました・・・
新プログラム
2018/10/10にてコメントによりポインタのほうがスマートにかけることがわかりました
また、配列を渡しても大丈夫ということがわかりました
//ポインタ型で引数とする void ArrayOutPointer(int *AccData){ for(int i=0; i<sizeof(AccData) + 1; i++){ Serial.println(AccData[i]); } } //配列型を引数とする void ArrayOut(int AccData[]){ for(int i=0; i< sizeof(AccData) + 1; i++){ Serial.println(AccData[i]); } } void setup() { // put your setup code here, to run once: Serial.begin(115200); Serial.println(); Serial.println("Array Test"); int myData[] = {1, 2, 3, 4, 5}; ArrayOutPointer(myData); ArrayOut(myData); } void loop() { // put your main code here, to run repeatedly: }
以前は配列を渡すとできなかったのですが、現時点(2018/10/10)ではできるようになっていました
追えてはないですがArduinoIDEの更新でできるようになったからでしょうか?
コメント
ポインタを使ってアドレスを渡せば
配列をわたせますよ。
コメントありがとうございます
実際にポインタで配列を渡すプログラムを作り試してみました
その結果、ポインタでも渡せることを確認しました
アドバイスありがとうございました
試したプログラムを下記に記載しておきます
===========================================
//ポインタ型で引数とする
void ArrayOutPointer(int *AccData){
for(int i=0; i
[…] Arduino 日本語リファレンス sizeof Arduinoで配列を関数の引数として扱う […]