1.はじめに
Arduinoの関数に max がありますが、比較する要素は2個だけで、3個以上の要素の最大値を求めようとするとエラーになります。でもどうしても3個以上の要素の最大値を求めたいときにはどうするか?それがここの主題です。
2.具体的には
(1)接続例
arduino | 抵抗(10KΩ程度) | フォトレジスタ |
5v | NO1,NO2,NO3のフォトレジスタの片方 | |
A1 | NO1の片方 | NO1のフォトレジスタのもう一方 |
A2 | NO2の片方 | NO2のフォトレジスタのもう一方 |
A3 | NO3の片方 | NO3のフォトレジスタのもう一方 |
GND | NO1,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 関数の制限も回避できる。
コメント