/*
Forum: https://forum.arduino.cc/t/nachricht-uber-whatsapp/1245021
Wokwi: https://wokwi.com/projects/394537395212181505
*/
const int alarmFeuchte = 500;
const int normalFeuchte = 600;
const byte feuchtePin = A0;
const char * msgTrocken = "Zu trocken!";
const char * msgOk = "Ok";
const unsigned long messIntervall = 100;
const unsigned long meldeIntervall = 10000;
boolean msgTrockenGesendet = false;
boolean msgOkGesendet = false;
unsigned long letzteMeldung = 0;
unsigned long letzteMessung = 0;
int messWert;
void setup() {
Serial.begin(115200);
pinMode(feuchtePin, INPUT);
}
void loop() {
if (millis() - letzteMessung >= messIntervall) {
letzteMessung = millis();
messWert = analogRead(feuchtePin);
switch (messWert) {
case 0 ... alarmFeuchte:
sendeTrocken();
break;
/*
Hier ist eine Lücke zwischen alarmFeuchte und normalFeuchte,
die verhindert, dass man bei kleinen Schwankungen um einen Schwellwert
ständig Nachrichten erhält (Stichwort: Hysterese)
*/
case normalFeuchte ... 1023:
sendeOk();
break;
/*
Bei default kommt man an, wenn man im "Graubereich" zwischen alarmFeuchte
und normalFeuchte ist; beim Start (beide boolsche Variable auf false) senden
wir dann einfach "Ok"
*/
default:
if (!msgTrockenGesendet && !msgOkGesendet) {
sendeOk();
}
break;
}
}
// Zusätzliche Zeitsteuerung
if (millis() - letzteMeldung >= meldeIntervall) {
msgTrockenGesendet = false;
msgOkGesendet = false;
}
}
void sendeOk() {
if (!msgOkGesendet) {
letzteMeldung = millis();
Serial.println(msgOk);
msgOkGesendet = true;
msgTrockenGesendet = false;
}
}
void sendeTrocken() {
if (!msgTrockenGesendet) {
letzteMeldung = millis();
Serial.println(msgTrocken);
msgOkGesendet = false;
msgTrockenGesendet = true;
}
}