probleme mit einer steuerung... bitte um hilfe

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;
        }
      }
    }
  }
}

niemand ne idee??

Wird zwar nicht direkt der Fehler sein, aber:

1.) Die serielle Einlese-Routine ist Murks. Siehe hier wie man das sicher und allgemein macht:
http://forum.arduino.cc/index.php?topic=362179.msg2497241#msg2497241

Und dann einfach mit strcmp() vergleichen:
http://www.cplusplus.com/reference/cstring/strcmp/

Also die readSerial() Funktion nehmen und dann das machen:

void loop()
{
   if (readSerial(Serial) == true)
   {
       if (strcmp(serialBuffer, "#an") == 0)
       {
           //an
       }
       if (strcmp(serialBuffer, "#aus") == 0)
       {
           //aus
       }
   }
}

Dabei musst du beim Sender hinten ein Linefeed/LF/newline anhängen!! Sonst geht es nicht. Irgendwie muss man das Ende erkennen.

Deine Funktion ist nicht nur unschön, unleserlich und schlecht wartbar, sonder die sind auch Zweige drin, die nichts zurückgeben:

sketch_nov29a.ino:308:1: warning: control reaches end of non-void function [-Wreturn-type]

Wobei das generell inkonsequent ist. Du hast Ergebnis als globale Variable, aber in der Funktion gibst du den Wert per return zurück. Aber verwendest dann den Rückgabe-Wert nicht. Sondern verwendest die globale Variable. Welche Variante soll es nun sein?

2.)
Du hast x unsigned long deklariert und vergleichst dann auf < 0. Das kann nie der Fall sein

3.) Bei so vielen String Literalen schadet es nichts das F() Makro zu verwenden:

Serial.println(F("String im Flash"));

Wenn es läuft hast du zwar noch genug RAM frei, aber etwas die Hälfte ist hauptsächlich mit den Strings voll

ich versteh jetzt rein fast garnix...

normalerweise läuft es ja so das ich das sim900 gsmshield am arduino dran hab.. nur mach ich es jetzt so das ich per serial monitor den krams an den arduino sende..

hab einen im auto verbaut.. alles läuft bis auf standlüftung....

und oben in meiner bude hab ich n blanken arduino mit dem ich das alles durchspiele...

hoer173:
niemand ne idee??

Ein bißchen Geduld. Nach 3 Stunden schon meckern ist nervig.
Grüße Uwe

#include <SoftwareSerial.h>
String readString; //Puffert die eingehenden Symbole vom GSM MODUL

const int WebastoSchalter = 4;
const int Webasto = 5;              // Relais 1
const int Klimabedienteil = 6;      // Relais 2
const int shield = 9;
const int Pumpe = 10;               // Relais 3
const int StandLueften = 11;        // Relais 4

int StandlueftungAn = 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 LaufzeitStandLueftung = 0;
unsigned long StartzeitStandLueftung = 0;
unsigned long EndzeitStandLueftung = 0;

unsigned long UmschaltzeitLueftung = 0;

