質問: analogRead(PulseSensorPurplePin); Serial.println(Signal); if(Signal > Threshold){ //digitalWrite(LED13,HIGH); digitalWrite(in1Pin,LOW); } else { //digitalWrite(LED13,LOW); digitalWrite(in1Pin,HIGH); } delay(10); } ``` ### 試したこと ### 補足情報(言語/FW/ツール等のバージョンなど) より詳細な情報
回答: * 計測開始~終了は、`millis()`で取得できる時刻値で判定する。 * 計測中、計測値および計測回数を積算する。 * 計測終了時、積算された計測値を計測回数で割る。 という流れでよいかと思います。 計測値および回数がオーバーフローしないように注意が必要です。 以下、概念コードです。 ``` unsigned long start_time = 0; // 計測開始時刻 unsigned long check_cnt = 0; // 計測回数 float check_val = 0; // 積算された計測値 int state = 0; // 動作状態 loop(){ if( state == 0){ // 計測開始待ち if( isStart()){ // 何らかの計測開始アクションを取得 start_time = millis(); check_cnt = 0; check_val = 0; state = 1; } } else if ( state == 1){ // 計測中 unsigned long cur_time = millis(); if( (cur_time - start_time) <= 5000){ check_val += getVal(); // 値を取得し積算 check_cnt++; } else{ state = 2; } } else if( state == 2){ // 計測終了 int avg_val = check_val / check_cnt; state = 0; } } ```