const int ledPin1 = 11;
const int buttonPin1 = 8; // schwarzer Tee
const int buttonPin2 = 6; // grüner Tee
const int buttonPin3 = 4; // Kräuter- und Früchtetee
const int buttonPinTasse = 12; // hier steht die Tasse drauf
const long time1 = 6000; // 3 Minuten für schwarzen Tee
const long time2 = 240000; // 4 Minuten für grünen Tee
const long time3 = 480000; // 8 Minuten für Kräuter- und Früchtetee
int myState = 0;
long myTimeout = 0;
long myStartTime = 0;
void setup() {
pinMode(buttonPinTasse, INPUT_PULLUP);
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
switch (myState) {
case 0: // keine Tasse auf dem Untersetzer
analogWrite(ledPin1, 0);
if (digitalRead(buttonPinTasse) == 0) myState = 1; // Tasse draufgestellt
break;
case 1: // Tasse auf Untersetzer, warte auf Eingabe
blinkSlow(); // LED Ausgabe langsames Blinken
if (digitalRead(buttonPin1) == 0) {
blinkIndikator(1);
myState = 2;
myTimeout = time1;
myStartTime = millis();
Serial.print("Zeit 1");
Serial.print(time1);
//myTimeout
}
if (digitalRead(buttonPin2) == 0) {
blinkIndikator(2);
myState = 2;
myTimeout = time2;
myStartTime = millis();
Serial.print("Zeit 2");
Serial.print(time2);
}
if (digitalRead(buttonPin3) == 0) {
blinkIndikator(3);
myState = 2;
myTimeout = time3;
myStartTime = millis();
Serial.print("Zeit 3");
}
break;
case 2: // Ziehzeit läuft
// Reset, wenn alle drei Buttons gleichzeitig gedrückt werden
if ((digitalRead(buttonPin1) == 0) && (digitalRead(buttonPin1) == 0) && (digitalRead(buttonPin1) == 0)) {
resetIndication(); // LED Ausgabe langes Leuchten
myState = 0;
}
breath(); // LED Ausgabe langsames faden
Serial.println(millis() - myStartTime);
if (millis() - myStartTime > myTimeout) myState = 3; // dann ist der Tee fertig :-)
break;
case 3: // Ziehzeit abgelaufen
blinkFast();
if (digitalRead(buttonPinTasse) == 1) myState = 0;
Serial.println("Zeit abgelaufen");
break;
}
}
void blinkFast(){
if (millis() % 200 > 100) analogWrite(ledPin1, 155);
else analogWrite(ledPin1, 0);
}
void resetIndication() {
analogWrite(ledPin1, 255);
delay(3000);
analogWrite(ledPin1, 0);
delay(10);
}
void blinkSlow() {
if (millis() % 2000 > 1000) analogWrite(ledPin1, 255);
else analogWrite(ledPin1, 0);
}
void breath() {
int myValue = (millis() / 10) % 1020;
if (myValue < 512) analogWrite(ledPin1, (myValue/2));
else analogWrite(ledPin1, 255 - ((myValue/2) - 255));
}
void blinkIndikator(int wiederholungen) {
analogWrite(ledPin1, 0);
delay(500);
for (int i=0; i<wiederholungen; i++){
analogWrite(ledPin1, 255);
delay(80);
analogWrite(ledPin1, 0);
delay(80);
}
};