Brauche Hilfe 2

Hallo

Ich habe folgendes Programm für meinen Arduino geschrieben :

int MesseingangTrafo=A0;                           
int AnsteuerausgangUmschaltrelais=2;               
int VariableMessergibnis=0;                     
int Trafo12V=3;
int Trafo24V=4;
int VariableTrafo12V=0;
int VariableTrafo24V=0;
int SchutzschaltungsRelais = 5;
int FehlerLED = 6;
int NetzteilEingeschaltet=7;
int VariableNetzteilEingeschaltet=0;
int Temperatursensor =8;
int VariableTemperatursensor=0;
int Luefter =9;

void setup()

{
pinMode(AnsteuerausgangUmschaltrelais, OUTPUT);
pinMode(MesseingangTrafo, INPUT);
pinMode(Trafo12V,INPUT);
pinMode(Trafo24V,INPUT);
pinMode(SchutzschaltungsRelais,OUTPUT);
pinMode(FehlerLED,OUTPUT);
pinMode(Temperatursensor,INPUT);
pinMode(Luefter,OUTPUT);

digitalWrite (Luefter,HIGH);

}

void loop()

{

 VariableMessergibnis = analogRead(MesseingangTrafo);
 VariableTrafo12V = digitalRead(Trafo12V);
 VariableTrafo24V = digitalRead(Trafo24V);
 VariableNetzteilEingeschaltet = digitalRead(NetzteilEingeschaltet);
 VariableTemperatursensor = digitalRead(Temperatursensor);


 if (VariableTrafo12V == HIGH && VariableTrafo24V == HIGH && VariableNetzteilEingeschaltet == HIGH && VariableTemperatursensor == HIGH)
{
  digitalWrite (SchutzschaltungsRelais,LOW);   
  

  if (VariableMessergibnis > 818) digitalWrite (AnsteuerausgangUmschaltrelais,HIGH);
     else digitalWrite (AnsteuerausgangUmschaltrelais,LOW);
}
   else digitalWrite (SchutzschaltungsRelais,HIGH);

 if (digitalRead (VariableTemperatursensor) == HIGH)
{
 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 delay (5000);
     
}

Problem ist nun folgendes :

Alles funktioniert soweit bis außer die Verzögerung oben mit dem Delay ( 1800000).
Das soll dafür sorgen, das wenn Pin 8 LOW wird für die Zeitspanne von einer hablen Stunde der Pin 6 angesteuert werden und zusätzlich soll Pin 5 für diese halbe Stunde HIGH bleiben.

Das mit Pin 6 funktiniert wie ich will nur mit Pin 5 gibt es Probleme. Wenn ich Pin 8 auf HIGH lege sind die Pins 5 und 6 LOW - alles okay. Wenn ich nun aber Pin 8 auf Low lege wird Pin 6 angesteuert - auch okay. Nur Pin 5 wird sofort wieder HIGH wenn ich Pin 8 wieder HIGH mache - das Ist falsch.

Pin 5 soll ja die halbe Stunde HIGH bleiben egal was mit Pin 8 ist.

Kann mir jemand eine Lösung meines Problems verraten ??

Vielen Dank im vorraus
Moritz Schaefer

MoritzS122:
Pin 5 soll ja die halbe Stunde HIGH bleiben egal was mit Pin 8 ist.

Kann mir jemand eine Lösung meines Problems verraten ??

Vielen Dank im vorraus
Moritz Schaefer

Der Temperatursensor einen Analog Ausgabe oder eine digitale Ausgabe habe?

Hallo Moritz,

ich finde dein delay(1800000) nicht.

Außerdem soltest du nicht mit delay arbeiten, da dein Programm an der Stelle stehen bleibt.

Hallo,

Alles funktioniert soweit bis außer die Verzögerung oben mit dem Delay ( 1800000).

Das kann ich mir nicht vorstellen.
Wenn man den Sketch kompiliert, kommen Fehlermeldungen.
Außerdem kann ich die Zeile mit dem Delay(1800000) nicht finden.
Des weiteren ist der Sketch sehr unübersichtlich.

Hier solltest du nochmal prüfen ob deine "If-Anweisungen" richtig aufgestellt sind.

Um die Übersicht zu verbessern, würde ich die einzelnen Anweisungen immer in "geschweifte Klammern" setzen.

Und eine zweimalige "Else-Anweisung" unmittelbar hinter einander funktioniert nicht.

Was die am Ende folgenden Delays betriff, würde ich davon Abstand nehmen und diese ersetzen.

https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

Und die am Anfang definierten Arduino-Pins (A0, 2, 3, 4 usw.) brauchst/darfst Du nicht als Integer deklarieren.

HotSystems:
Und die am Anfang definierten Arduino-Pins (A0, 2, 3, 4 usw.) brauchst/darfst Du nicht als Integer deklarieren.

Kann man schon. Man sollte sie aber als const deklarieren

const int Trafo12V = 3;

[quote author=HotSystems link=msg=2340935 date=1438546397 Und eine zweimalige "Else-Anweisung" unmittelbar hinter einander funktioniert nicht.[/quote]

in diesem Fall schon, denn sie beziehen sich auf verschiedene if Anweisungen

Hallo

so hier noch mal das Programm - oben beim Kopieren ist wohl was verlohren gegangen.
Und Nein es gibt keine Fehler beim Upload auf den Arduino !!

int MesseingangTrafo=A0;                           
int AnsteuerausgangUmschaltrelais=2;               
int VariableMessergibnis=0;                     
int Trafo12V=3;
int Trafo24V=4;
int VariableTrafo12V=0;
int VariableTrafo24V=0;
int SchutzschaltungsRelais = 5;
int FehlerLED = 6;
int NetzteilEingeschaltet=7;
int VariableNetzteilEingeschaltet=0;
int Temperatursensor =8;
int VariableTemperatursensor=0;
int Luefter =9;

void setup()

{
pinMode(AnsteuerausgangUmschaltrelais, OUTPUT);
pinMode(MesseingangTrafo, INPUT);
pinMode(Trafo12V,INPUT);
pinMode(Trafo24V,INPUT);
pinMode(SchutzschaltungsRelais,OUTPUT);
pinMode(FehlerLED,OUTPUT);
pinMode(Temperatursensor,INPUT);
pinMode(Luefter,OUTPUT);

digitalWrite (Luefter,HIGH);

}

void loop()

{

 VariableMessergibnis = analogRead(MesseingangTrafo);
 VariableTrafo12V = digitalRead(Trafo12V);
 VariableTrafo24V = digitalRead(Trafo24V);
 VariableNetzteilEingeschaltet = digitalRead(NetzteilEingeschaltet);
 VariableTemperatursensor = digitalRead(Temperatursensor);


 if (VariableTrafo12V == HIGH && VariableTrafo24V == HIGH && VariableNetzteilEingeschaltet == HIGH && VariableTemperatursensor == HIGH)
{
  digitalWrite (SchutzschaltungsRelais,LOW);   
  

  if (VariableMessergibnis > 818) digitalWrite (AnsteuerausgangUmschaltrelais,HIGH);
     else digitalWrite (AnsteuerausgangUmschaltrelais,LOW);
}
   else digitalWrite (SchutzschaltungsRelais,HIGH);

 if (digitalRead (VariableTemperatursensor) == LOW)
{
 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 delay (5000);
     
}

 if (digitalRead (Trafo12V) == LOW)
{
 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 delay (5000);

}
  if (digitalRead (Trafo24V) == LOW)
{
 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 digitalWrite(FehlerLED, HIGH);
 delay(1000);
 digitalWrite(FehlerLED, LOW);
 delay(1000);

 delay (5000);
}

}

Mein Problem nun - wie schaffe ich es das der Arduino erkennt wenn der Temperaturabhänige Schalter ( im Programm Temperatursensor genannt) LOW ist er Pin 5 auf high schaltet + er die LED an Pin 6 2 mal blinken lässt und ohne irgendwas anderes auszuführen in diesem Zustand für eine halbe Stunde verbleibt. Wenn die halbe Stunde rum ist soll alles ganz normal weitergehen.

Vielen Dank für die Hilfe
Moritz Schaefer

Ich habe mich bisher hier zurückgehalten....
Aber jetzt mal einen ernsten Vorschlag:
Benutze bitte die Code Formatierungsmöglichkeiten des Forums.
So ließt sich das kaum einer durch.
(ich zumindest nicht)

Tipp:
Du kannst auf alle Delays verzichten.
Implementiere deine Ablaufsteuerung als "endlichen Automaten"

Ich vermute, du bekommst durch die vielen Delays das nie richtig zum Laufen.
Auch haben wir dich schon mehrfach darauf hingewiesen, die zu entfernen.

Und du schreibst ja selber in deinem ersten Post,

Alles funktioniert soweit bis außer die Verzögerung oben mit dem Delay ( 1800000).

Also warum änderst du das nicht.

Und das hier,

  digitalWrite(FehlerLED, HIGH);
  delay(1000);
  digitalWrite(FehlerLED, LOW);
  delay(1000);

  digitalWrite(FehlerLED, HIGH);
  delay(1000);
  digitalWrite(FehlerLED, LOW);
  delay(1000);

  digitalWrite(FehlerLED, HIGH);
  delay(1000);
  digitalWrite(FehlerLED, LOW);
  delay(1000);

  digitalWrite(FehlerLED, HIGH);
  delay(1000);
  digitalWrite(FehlerLED, LOW);
  delay(1000);

  digitalWrite(FehlerLED, HIGH);
  delay(1000);
  digitalWrite(FehlerLED, LOW);
  delay(1000);

  digitalWrite(FehlerLED, HIGH);
  delay(1000);
  digitalWrite(FehlerLED, LOW);
  delay(1000);

  digitalWrite(FehlerLED, HIGH);
  delay(1000);
  digitalWrite(FehlerLED, LOW);
  delay(1000);

  digitalWrite(FehlerLED, HIGH);
  delay(1000);
  digitalWrite(FehlerLED, LOW);
  delay(1000);

kannst du wunderbar in einem Zähler ( for(int i=0; i < n; i ++)) abhandeln.

Hallo Moritz,

ich habe dein Programm mal wieder ein wenig umgeschrieben, allerdings habe ich die 1/2 Stunde Pause noch nicht Programiert, dass müsstest du selber machen, aber bitte ohne delay, Viel Spass

 const int MesseingangTrafo=A0;                           
 const int AnsteuerausgangUmschaltrelais=2;               
 int VariableMessergibnis=0;                     
 const int Trafo12V=3;
 const int Trafo24V=4;
 int VariableTrafo12V=0;
 int VariableTrafo24V=0;
 const int SchutzschaltungsRelais = 5;
 const int FehlerLED = 6;
 const int NetzteilEingeschaltet=7;
 int VariableNetzteilEingeschaltet=0;
 const int Temperatursensor =8;
 int VariableTemperatursensor=0;
 const int Luefter =9;

void setup()

{
 pinMode(AnsteuerausgangUmschaltrelais, OUTPUT);
 pinMode(MesseingangTrafo, INPUT);
 pinMode(Trafo12V,INPUT);
 pinMode(Trafo24V,INPUT);
 pinMode(SchutzschaltungsRelais,OUTPUT);
 pinMode(FehlerLED,OUTPUT);
 pinMode(Temperatursensor,INPUT);
 pinMode(Luefter,OUTPUT);

 digitalWrite (Luefter,HIGH);
 
}

void blink_anz(byte anz)
{
  static unsigned long previousMillis_led;        
  static unsigned long millisalt_led;
  static boolean ledState;
  static byte count;
  const int interval = 300;           
  if(millis()-millisalt_led>1000)
  {
   if(millis() - previousMillis_led > interval)
     {
       previousMillis_led = millis();   
       if (!ledState) ledState = HIGH;
       else{
            ledState = LOW; 
            count++;
            if(count>=anz){count=0;millisalt_led=millis();}
            }
       digitalWrite(FehlerLED, ledState);
     }
   }
}

void loop()

{

  VariableMessergibnis = analogRead(MesseingangTrafo);
  VariableTrafo12V = digitalRead(Trafo12V);
  VariableTrafo24V = digitalRead(Trafo24V);
  VariableNetzteilEingeschaltet = digitalRead(NetzteilEingeschaltet);
  VariableTemperatursensor = digitalRead(Temperatursensor);

 
  if (VariableTrafo12V == HIGH && VariableTrafo24V == HIGH && VariableNetzteilEingeschaltet == HIGH && VariableTemperatursensor == HIGH)
{
   digitalWrite (SchutzschaltungsRelais,LOW);   
   

   if (VariableMessergibnis > 818) digitalWrite (AnsteuerausgangUmschaltrelais,HIGH);
      else digitalWrite (AnsteuerausgangUmschaltrelais,LOW);
}
    else digitalWrite (SchutzschaltungsRelais,HIGH);

  if (digitalRead (VariableTemperatursensor) == LOW)
{
  digitalWrite (SchutzschaltungsRelais,HIGH); 
  blink_anz(2);
     
}

  if (digitalRead (Trafo12V) == LOW)
{
  blink_anz(4);

}
   if (digitalRead (Trafo24V) == LOW)
{
  blink_anz(8);
}

}