(Arduino)3個以上の最大値を求めるには

1.はじめに

Arduinoの関数に max がありますが、比較する要素は2個だけで、3個以上の要素の最大値を求めようとするとエラーになります。でもどうしても3個以上の要素の最大値を求めたいときにはどうするか?それがここの主題です。

2.具体的には

(1)接続例

arduino抵抗(10KΩ程度)フォトレジスタ
5vNO1,NO2,NO3のフォトレジスタの片方
A1NO1の片方NO1のフォトレジスタのもう一方
A2NO2の片方NO2のフォトレジスタのもう一方
A3NO3の片方NO3のフォトレジスタのもう一方
GNDNO1,NO2,NO3のもう一方
接続例

(2)完成したコード

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:
  int val1 = analogRead(1);
  int val2 = analogRead(2);
  int val3 = analogRead(3);
  int val[] = {val1,val2,val3};
  int i,m;
  m = 0;  // max
  for ( i = 0; i < 3; i = i + 1){
    Serial.print(val[i]);
    Serial.print(",");
 
   if ( m < val[i]) {
      m = val [i];
    }
  }

  Serial.print("\t");
  Serial.print("MaxValue = ");
  Serial.println(m);

  delay(10000);  // per 10 seconds
}

(3)ちょっと解説

第1段落は、各フォトレジスタが持つアナログ数値を読み込み、その値を配列 val に入れます。

第2段落(黄色の文字色)は、各配列の値を1個ずつ取り出し、 読み込んだ値が現在持っている値とを比較し、読み込んだ値が大きい場合は、それを 変数 m に保存し、第2巡目に入ります。だから 変数 m には常に一番大きい値が入っていることになります。

第3段落では、それをシリアル表示します。

参考 : https://www.cc.kyoto-su.ac.jp/~yamada/programming/array.html

3.実行結果

実行結果

このやり方であれば、比較する値が多数であっても平気だし、min 関数の制限も回避できる。

コメント

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