Hallo alle zusammen,
also erstmal vorweg ich bin ganz neu in der Programmierung unterwegs!
Aufgrund einer defekten Steuerung für die Tankspülung von meinen Eltern (Landwirtschaft), habe ich mich in einer einfachen Relais Steuerung mittels Arduino versucht. Die Steuerung funktioniert auch soweit bis auf das der Arduino sich selten jedoch ab und zu aufhängt.
Ich würde mich freuen wenn mal Jemand anders sich den Quellcode anschaut und mich auf Programmierfehler aufmerksam macht.
PS: Den Plan für die Steuerung lege ich nach, jedoch sollen lediglich Relais geschaltet werden.
Vielleicht könnt ihr mir weiterhelfen.
Lieben Gruß aus Ostfriesland
Steffen
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
//Relais 1 ist an Digital out 2 angeschlossen usw.
boolean relais_1=2;
boolean relais_2=3;
boolean relais_3=4;
boolean relais_4=5;
boolean relais_5=6;
boolean relais_6=7;
boolean relais_7=8;
boolean relais_8=9;
const boolean buttonStart=11;
boolean buttonStateStart=0;
void setup()
{
lcd.init();
// initialize the digital pin as an output.
pinMode(relais_1, OUTPUT); //ablass Ventil
pinMode(relais_2, OUTPUT); // Kaltes Wasser Schütz
pinMode(relais_3, OUTPUT); // Reinigungspumpe
pinMode(relais_4, OUTPUT); //Warm Wasser vorspülen
pinMode(relais_5, OUTPUT); // Warmes Wasser
pinMode(relais_6, OUTPUT); //reserve
pinMode(relais_7, OUTPUT); //reserve
pinMode(relais_8, OUTPUT); //reserve
pinMode(buttonStart, INPUT);
}
void loop()
{
delay(1000);
buttonStateStart = digitalRead(buttonStart);
while(buttonStateStart==LOW){
lcd.setCursor(0,0);
lcd.print("Zum Tank spuelen");
lcd.setCursor(0,1);
lcd.print("Start Druecken..");
buttonStateStart=digitalRead(buttonStart);
//solange start gleich 0 ist, bleibt er in der Schleife
}//wenn er auf HIGH kommt wird das programm abgearbeitet
//Display ini
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Tankspuelung in");
lcd.setCursor(0,1);
lcd.print("in 5 Sekunden");
delay(1000);
lcd.setCursor(0,1);
lcd.print("in 4 Sekunden");
delay(1000);
lcd.setCursor(0,1);
lcd.print("in 3 Sekunden");
delay(1000);
lcd.setCursor(0,1);
lcd.print("in 2 Sekunden");
delay(1000);
lcd.setCursor(0,1);
lcd.print("in 1 Sekunden");
delay(1000);
lcd.clear();
//Ablass Ventil
lcd.setCursor(0,0);
lcd.print("Ablass Ventil");
lcd.setCursor(0,1);
lcd.print("Offen->20Sek");
digitalWrite(relais_1, HIGH); //Relais 1 Ablass ON
delay(20000); //20 Sekunden
digitalWrite(relais_1, LOW); //Relais 1 Ablass OFF
//Ablass ende
//Kaltes Wasser+Reinigungspumpe
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Kaltes Wasser");
digitalWrite(relais_2, HIGH); //Relais 2 Kaltes Wasser ziehen ON
delay(60000);
lcd.setCursor(0,1);
lcd.print("Reinigungspumpe");
digitalWrite(relais_3, HIGH); //Relais 3 Reinigungspumpe ON
delay(90000);
digitalWrite(relais_2, LOW); //Relais 2 Kaltes Wasser ziehen OFF
digitalWrite(relais_3, LOW); //Relais 3 Reinigungspumpe OFF
//Kaltes Wasser+Reinigungspumpe ende
//Ersten 5 Minuten Ende
//Ablass Ventil
lcd.setCursor(0,0);
lcd.print("Ablass Ventil");
lcd.setCursor(0,1);
lcd.print(" 1/6");
digitalWrite(relais_1, HIGH); //Relais 1 Ablass ON
delay(120000); //2 Minuten
digitalWrite(relais_1, LOW); //Relais 1 Ablass OFF
//Ablass ende
//Warm Wasser vorspuelen
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Warmwasser Vorsp");
digitalWrite(relais_4, HIGH); //Relais 4 Warmwasser Vorspuelen ON
delay(120000);
lcd.setCursor(0,1);
lcd.print("Reinigungspumpe");
digitalWrite(relais_3, HIGH); //Relais 3 Reinigungspumpe ON
delay(30000); //30 sekunden warten
digitalWrite(relais_4, LOW); //Relais 4 Warmwasser Vorspuelen OFF
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Reinigungspumpe");
delay(60000);
lcd.setCursor(0,1);
lcd.print("Ablass Ventil");
digitalWrite(relais_1, HIGH); //Relais 1 Ablass ON
delay(60000);
lcd.setCursor(0,0);
lcd.print("Ablass Ventil");
lcd.setCursor(0,1);
lcd.print(" 2/6");
digitalWrite(relais_3, LOW); //Relais 3 Reinigungspumpe OFF
delay(60000);
digitalWrite(relais_1, LOW); //Relais 1 Ablass OFF
//11 1/2 Minuten ENDE
//Warmes Wasser ziehen
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Spuelm+Warmwasse");
digitalWrite(relais_5, HIGH); //Relais 5 Warmes Wasser ziehen ON
delay(120000);
lcd.setCursor(0,1);
lcd.print("Reinigungspumpe");
digitalWrite(relais_3, HIGH); //Relais 3 Reinigungspumpe ON
delay(60000);
digitalWrite(relais_5, LOW); //Relais 5 Warmes Wasser ziehen OFF
lcd.setCursor(0,0);
lcd.print("Reinigungspumpe");
lcd.setCursor(0,1);
lcd.print(" 3/6");
delay(300000);
lcd.setCursor(0,1);
lcd.print(" 4/6");
delay(450000);
//Ablass Ventil
lcd.setCursor(0,0);
lcd.print("Ablass Ventil");
lcd.setCursor(0,1);
lcd.print(" 5/6");
digitalWrite(relais_1, HIGH); //Relais 1 Ablass ON
delay(30000);
digitalWrite(relais_3, LOW); //Relais 3 Reinigungspumpe OFF
lcd.setCursor(0,0);
lcd.print("Ablass Ventil");
lcd.setCursor(0,1);
lcd.print(" 5/6");
delay(90000);
digitalWrite(relais_1, LOW); //Relais 1 Ablass oFF
//30 Minuten Ende
//Kaltes Wasser+Reinigungspumpe
lcd.setCursor(0,0);
lcd.print("Kaltes Wasser");
lcd.setCursor(0,1);
lcd.print(" 5/6");
digitalWrite(relais_2, HIGH); //Relais 2 Kaltes Wasser ziehen ON
delay(100000);
lcd.setCursor(0,1);
lcd.print("Reinigungspumpe");
digitalWrite(relais_3, HIGH); //Relais 3 Reinigungspumpe ON
delay(30000);
digitalWrite(relais_2, LOW); //Relais 2 Kaltes Wasser ziehen OFF
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Reinigungspumpe");
delay(60000);
//Ablass Ventil
lcd.setCursor(0,1);
lcd.print("Ablass Ventil");
digitalWrite(relais_1, HIGH); //Relais 1 Ablass ON
delay(30000);
digitalWrite(relais_3, LOW); //Relais 3 Reinigungspumpe OFF
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ablass Ventil");
delay(60000);
digitalWrite(relais_1, LOW); //Relais 1 Ablass OFF
//35 Minuten Ende
//Kaltes Wasser+Reinigungspumpe
lcd.setCursor(0,0);
lcd.print("Kaltes Wasser");
lcd.setCursor(0,1);
lcd.print(" 6/6");
digitalWrite(relais_2, HIGH); //Relais 2 Kaltes Wasser ziehen ON
delay(100000);
lcd.setCursor(0,1);
lcd.print("Reinigungspumpe");
digitalWrite(relais_3, HIGH); //Relais 3 Reinigungspumpe ON
delay(30000);
digitalWrite(relais_2, LOW); //Relais 2 Kaltes Wasser ziehen OFF
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Reinigungspumpe");
delay(60000);
//Ablass Ventil
lcd.setCursor(0,1);
lcd.print("Ablass Ventil");
digitalWrite(relais_1, HIGH); //Relais 1 Ablass ON
delay(30000);
digitalWrite(relais_3, LOW); //Relais 3 Reinigungspumpe OFF
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Ablass Ventil");
delay(60000);
digitalWrite(relais_1, LOW); //Relais 1 Ablass OFF
lcd.noBacklight();
lcd.setCursor(0,0);
lcd.print("Tankspuelung");
lcd.setCursor(0,1);
lcd.print("abgeschlossen");
delay(60000);
}