// https://wokwi.com/projects/410262429268493313
#include <RunningAverage.h>
#define pin_SET 18
long Timer_Cycle = 0;
const long Period_Cycle = 30000;
const long at_Cycle_Warmup = 7000;
const long at_Cycle_Measure = 10000;
char* mode = "measure";
const bool cyclic = false;
long y = 0;
int yMean;
// instantiate object for running values
const byte RVn = 10;
RunningAverage RV_long(RVn); // long period running values (for global average and min/max)
void setup() {
Serial.begin(115200);
pinMode(pin_SET, OUTPUT);
if (cyclic) {
digitalWrite(pin_SET, LOW);
} else {
digitalWrite(pin_SET, HIGH);
}
}
void loop() {
if (cyclic) {
if ((Timer_Cycle == 0) or (millis() > Timer_Cycle + Period_Cycle)) {
Timer_Cycle = millis();
mode = "sleep";
Serial.println("set mode to 'sleep'");
digitalWrite(pin_SET, LOW);
}
if ((mode == "sleep") and (millis() > Timer_Cycle + at_Cycle_Warmup)) {
mode = "warmup";
Serial.println("set mode to 'warmup'");
digitalWrite(pin_SET, HIGH);
}
if ((mode=="warmup") and (millis() > Timer_Cycle + at_Cycle_Measure)) {
mode = "measure";
Serial.println("set mode to 'measure'");
}
}
if ((mode=="measure") or (cyclic == false)) {
// explicitly start with clean running values
RV_long.clear();
for (int i = 0; i < RVn; i++) {
y = y + 1;
RV_long.addValue(y);
Serial.print(".");
delay(500);
}
yMean = round(RV_long.getAverage());
Serial.println(yMean);
} else {
delay(1000);
}
Serial.println(mode);
}