Playground

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

この記事は約3分で読めます。
スポンサーリンク

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

参考

コメント

  1. ポインタを使ってアドレスを渡せば
    配列をわたせますよ。

    • コメントありがとうございます

      実際にポインタで配列を渡すプログラムを作り試してみました
      その結果、ポインタでも渡せることを確認しました

      アドバイスありがとうございました
      試したプログラムを下記に記載しておきます

      ===========================================
      //ポインタ型で引数とする
      void ArrayOutPointer(int *AccData){
      for(int i=0; i

  2. […] Arduino 日本語リファレンス sizeof Arduinoで配列を関数の引数として扱う […]

タイトルとURLをコピーしました