Back to tech

Arduinoで配列を関数の引数として扱う

2 min read
Table of Contents
forum.arduino.cc
forum.arduino.cc

旧プログラム

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の更新でできるようになったからでしょうか?

参考

  1. http://forum.arduino.cc/index.php?topic=44451.0
  2. http://garretlab.web.fc2.com/arduino/reverse_lookup/index.html