struct CO2Daten {
int co2Value; // CO2-Wert
int threshold; // Schwellenwert
int hysteresis; // Hysterese
bool isWarning; // Warnstatus
};
// Struktur für die LED-Steuerung
struct LEDControl {
int pin; // LED-Pin
bool isOn; // Status der LED
};
// Timer
unsigned long previousMillisCO2 = 0;
const long intervalCO2 = 1000;
// Initialisierung der CO2-Überwachung und LED-Steuerung
CO2Daten co2Daten = {0, 1000, 200, false};
LEDControl ledControl = {13, false};
void setup() {
// Serielle Schnittstelle starten
Serial.begin(9600);
// LED-Pin als Ausgang konfigurieren
pinMode(ledControl.pin, OUTPUT);
}
void loop() {
// CO2-Wert simulieren (ersetzen Sie dies durch den echten CO2-Sensor)
co2Daten.co2Value = analogRead(A0) * 2; // Beispiel: Verwendung eines Potentiometers
// CO2-Wert überwachen und LED-Status aktualisieren
monitorCO2();
// CO2-Wert alle 1 Sekunde über die Serielle Schnittstelle ausgeben
if (millis() - previousMillisCO2 >= intervalCO2) {
printCO2Value();
previousMillisCO2 = millis();
}
}
void monitorCO2() {
if (co2Daten.co2Value > co2Daten.threshold + co2Daten.hysteresis) {
// CO2-Wert überschreitet den Schwellenwert + Hysterese
if (!co2Daten.isWarning) {
// Warnleuchte einschalten
ledControl.isOn = true;
digitalWrite(ledControl.pin, HIGH);
co2Daten.isWarning = true;
}
} else if (co2Daten.co2Value < co2Daten.threshold - co2Daten.hysteresis) {
// CO2-Wert unterschreitet den Schwellenwert - Hysterese
if (co2Daten.isWarning) {
// Warnleuchte ausschalten
ledControl.isOn = false;
digitalWrite(ledControl.pin, LOW);
co2Daten.isWarning = false;
}
}
}
void printCO2Value() {
// CO2-Wert über die Serielle Schnittstelle ausgeben
Serial.print("Co2[ppm]: ");
Serial.println(co2Daten.co2Value);
}