int min_val = 999; // センサーの最小値(初期値として999)
int max_val = 0; // センサーの最大値(初期値として0)
int time_prev = 0; // 基準となる時間を格納
int sum_sensor_val = 0; // センサーの値の合計値
int num_sensor_val = 0; // センサーの値の個数
/* 最小値0・最大値255として正規化 */
int normalize(int val) {
return ((val - min_val) / (max_val - min_val)) * 255;
}
void calibrate() {
int sensor_val = analogRead(A0);
// int sensor_val = random(1000);
if (sensor_val < min_val) min_val = sensor_val;
if (sensor_val > max_val) max_val = sensor_val;
}
void setup() {
Serial.begin(9600);
}
void loop() {
unsigned long time_now = millis();
if (time_now <= 5000) { // キャリブレーションは5秒間とする
calibrate();
}
if (time_now > 20000) return; // 計測時間の15s以降は何もしない
if (time_now - time_prev > 200) { // 200ms間隔で
int avg_sensor_val = sum_sensor_val / num_sensor_val; // 区間平均を算出
Serial.println(normalize(avg_sensor_val)); // 正規化して表示
sum_sensor_val = 0; // 初期化
num_sensor_val = 0;
} else {
sum_sensor_val += analogRead(A0);
num_sensor_val++;
}
Serial.print("");
}