Brauche Hilfe

Hallo

Ich habe folgendes Programm für meinen Arudino Uno geschrieben :

int MesseingangTrafo=A0;
int AnsteuerausgangUmschaltrelais=2;
int VariableMessergibnis=0;
int Trafo12V = 3;
int Trafo24V = 4;
int SchutzschaltungsRelais = 5;
int FehlerLED = 6;
int VariableTrafo12V =0;
int VariableTrafo24V =0;
int VariableNetzteilOn=1;

void setup()

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

}

void loop()

{

VariableMessergibnis = analogRead(MesseingangTrafo);
VariableTrafo12V = digitalRead(Trafo12V);
VariableTrafo24V = digitalRead(Trafo24V);

if (VariableTrafo12V == HIGH && VariableTrafo24V == HIGH)
{
if (VariableMessergibnis > 818) digitalWrite (AnsteuerausgangUmschaltrelais,HIGH);
if(VariableMessergibnis < 818) digitalWrite (AnsteuerausgangUmschaltrelais,LOW);
}

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

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

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

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

}

Ziel des Programms:

Mein Arduino soll ständig kontrollieren ob die Pins 3 und 4 high sind. Sind sie dies nicht soll der Pin 5 angesteuert werden.

Wie kann ich erreichen das die IF abfragen oben ständig überprüft werden denn das ist bei mir leider nicht der Fall… Wenn ich den Arduino ohne High an Pin 3 und 4 einschalte ist auch Pin 5 high - nur wenn ich dann ohne Reset an Pin 3 und 4 5Volt anlege bleibt Pin 5 trotzdem high obwohl er ja low werden soll…

Kann mir bitte jemand helfen ??

Vielen Dank im vorraus
MoritzS122

Hallo Moritz,
das sieht relativ umständlich aus.
Als erstes fällt auf, was ist wenn VariableMessergibnis = 818 ist ???

Das muß hießen if < 818… else …

Weiter wofür die Abfragen

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

das sind doch die Fälle wenn nicht beides HIGH ist, genau das fragst du oben ab also kann man alle drei Fälle auch mit else abarbeiten.

Und die delay müssen raus, das unterbricht ja jedesmal das Programm für 2 Sekunden, geht gar nicht.

Gruß

Mir stellt sich jetzt aber die Frage, was liegt an den Pins 3 und 4 an?
Dir ist hoffentlich klar, die Pins vertragen nur max. + 5 Volt.
Andernfalls verabschieden sich diese.

Hallo

An pin 3 und 4 sollen 5v angelegt werden

Ich dachte wenn befehle im void loop Bereich stehen werden diese immer wieder wiederholt - also sollte doch bei meinem Programm nach dem letzten if Befehl wieder beim ersten if Befehl begonnen werden oder ??

Das klappt bei mir ja irgendwie ned ...

if (SchutzschaltungsRelais == HIGH)

Da fehlt das digitalRead()

Außerdem fehlt da irgendwie Code der das Relais wieder auf LOW setzt wenn der Fehler vorbei ist

Hallo Moritz,

ich habe dein Programm ein wenig umgeschrieben. Probier es mal aus.
du solltest aber die beiden delay's noch durch millis ersetzen

 int MesseingangTrafo=A0;                           
 int AnsteuerausgangUmschaltrelais=2;               
 int VariableMessergibnis=0;                     
 int Trafo12V = 3;
 int Trafo24V = 4;
 int SchutzschaltungsRelais = 5;
 int FehlerLED = 6;
 int VariableTrafo12V =0;
 int VariableTrafo24V =0;
 int VariableNetzteilOn=1;
 
void setup()

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

}

void loop()

{

  VariableMessergibnis = analogRead(MesseingangTrafo);
  VariableTrafo12V = digitalRead(Trafo12V);
  VariableTrafo24V = digitalRead(Trafo24V);
 
 
  if (VariableTrafo12V == HIGH && VariableTrafo24V == HIGH)
 {
   digitalWrite (SchutzschaltungsRelais,LOW);
   if (VariableMessergibnis > 818) digitalWrite (AnsteuerausgangUmschaltrelais,HIGH);
      else digitalWrite (AnsteuerausgangUmschaltrelais,LOW); 
 }
    else digitalWrite (SchutzschaltungsRelais,HIGH);

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

}

Hallo

Vielen Dank für die Hilfe ardubu !!!

Vielen herzlichen Dank !!