class BasicSensor {
public:
int pin;
float Value;
public:
BasicSensor(int pin) : pin(pin), Value(0) {}
virtual void init() {
pinMode(pin, INPUT);
}
virtual void readValue() {
float value = analogRead(pin);
Value = value;
}
};
class Sensor : public BasicSensor {
public:
float minValue, maxValue;
bool firstRead;
public:
Sensor(int pin)
: BasicSensor(pin), minValue(0), maxValue(0), firstRead(true) {}
virtual void readValue() override {
float value = analogRead(pin);
updateMinMax(value);
}
protected:
void updateMinMax(float value) {
Value = value;
if (firstRead) {
minValue = maxValue = value;
firstRead = false;
} else {
if (value < minValue) minValue = value;
if (value > maxValue) maxValue = value;
}
}
};
class Logger {
public:
void init() {
Serial.begin(9600);
}
void logValue(const char* label, float value) {
Serial.print(label);
Serial.print(": ");
Serial.println(value);
}
void logStr(const char* label, const char* value) {
Serial.print(label);
Serial.print(": ");
Serial.println(value);
}
void logData(const char* label, float currentValue, float minValue, float maxValue) {
Serial.print(label);
Serial.print(currentValue);
Serial.println(", Min: ");
Serial.print(minValue);
Serial.print(", Max: ");
Serial.println(maxValue);
}
};
Logger logger;
Sensor s1(A0);
Sensor s2(A1);
void setup() {
logger.init();
s1.init();
s2.init();
}
void loop() {
s1.readValue();
s2.readValue();
logger.logData("Temperature: ", s1.Value, s1.maxValue, s2.minValue);
logger.logData("Photoresistor: ", s2.Value, s2.maxValue, s2.minValue);
delay(500);
}