Hallo,
ich bin noch frisch in der Arduino Welt und wollte eine simple Steuerung für mein Aquarium auf Basis eines Uno´s aufbauen.
Gesagt getan. Relaiskarte gelötet, Pumpen eingebau, Display eingebaut bis hierher kein Problem.
Dann gings ans Coden soweit funktionier auch alles zufriedenstellend, allerdings klappt die "Zeitschaltuhr" nicht.
Ich möchte 3 Ausgänge über jeweils 2 Zeiten, also z.b. 8.00 Uhr bis 12.00 Uhr und 14.00 Uhr bis 21.00 Uhr schalten.
Und ich bekomm es einfach nicht hin...das Ding macht was es will.
Mal funktionier der Code mal wieder nicht....
Ich häng ihn mal an, ich hoffe einer kann mir helfen.
Schonmal Danke im Vorraus.
#include <Timer.h>
#include <DS1307.h>
#include <Wire.h>
#include <LiquidCrystal.h>
int P1 = 6; //Pumpe 1 an PIN 6
int P2 = 7; //Pumpe 2 an PIN 7
int S1 = 8; //Licht an PIN 8
int S2 = 13; //Mondlicht an PIN 13
int S3 = 10; //CO² an PIN 10
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int S1_An1 = 800; //Licht an Zeit 1 (Std,Min,Sek)
int S1_Aus1 = 1200; //Licht aus Zeit 1 (Std,Min,Sek)
int S1_An2 = 1400; //Licht an Zeit 2 (Std,Min,Sek)
int S1_Aus2 = 2130; //Licht aus Zeit 2 (Std,Min,Sek)
int S2_An1 = 730; //Mondlicht an Zeit 1 (Std,Min,Sek)
int S2_Aus1 = 800; //Mondlicht aus Zeit 1 (Std,Min,Sek)
int S2_An2 = 2129; //Mondlicht an Zeit 2 (Std,Min,Sek)
int S2_Aus2 = 2330; //Mondicht aus Zeit 2 (Std,Min,Sek)
int S3_An1 = 745; //CO² an Zeit 1 (Std,Min,Sek)
int S3_Aus1 = 1215; //CO² aus Zeit 1 (Std,Min,Sek)
int S3_An2 = 1345; //CO² an Zeit 2 (Std,Min,Sek)
int S3_Aus2 = 2145; //CO² aus Zeit 2 (Std,Min,Sek)
int P1_An = 836; //Pumpe1 an Zeit 1 (Std,Min,Sek)
Timer t1; //Timer für Pumpe1 definieren
long P1_Dauer = 10; // Dauer wie lange gepumpt wird in Sek.
int P2_An = 836; //Pumpe2 an Zeit 2 (Std,Min,Sek)
Timer t2; //Timer für Pumpe2 definieren
long P2_Dauer = 15; // Dauer wie lange gepumpt wird in Sek.
//************************************************************************************************************************
void setup(void) {
// RTC.stop(); //Uhr stellen
// RTC.set(DS1307_SEC,0);
// RTC.set(DS1307_MIN,23);
// RTC.set(DS1307_HR,9);
// RTC.set(DS1307_DOW,6);
// RTC.set(DS1307_DATE,23);
// RTC.set(DS1307_MTH,02);
// RTC.set(DS1307_YR,13);
// RTC.start();
pinMode(P1, OUTPUT);
pinMode(P2, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
t1.pulse(P1, P1_Dauer*1000,LOW); // Timer für Pumpe 1
t2.pulse(P2, P2_Dauer*1000,LOW); // Timer für Pumpe 2
Wire.begin(); //I2C bus
lcd.begin(20, 4); //LCD-Anzeige initialisieren
lcd.clear(); //LCD leeren
}
//***************************************************************************************************
void loop(void){
//Get time from DS1307*****
int minute, hour, second, date, month, year, tens, ones, key;
int mil_time;
hour = RTC.get(DS1307_HR,true); //Militärzeit [0,23]
minute = RTC.get(DS1307_MIN,false);
second = RTC.get(DS1307_SEC,false);
// date = RTC.get(DS1307_DATE,false);
// month = RTC.get(DS1307_MTH,false);
// year = RTC.get(DS1307_YR,false);
mil_time = (hour * 100) + minute ; //Zeitformat 0000,2400
//*****************************************Relais Steuerung************************************************
//*********************************************Licht********************************************************
if((S1_Aus1 < S1_An1) && (S1_An1 <= mil_time || S1_Aus1 > mil_time) || (S1_An1 <= mil_time && S1_Aus1 > mil_time))
{
digitalWrite(S1, HIGH);
}
else
{
digitalWrite(S1, LOW);
}
if((S1_Aus2 < S1_An2) && (S1_An2 <= mil_time || S1_Aus2 > mil_time) || (S1_An2 <= mil_time && S1_Aus2 > mil_time))
{
digitalWrite(S1, HIGH);
}
else
{
digitalWrite(S1, LOW);
}
//********************************************Mondlicht******************************************************
if((S2_Aus1 < S2_An1) && (S2_An1 <= mil_time || S2_Aus1 > mil_time) || (S2_An1 <= mil_time && S2_Aus1 > mil_time))
{
digitalWrite(S2, HIGH);
}
else
{
digitalWrite(S2, LOW);
}
if((S2_Aus2 < S1_An2) && (S2_An2 <= mil_time || S2_Aus2 > mil_time) || (S2_An2 <= mil_time && S2_Aus2 > mil_time))
{
digitalWrite(S2, HIGH);
}
else
{
digitalWrite(S2, LOW);
}
//************************************************CO2**********************************************************
if((S3_Aus1 < S3_An1) && (S3_An1 <= mil_time || S3_Aus1 > mil_time) || (S3_An1 <= mil_time && S3_Aus1 > mil_time))
{
digitalWrite(S3, HIGH);
}
else
{
digitalWrite(S3, LOW);
}
if((S3_Aus2 < S3_An2) && (S3_An2 <= mil_time || S3_Aus2 > mil_time) || (S3_An2 <= mil_time && S3_Aus2 > mil_time))
{
digitalWrite(S3, HIGH);
}
else
{
digitalWrite(S3, LOW);
}
//************************************************Pumpe 1**********************************************************
if(P1_An == mil_time )
t1.update();
else
{
digitalWrite(P1, LOW);
}
//************************************************Pumpe 2**********************************************************
if(P2_An == mil_time )
t2.update();
else
{
digitalWrite(P2, LOW);
}
//*******************************************************************************************************************
//*******************************************************************************************************************
//*********************************************LCD Anzeige Uhrzeit Ausgabe*******************************************
lcd.setCursor(0,0);
lcd.print ("Aquaduino");
lcd.setCursor(10,0); //Stunde
if (hour < 10)
lcd.print("0");
lcd.print( hour );
lcd.print(":"); //Minute
if( minute < 10)
lcd.print("0");
lcd.print( minute);
lcd.print(":"); //Sekunde
if( second < 10)
lcd.print("0");
lcd.print(second);
//**************************************************LCD Status Anzeige *******************************************
lcd.setCursor(0,1); //Licht
lcd.print("Licht");
lcd.setCursor(7,1);
if(digitalRead(S1) == HIGH){
lcd.print("An ");
}
else{
lcd.print("Aus");
}
lcd.setCursor(0,2); //Mondlicht
lcd.print("MLicht");
lcd.setCursor(7,2);
if(digitalRead(S2) == HIGH){
lcd.print("An ");
}
else{
lcd.print("Aus");
}
lcd.setCursor(0,3); //CO2
lcd.print("CO2");
lcd.setCursor(7,3);
if(digitalRead(S3) == HIGH){
lcd.print("An ");
}
else{
lcd.print("Aus");
}
lcd.setCursor(11,1); //Pumpe 1
lcd.print("P1");
lcd.setCursor(14,1);
if(digitalRead(P1) == HIGH){
lcd.print("An ");
}
else{
lcd.print("Aus");
}
lcd.setCursor(11,2); //Pumpe 2
lcd.print("P2");
lcd.setCursor(14,2);
if(digitalRead(P2) == HIGH){
lcd.print("An ");
}
else{
lcd.print("Aus");
}
}