OOP?
Basteln wir uns ein
"steuere zwei Leds nach Temperatur und Feuchtigkeit Grenzen" Objekt und lassen es laufen.
Ungetestet, ich wollte keinen DHT rauskramen.
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHT22TYPE DHT22
class LedsFuerTempUndFeuchtigkeit {
uint8_t tempLedPin;
int16_t tempGrenze;
uint8_t feuchtLedPin;
int16_t feuchtGrenze;
DHT dht22;
public:
LedsFuerTempUndFeuchtigkeit(uint8_t tempLedPin_, int16_t tempGrenze_, uint8_t feuchtLedPin_, int16_t feuchtGrenze_, uint8_t dht22Pin_) :
tempLedPin(tempLedPin_), tempGrenze(tempGrenze_), feuchtLedPin(feuchtLedPin_), feuchtGrenze(feuchtGrenze_), dht22(dht22Pin_, DHT22TYPE)
{}
void begin() {
pinMode(tempLedPin, OUTPUT);
pinMode(feuchtLedPin, OUTPUT);
dht22.begin();
}
void run() {
int feuchtigkeit = (int) dht22.readHumidity();
int temperatur = (int) dht22.readTemperature();
digitalWrite(tempLedPin, temperatur >= tempGrenze);
digitalWrite(feuchtLedPin, feuchtigkeit >= feuchtGrenze);
}
} controller(4, 15, 2, 70, 5);
void setup() {
controller.begin();
}
void loop() {
controller.run();
}
Oder noch weiter in Objekte zerlegt
#include <Adafruit_Sensor.h>
#include <DHT.h>
#define DHT22TYPE DHT22
class AnBeiGroesser {
uint8_t ledPin;
int16_t grenze;
public:
AnBeiGroesser(uint8_t ledPin_, int16_t grenze_) :
ledPin(ledPin_), grenze(grenze_) {}
void begin() {
pinMode(ledPin, OUTPUT);
}
void run(int16_t aktuell) {
digitalWrite(ledPin, aktuell >= grenze);
}
};
class LedsFuerTempUndFeuchtigkeit {
AnBeiGroesser temperatur;
AnBeiGroesser feuchte;
DHT dht22;
public:
LedsFuerTempUndFeuchtigkeit(uint8_t tempLedPin_, int16_t tempGrenze_, uint8_t feuchtLedPin_, int16_t feuchtGrenze_, uint8_t dht22Pin_) :
temperatur(tempLedPin_, tempGrenze_), feuchte(feuchtLedPin_, feuchtGrenze_), dht22(dht22Pin_, DHT22TYPE)
{}
void begin() {
temperatur.begin();
feuchte.begin();
dht22.begin();
}
void run() {
feuchte.run(dht22.readHumidity());
temperatur.run(dht22.readTemperature());
}
} controller(4, 15, 2, 70, 5);
void setup() {
controller.begin();
}
void loop() {
controller.run();
}