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("");
}
$abcdeabcde151015202530fghijfghij