SoftwareSerial SIM900(7, 8);
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(Pumpe, OUTPUT);
  digitalWrite(Pumpe, 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");
  SIM900.begin(19200);
  delay(6000); // Zeit zum Einloggen
  Serial.println("GSM SMS AKTIVIEREN");
  SIM900.print("AT+CMGF=1\r"); // setzt SMS Mode
  delay(100);
  SIM900.print("AT+CNMI=2,2,0,0,0\r");// gibt SMS direkt an den Arduino weiter
  delay(100);
  Serial.println("Modul BEREIT...");
  lueftungIstAn = 0;
  heizungIstAn = 0;
}
void loop()
{
  unsigned long w = 1;  //Standlueftung
  unsigned long x = 2; //Heizungszeit
  unsigned long y = 1; //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; // nus ein mal !!
      arbeiten = 1; // aber arbeiten
      Startzeit = 0;
      LaufzeitHeizung = 0;
      LaufzeitLueftung = 0;
      StartzeitLueftung = 0;
      lueftungIstAn = 0;
      heizungIstAn = 0;
      StandlueftungAn = 0;
      LaufzeitStandLueftung = 0;  // Laufzeit Standlueftung
      StartzeitStandLueftung = 0; // Einschaltzeit Standlueftung
      EndzeitStandLueftung = 0;   // Ausschaltzeit Standlueftung
      Startzeit = millis();

      if (( x < 0 ) and (arbeiten = 1))
      { arbeiten = 2;
        WebastoEIN();
        // ausrechnen wann Heizung aus soll
        LaufzeitHeizung = Startzeit + (60000 * x);
      }
      if (( w < 0 ) and (arbeiten = 2))
      { arbeiten = 3;
        StandLueftungEIN();
        // ausrechnen wann Heizung aus soll
        LaufzeitStandLueftung = Startzeit + (60000 * w);
      }

      if (( y > 0 ) and (arbeiten = 3))
      { arbeiten = 4;
        // Heizung laeuft laenger wie Lüeftung dann fängt Lüftung später an
        if ( x > y )
        {
          StartzeitLueftung = Startzeit + (60000 * (x - y));
        }
        else
        {
          StartzeitLueftung = Startzeit;
        }
        // ausrechnen wann Lüftung 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;
  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(Pumpe, LOW);
  Serial.println("Wasserpume AN... ..Steuerung durch Webasto");
}
void PumpeAus()
{
  digitalWrite(Pumpe, HIGH);
  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 und Klimabedienteil..... ..EIN");
}
void StandLueftungAUS()
{
  PumpeAus();
  digitalWrite(StandLueften, HIGH);
  digitalWrite(Klimabedienteil, HIGH);
  StandlueftungAn = 0;
  Serial.println("StandLueftung und Klimabedienteil..... ..AUS");
}

int leseShield()

{ ergebnis = 0;
  // Texterkennung
  while (Serial.available())
  {
    ergebnis = 1;
    delay(100);
    char c = Serial.read();
    readString += c;
  }
  if (readString.length() > 0)
  {
    readString.trim();
    Serial.println(readString);

    if (readString.indexOf("#an") >= 0)
    {
      WebastoEIN();
      arbeiten = 1;
    }

    if (readString.indexOf("*an") >= 0)
    {
      StandLueftungEIN();
      arbeiten = 1;
    }

    if (readString.indexOf("#aus") >= 0)
    {
      AllesAUS();
      arbeiten = 0;
    }

    if (readString.indexOf("*aus") >= 0)
    {
      StandLueftungAUS();
      arbeiten = 0;
    }

    readString = "";
    delay(10);
    SIM900.println("AT+CMGD=1,4"); // alle SMS loeschen
    Serial.println("ALLE SMS geloescht...");
    return ergebnis;
  }
}

ich hab mal noch bisschen was geändert...

funktioniert nun alles.. ausser das wenn ich *an eingebe.. nach 1 minute die Standlüftung nicht ausgeht.. sondern das klimabedientteil eingeht und nach 2 minuten geht alles dann aus... ich find den fehler einfach nicht.. das ist das einzige was mich aufhält.. sonst geht alles... nehm ich die zeitsteuerung der standlüftung weg.. dann kann ichs mit *an *aus steuern.. soll aber nach zeit W von allein ausgehen.. ohne das was weiteres sich zuschaltet.. könnte man sich darauf konzentrieren wo der fehler liegt????? danke

Deine Variablen x, y, z und w sind als "unsigned" deklariert! Das heißt ohne Vorzeichen. Nur positiv. Die können nie < 0 sein

Was soll das überhaupt bedeuten dass die Heizungszeit < 0 ist?

Und Vorsicht hier:

arbeiten = 1

= ist eine Zuweisung
== ist ein Vergleich

UND schreibt man übrigens normalerweise &&

<0 musste sein damit das läuft... alternative?

danke schonmal..... die kuh sollte vom eis :slight_smile:

nein habe immernoch das problem das die standlueftung nicht aus geht und das sich das klimabedienteil nach 1 minute einschaltet.. und nach 2 minuten erst alles ausgeht.

hab jetzt in der zeitberechnung heizungistan ==1 eingefügt.. nun geht das bedienteil nicht an aber die standlueftung läuft permanent weiter..

hier der aktuelle code

#include <SoftwareSerial.h>

String readString; //Puffert die eingehenden Symbole vom GSM MODUL

 

const int WebastoSchalter = 4;     

const int Webasto = 5;              // Relais 1

const int Klimabedienteil = 6;      // Relais 2

const int shield = 9;

const int Pumpe = 10;               // Relais 3

const int StandLueften = 11;        // Relais 4

 

int StandlueftungAn = 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 LaufzeitStandLueftung = 0;

unsigned long StartzeitStandLueftung = 0;

unsigned long EndzeitStandLueftung = 0;

 

unsigned long UmschaltzeitLueftung = 0;

 

SoftwareSerial SIM900(7, 8);

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(Pumpe, OUTPUT);

  digitalWrite(Pumpe, 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");

  SIM900.begin(19200);

  delay(6000); // Zeit zum Einloggen

  Serial.println("GSM SMS AKTIVIEREN");

  SIM900.print("AT+CMGF=1\r"); // setzt SMS Mode

  delay(100);

  SIM900.print("AT+CNMI=2,2,0,0,0\r");// gibt SMS direkt an den Arduino weiter

  delay(100);

  Serial.println("Modul BEREIT...");

  lueftungIstAn = 0;

  heizungIstAn = 0;

}

void loop()

{

  unsigned long w = 1;  //Standlueftung

 unsigned long  x = 2; //Heizungszeit

 unsigned long  y = 1; //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; // nus ein mal !!

      arbeiten = 1; // aber arbeiten

      Startzeit = 0;

      LaufzeitHeizung = 0;

      LaufzeitLueftung = 0;

      StartzeitLueftung = 0;

      lueftungIstAn = 0;

      heizungIstAn = 0;

      StandlueftungAn = 0;

      LaufzeitStandLueftung = 0;  // Laufzeit Standlueftung

      StartzeitStandLueftung = 0; // Einschaltzeit Standlueftung

      EndzeitStandLueftung = 0;   // Ausschaltzeit Standlueftung

      Startzeit = millis();

 

      if (heizungIstAn == 1)

      {

        

        // ausrechnen wann Heizung aus soll

        LaufzeitHeizung = Startzeit + (60000 * x);

      }

      if (StandlueftungAn == 1)

      {

        

        // ausrechnen wann Heizung aus soll

        LaufzeitStandLueftung = Startzeit + (60000 * w);

      }

 

      if ( y > 0 )

      {

        // Heizung laeuft laenger wie Lüeftung dann fängt Lüftung später an

        if ( x > y )

        {

          StartzeitLueftung = Startzeit + (60000 * (x - y));

        }

        else

        {

          StartzeitLueftung = Startzeit;

        }

        // ausrechnen wann Lüftung aus soll, dabei Startzeit beachten

        LaufzeitLueftung = StartzeitLueftung + (60000 * y);

      }

    } // ende an

  } // ende lese sms

  if (arbeiten > 0)
    if (heizungIstAn ==1)

    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;

  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(Pumpe, LOW);

  Serial.println("Wasserpume AN... ..Steuerung durch Webasto");

}

