ich bin nun soweit das alles funktioniert...
hab jetzt mal das programm umgeschrieben das ich ne standlüftung hab für 1 minute erstmal..
bedienbar ist das alles per serial monitor mit den befehlen *an *aus für standlüftung
und #an #aus für die standheizung... leider haut der mir da wirre sachen raus.. ich find die fehler leider nicht..
mach ich die eingabe #aus oder #an schaltet sie die standlüftung ein oder aus usw...
starte ich die standlüftung mit *an und lass sie auslaufen startet nach 8 9 minuten das Klimabedienteil nochmal.....
hilfe wäre sehr toll.. danke
char inchar; //Puffert die eingehenden Symbole vom GSM MODUL
const int WebastoSchalter = 4; // Relais 1
const int Webasto = 5;
const int Klimabedienteil = 6; // Relais 2
const int shield = 9;
const int WasserPumpe = 10; // Relais 3
const int StandLueften = 11; // Relais 4
int StandlueftungAn = 0;
int Pumpe = 0;
int WebastoState = 0;
int LueftungIstAn = 0;
int HeizungIstAn = 0;
int ergebnis = 0; // ergebnis des sms empfangs
int arbeiten = 0; // wir haben was zu tun
unsigned long Startzeit = 0;
unsigned long LaufzeitHeizung = 0;
unsigned long LaufzeitLueftung = 0;
unsigned long StartzeitLueftung = 0;
unsigned long UmschaltzeitLueftung = 0;
unsigned long LaufzeitStandLueftung = 0;
unsigned long StartzeitStandLueftung = 0;
void setup()
{
Serial.begin(19200);
pinMode(WebastoSchalter, INPUT);
pinMode(Webasto, OUTPUT);
digitalWrite(Webasto, HIGH);
pinMode(Klimabedienteil, OUTPUT);
digitalWrite(Klimabedienteil, HIGH);
pinMode(shield, OUTPUT);
digitalWrite(shield, LOW);
pinMode(WasserPumpe, OUTPUT);
digitalWrite(WasserPumpe, HIGH);
pinMode(StandLueften, OUTPUT);
digitalWrite(StandLueften, HIGH);
// GSM SHIELD Aktivieren
Serial.println("Einschalten GSM");
digitalWrite(shield, HIGH);
delay(1500);
digitalWrite(shield, LOW);
delay(1000);
digitalWrite(shield, HIGH);
Serial.println("GSM BOOTEN");
delay(10000); // Zeit zum Einloggen
Serial.println("GSM SMS AKTIVIEREN");
delay(100);
delay(100);
Serial.println("Modul BEREIT...");
LueftungIstAn = 0;
HeizungIstAn = 0;
StandlueftungAn = 0;
}
void loop()
{
WebastoState = digitalRead(WebastoSchalter);
unsigned long w = 1; //Standlueftung
unsigned long x = 20; //Heizungszeit
unsigned long y = 11; //Lüftungszeit
unsigned long z = 5; //Lüftung anheben nach 5 Minuten KlimabedienteilAn
leseShield();
if ( ergebnis > 0 )// schauen ob es eine sms gibt
{
{
ergebnis = 0; // nur ein mal !!
arbeiten = 1; // aber arbeiten
Startzeit = 0;
LaufzeitHeizung = 0;
LaufzeitLueftung = 0;
StartzeitLueftung = 0;
UmschaltzeitLueftung = 0; // Lüftung anheben über zeit z
LueftungIstAn = 0;
HeizungIstAn = 0;
StandlueftungAn = 0;
LaufzeitStandLueftung = 0; // Laufzeit Standlueftung
StartzeitStandLueftung = 0; // Startzeit Standlueftung
Pumpe = 0;
Startzeit = millis();
if ( x < 0 )
{
WebastoEIN();
// ausrechnen wann Heizung aus soll
LaufzeitHeizung = Startzeit + (60000 * x);
}
if ( w > 0 )
{
StandLueftungEIN();
// ausrechnen wann StandLueftung aus soll
LaufzeitStandLueftung = Startzeit + (60000 * w);
}
if ( y > 0 )
{
// Heizung laeuft laenger wie Lueftung dann fängt Lüftung später an
if ( x > y )
{
StartzeitLueftung = Startzeit + (60000 * (x - y));
}
else
{
StartzeitLueftung = Startzeit;
}
// ausrechnen wann Lueftung aus soll, dabei Startzeit beachten
LaufzeitLueftung = StartzeitLueftung + (60000 * y);
}
} // ende an
} // ende lese sms
if (arbeiten > 0)
if (LueftungIstAn == 0)
if (StartzeitLueftung >= Startzeit)
if (StartzeitLueftung <= millis())
if (LaufzeitLueftung >= millis())
KlimabedienteilAN();
if (arbeiten > 0)
if (HeizungIstAn == 1)
if (LaufzeitHeizung < millis()) WebastoAUS();
if (arbeiten > 0)
if (StandlueftungAn == 1)
if (LaufzeitStandLueftung < millis()) StandLueftungAUS();
if (arbeiten > 0)
if (LueftungIstAn == 1)
if (StartzeitLueftung >= Startzeit )
if (LaufzeitLueftung < millis()) AllesAUS();
}
void AllesAUS()
{
StandLueftungAUS();
WebastoAUS();
delay(1000);
PumpeAus();
delay(2000);
KlimabedienteilAUS();
LueftungIstAn = 0;
HeizungIstAn = 0;
StandlueftungAn = 0;
Serial.println("Heizung und Lueftung AUS Handbetrieb moeglich...");
}
void WebastoEIN()// SOLL 20 MINUTEN LAUFEN
{
KlimabedienteilAUSFUNK();
delay(1000);
PumpeAn();
delay(1500);
digitalWrite(Webasto, LOW);
LueftungIstAn = 0;
HeizungIstAn = 1;
Serial.println("Heizung AN... .. . In 9 Minuten geht die Lueftung AN...");
}
void WebastoAUS()
{
digitalWrite(Webasto, HIGH);
HeizungIstAn = 0;
Serial.println("Heizung AUS...");
}
void KlimabedienteilAN()// SOLL NACH 9 MINUTEN STARTEN
{
digitalWrite(Klimabedienteil, HIGH);
delay(1000);
KlimabedienteilEinstellen();
LueftungIstAn = 1;
Serial.println("Klimabedienteil AN fuer 11 Minuten...");
}
void KlimabedienteilAUS()
{
digitalWrite(Klimabedienteil, HIGH);
LueftungIstAn = 0;
Serial.println("Klimabedienteil AUS... Durchgang Webasto Steuert");
}
void KlimabedienteilAUSFUNK()
{
digitalWrite(Klimabedienteil, LOW);
LueftungIstAn = 0;
Serial.println("Klimabedienteil AUS... Arduino Steuert");
}
void KlimabedienteilEinstellen()
{
Serial.println("Klimabedienteil auf niedrigste Luefterstufe, belueftung der Frontscheibe");
}
void KlimabedienteilRegeln()
{
Serial.println("Klimabedienteil.. .. Lüfter auf mittlere Stufe");
}
void PumpeAn()
{
digitalWrite(WasserPumpe, LOW);
Pumpe = 1;
Serial.println("Wasserpume AN... ..Steuerung durch Webasto");
}
void PumpeAus()
{
digitalWrite(WasserPumpe, HIGH);
Pumpe = 0;
Serial.println("Wasserpumpe AUS... ..Steuerung durch Klimabedienteil");
}
void StandLueftungEIN() //5 Minuten!
{
PumpeAn();
digitalWrite(StandLueften, LOW);
digitalWrite(Klimabedienteil, LOW);
delay(1000);
KlimabedienteilEinstellen();
StandlueftungAn = 1;
Serial.println("StandLueftung..... ..EIN");
}
void StandLueftungAUS()
{
PumpeAus();
digitalWrite(StandLueften, HIGH);
digitalWrite(Klimabedienteil, HIGH);
StandlueftungAn = 0;
Serial.println("StandLueftung..... ..AUS");
}
int leseShield()
{
ergebnis = 0;
// wenn etwas reinkommt... ..
if (Serial.available() > 0)
{
ergebnis = 1; // wir haben eine sms
inchar = Serial.read();
if (inchar == '#')
{
delay(10);
inchar = Serial.read();
if (inchar == 'a')
{
delay(10);
inchar = Serial.read();
if (inchar == 'n')
{
WebastoEIN();
delay(10);
Serial.println("SMS geloescht... nach AN");
return ergebnis;
}
else if (inchar == 'u')
{
delay(10);
inchar = Serial.read();
if (inchar == 's')
{
AllesAUS();
arbeiten = 0;
}
delay(10);
Serial.println("SMS geloescht... nach AUS");
return ergebnis;
}
}
}
else if (inchar == '*')
{
delay(10);
inchar = Serial.read();
if (inchar == 'a')
{
delay(10);
inchar = Serial.read();
if (inchar == 'n')
{
StandLueftungEIN();
delay(10);
Serial.println("SMS geloescht... nach StandLueftung AN");
return ergebnis;
}
else if (inchar == 'u')
{
delay(10);
inchar = Serial.read();
if (inchar == 's')
{
AllesAUS();
arbeiten = 0;
}
delay(10);
Serial.println("SMS geloescht... nach StandLueftung AUS");
return ergebnis;
}
}
}
}
}