Hallo,
ich möchte ein Arduino Nano in meinen Kaffeeautomaten setzen, sodass dieser dann nicht nur Kaffeetassen befüllen kann, sondern auch ganze Kaffeekannen. Dazu soll es für jede Tasse (bis zu 8), die in die Kanne gefüllt werden soll, eine LED geben.
Über einen Button wählt man die Anzahl der Tassen aus - die Auswahl wird entsprechend an den LED´s angezeigt. Wählt man jetzt für eine Zeit X nichts weiter aus, so soll ein Relais zwei mal angezogen werden. Dieses Relais "drückt" dann einfach die Kaffeetaste am Kaffeeautomat, wartet einen definierten Zeitraum X ab, und drückt dann je nach Auswahl nochmal.
In meinem Sketch klappt das auch alles schon wie gewünscht.
Manchmal springt der Code aber schon bei der Auswahl in die Funktion kaffeekochen.
Über einen Hinweis warum, wäre ich sehr dankbar
int led1 = 2; //pin led1
int led2 = 3; //pin led2
int led3 = 4; //pin led3
int led4 = 5; //pin led4
int led5 = 6; //pin led5
int led6 = 7; //pin led6
int led7 = 8; //pin led7
int led8 = 9; //pin led8
double startzeit = 136; //Laufzeit Maschinen-Start in s
double auswahlzeit = 4; //Auswahlzeit für Tassenwahl per Taster in s
double bruehzeit = 89; //Brühzeit für eine Tasse in s
const int button1 = 12; //pin für button
int rel1 = 11; //pin für relais
double laufzeit = 0;
int zaehler = 99;
int tmp2 = 0;
double tmp = 0;
void setup() {
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
pinMode(led8, OUTPUT);
pinMode(rel1, OUTPUT);
pinMode(button1, INPUT);
Serial.begin(9600);
}
void loop() {
Serial.println(zaehler);
delay(200);
if (zaehler == 99){ //Maschinenstart LED Startsequenz ausführen
zaehler = 0;
tmp = laufzeit + startzeit * 1000;
while ((digitalRead(button1) == LOW) && laufzeit < tmp) {
laufzeit=millis();
digitalWrite(led1, HIGH);
delay(80);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(80);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
...
}
}
if (digitalRead(button1) == HIGH){
zaehler ++;
delay(200);
}
if (zaehler > 8){ //Anzeige zurücksetzen
zaehler = 0;
digitalWrite(led8, LOW);
delay(80);
digitalWrite(led7, LOW);
delay(80);
digitalWrite(led6, LOW);
delay(80);
digitalWrite(led5, LOW);
delay(80);
digitalWrite(led4, LOW);
delay(80);
digitalWrite(led3, LOW);
delay(80);
digitalWrite(led2, LOW);
delay(80);
digitalWrite(led1, LOW);
delay(80);
}
if (zaehler == 1){
digitalWrite(led1, HIGH);
tmp = laufzeit + auswahlzeit * 1000;
tmp2 = 0;
while ((digitalRead(button1) == LOW) && laufzeit < tmp ){
laufzeit=millis();
digitalWrite(led1, HIGH);
if (digitalRead(button1) == HIGH){
zaehler = 2;
Serial.println("Zähler++"); }
delay(80);
tmp2 = 1;
if (digitalRead(button1) == HIGH){
zaehler = 2;
}
}
if (zaehler == 1 && tmp2 == 1)
kaffeekochen(led1);
}
if (zaehler == 2){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
Serial.print("laufzeit vor rechnung");
Serial.println(laufzeit);
tmp = laufzeit + auswahlzeit * 1000;
Serial.print("tmp nach rechnung");
Serial.println(tmp);
Serial.print("auswahlzeit nach rechnung");
Serial.println(auswahlzeit);
tmp2 = 0;
while ((digitalRead(button1) == LOW) && laufzeit < tmp ){
laufzeit=millis();
Serial.print("laufzeit");
Serial.println(laufzeit);
digitalWrite(led2, HIGH);
if (digitalRead(button1) == HIGH){
zaehler = 3;
Serial.println("Zähler++"); }
delay(80);
tmp2 = 1;
if (digitalRead(button1) == HIGH){
zaehler = 3;
}
}
if (zaehler == 2 && tmp2 == 1)
kaffeekochen(led2);
}
if (zaehler == 3){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
Serial.print("laufzeit vor rechnung");
Serial.println(laufzeit);
tmp = laufzeit + auswahlzeit * 1000;
tmp2 = 0;
while ((digitalRead(button1) == LOW) && laufzeit < tmp ){
laufzeit=millis();
digitalWrite(led3, HIGH);
if (digitalRead(button1) == HIGH){
zaehler = 4;
}
delay(80);
tmp2 = 1;
if (digitalRead(button1) == HIGH){
zaehler = 4;
}
}
if (zaehler == 3 && tmp2 == 1)
kaffeekochen(led3);
}
if (zaehler == 4){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
tmp = laufzeit + auswahlzeit * 1000;
tmp2 = 0;
while ((digitalRead(button1) == LOW) && laufzeit < tmp ){
laufzeit=millis();
digitalWrite(led4, HIGH);
if (digitalRead(button1) == HIGH){
zaehler = 5;
Serial.println("Zähler++"); }
delay(80);
tmp2 = 1;
if (digitalRead(button1) == HIGH){
zaehler = 5;
}
}
if (zaehler == 4 && tmp2 == 1)
kaffeekochen(led4);
}
if (zaehler == 5){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
tmp = laufzeit + auswahlzeit * 1000;
tmp2 = 0;
while ((digitalRead(button1) == LOW) && laufzeit < tmp ){
laufzeit=millis();
digitalWrite(led5, HIGH);
if (digitalRead(button1) == HIGH){
zaehler = 6;
}
delay(80);
tmp2 = 1;
if (digitalRead(button1) == HIGH){
zaehler = 6;
}
}
if (zaehler == 5 && tmp2 == 1)
kaffeekochen(led5);
}
if (zaehler == 6){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
Serial.print("laufzeit vor rechnung");
Serial.println(laufzeit);
tmp = laufzeit + auswahlzeit * 1000;
tmp2 = 0;
while ((digitalRead(button1) == LOW) && laufzeit < tmp ){
laufzeit=millis();
digitalWrite(led6, HIGH);
if (digitalRead(button1) == HIGH){
zaehler = 7;
Serial.println("Zähler++"); }
delay(80);
tmp2 = 1;
if (digitalRead(button1) == HIGH){
zaehler = 7;
}
}
if (zaehler == 6 && tmp2 == 1)
kaffeekochen(led6);
}
if (zaehler == 7){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
tmp = laufzeit + auswahlzeit * 1000;
tmp2 = 0;
while ((digitalRead(button1) == LOW) && laufzeit < tmp ){
laufzeit=millis();
digitalWrite(led7, HIGH);
if (digitalRead(button1) == HIGH){
zaehler = 8;
}
delay(80);
tmp2 = 1;
if (digitalRead(button1) == HIGH){
zaehler = 8;
}
}
if (zaehler == 7 && tmp2 == 1)
kaffeekochen(led7);
}
if (zaehler == 8){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
digitalWrite(led6, HIGH);
digitalWrite(led7, HIGH);
digitalWrite(led8, HIGH);
tmp = laufzeit + auswahlzeit * 1000;
tmp2 = 0;
while ((digitalRead(button1) == LOW) && laufzeit < tmp ){
laufzeit=millis();
digitalWrite(led8, HIGH);
if (digitalRead(button1) == HIGH){
zaehler = 9;
Serial.println("Zähler++"); }
delay(80);
tmp2 = 1;
if (digitalRead(button1) == HIGH){
zaehler = 9;
}
}
if (zaehler == 8 && tmp2 == 1)
kaffeekochen(led8);
}
} //EndLoop
int kaffeekochen(char lednr) {
digitalWrite(rel1, HIGH);
delay(280);
digitalWrite(rel1, LOW);
delay(280);
digitalWrite(rel1, HIGH);
delay(280);
digitalWrite(rel1, LOW);
zaehler = zaehler - 1;
tmp = laufzeit + bruehzeit * 1000;
while ((digitalRead(button1) == LOW) && laufzeit < tmp ){
laufzeit=millis();
digitalWrite(lednr, LOW);
if (digitalRead(button1) == HIGH){
zaehler = 9;
}
delay(80);
if (digitalRead(button1) == HIGH){
zaehler = 9;}
digitalWrite(lednr, HIGH);
delay(80);
tmp2 = 1;
if (digitalRead(button1) == HIGH){
zaehler = 9;}
}
Serial.print("zaehler in kaffeekochen am ende:");
digitalWrite(lednr, LOW);
return 0;
exit;
}