void PumpeAus()

{

  digitalWrite(Pumpe, HIGH);

  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 und Klimabedienteil..... ..EIN");

}

void StandLueftungAUS()

{

  PumpeAus();

  digitalWrite(StandLueften, HIGH);

  digitalWrite(Klimabedienteil, HIGH);

  StandlueftungAn = 0;

  Serial.println("StandLueftung und Klimabedienteil..... ..AUS");

}

 

int leseShield()

 

{ ergebnis = 0;

  // Texterkennung

  while (Serial.available())

  {

    ergebnis = 1;

    delay(100);

    char c = Serial.read();

    readString += c;

  }

  if (readString.length() > 0)

  {

    readString.trim();

    Serial.println(readString);

 

    if (readString.indexOf("#an") >= 0)

    {

      WebastoEIN();
            arbeiten = 1;

    }

 

    if (readString.indexOf("*an") >= 0)

    {

      StandLueftungEIN();
            arbeiten = 1;

    }

 

    if (readString.indexOf("#aus") >= 0)

    {

      AllesAUS();

      arbeiten = 0;

    }

 

    if (readString.indexOf("*aus") >= 0)

    {

      StandLueftungAUS();

      arbeiten = 0;

    }

 

    readString = "";

    delay(10);

    SIM900.println("AT+CMGD=1,4"); // alle SMS loeschen

    Serial.println("ALLE SMS geloescht...");

    return ergebnis;

  }

}

das programm funktioniert wunderbar im bereich der standheizung mit dem versetzten einschalten des klimabedienteils. auch wird mit erreichen der zeit x alles abgeschaltet.

einzig und allein die standlueftung macht jetzt probleme wie beschrieben.

ich find keine loesung..

und zusammenkopiert ist hier rein garnichts da ich von hier und da Verbesserungsvorschläge angenommen habe.

fur mich ist wichtig das mir jemand da effektiv hilft und mir sagt wo der fehler liegt.. wieso weshalb warum.

es geht jetzt nur noch darum das die standlueftung nach zeit W ausgeht und sich nichts anderes ein oder ausschaltet oder zuschaltet.

mehr brauch ich nicht... wenn natürlich jemand n vorschlag hat etwas zu verändern gern.. die hauptproblematik ist aber die standlueftung..

mit dem serialmonitor kann man das sehr gut durchspielen....

keiner einen rat?

keiner einen rat?

Die vielen Leerzeilen raus, dann wird es evtl. leichter lesbar...

Mehr Testausgaben einbauen, dann siehst du evtl. leichter, was du programmiert hast.

Wenn KlimabedienteilAN() nie aufgerufen wird (ist das so?) kann es ja nur an

 if (arbeiten > 0)
    if (heizungIstAn ==1)
    if (lueftungIstAn == 0)
      if (StartzeitLueftung >= Startzeit)
        if (StartzeitLueftung <= millis())
          if (LaufzeitLueftung >= millis())

liegen. Welche der 6 Bedingungen ist denn anders als erwartet?

ja und da war der fehler..... ich hatte wohl kein aufruf für arbriten nach 1 setzen.. oh man