Code läuft nicht immer durch?

JA!
Ab Zeile 43 ist ja wohl ganz dolle Schluß!

Und dann noch ...

  int val = digitalRead (mhSensor1) ; // Lesen des Zustandes des Sensors1.

gefolgt von

  int val = digitalRead (mhSensor2) ; // Lesen des Zustandes des Sensors2.

Das kompiliert nicht mal.

Nu denn, selbst wenn,
dann steht die Frage:

  if (val == LOW)  //Wenn dieser AN ist dann soll Relais1 anziehen.

Warum ein int und kein bool?
Das genauso hier:

int buttonstatus = 0;

Egal, was Du vor hast:
Es wird nicht funktionieren.
Obwohl es fehlerfrei kompiliert.

// Programm Kehrschleife

const byte rel1 = 7 ; // PIN für Relais1
const byte  rel2 = 8 ; // PIN für Relais2
const byte rel3 = 9;
const byte mhSensor1 =  2 ; // PIN für den Magnetischen Hall Sensors 1
const byte mhSensor2 =  3 ; // PIN für den Magnetischen Hall Sensors 2
const byte mhSensor3_4 = 4;

bool buttonstatus = 0;
int buttonZaehler = 0;
bool letzterStatus = 0;

void setup () {
  Serial.begin(9600);
  pinMode(rel3, OUTPUT);
  pinMode(mhSensor3_4, INPUT);
  pinMode (rel1, OUTPUT) ; // definieren des PIN's für Relais1 als Ausgangssignal
  pinMode (rel2, OUTPUT) ; // definieren des PIN's für Relais2 als Ausgangssignal
  pinMode (mhSensor1, INPUT) ;  // definieren des PIN's für den Sensor1 als Eingangssignal
  pinMode (mhSensor2, INPUT) ;  // definieren des PIN's für den Sensor2 als Eingangssignal
}

void loop () {

  if (!digitalRead (mhSensor1))  //Wenn dieser AN ist dann soll Relais1 anziehen.
  {
    digitalWrite (rel1, LOW);
    delay (15000);
  }
  else  //Wenn dieser AUS ist dann soll Relais1 NICHT anziehen.
  {
    digitalWrite (rel1, HIGH);
  }
  if (!digitalRead (mhSensor2))  //Wenn dieser AN ist dann soll Relais2 anziehen.
  {
    digitalWrite (rel2, LOW);
    delay (15000);
  }
  else  //Wenn dieser AUS ist dann soll Relais2 NICHT anziehen.
  {
    digitalWrite (rel2, HIGH);
  }
  buttonstatus = digitalRead(mhSensor3_4);
  if (buttonstatus != letzterStatus)
  {
    if (buttonstatus == 1)
    {
      buttonZaehler++;
    }
    else
    {
      digitalWrite(rel3, HIGH);
    }
  }
  if (buttonZaehler % 2 == 0)
  {
    digitalWrite(rel3, LOW);
    buttonZaehler = 0;
  }
  else
  {
    digitalWrite(rel3, HIGH);
  }
  letzterStatus = buttonstatus;
  Serial.println(buttonZaehler);
  delay(10);
}

Das geht durch die von mir angesprochene seltsame Klammersetzung. Durch den extra Code-Block hat man eine lokale Version der gleichen Variablen. Sinnvoll ist das natürlich nicht.

1 Like

Mehr noch,
Da wird eine neue Instanz gebastelt, die mit dem vorherigen und nachfolgendem nichts zu tun hat.
Jetzt wo du es sagst, hab ich das mal erleichtert und:

void loop ()
{
  int val = digitalRead (mhSensor1) ; // Lesen des Zustandes des Sensors1.
  if (val == LOW)  //Wenn dieser AN ist dann soll Relais1 anziehen.
  {
    digitalWrite (rel1, LOW);
    delay (15000);
  }
  else //Wenn dieser AUS ist dann soll Relais1 NICHT anziehen.
  {
    digitalWrite (rel1, HIGH);
  }
  {
    int val = digitalRead (mhSensor2) ; // Lesen des Zustandes des Sensors2.
    if (val == LOW) { //Wenn dieser AN ist dann soll Relais2 anziehen.
      digitalWrite (rel2, LOW);
      delay (15000);
    } else { //Wenn dieser AUS ist dann soll Relais2 NICHT anziehen.
      digitalWrite (rel2, HIGH);
    }
  }

Da hilft weder der/die/das Eine noch [^] Andere - und auch nicht Luzifer. :wink:
Supi - schönes Dingens....

Danke an euch, da werd ich mal bissel probieren am Wochenende.

Kann eine Versorgungsspannung von 4,8V an GND und 5V schon zu Problemen führen?

Hallo zusammen.
Ich habe die Ursache gefunden.ich habe den Festspannungsregler 7805 gegen ein einstellbares Netzteil getauscht. Da bleibt die eingestellte Spannung bei 5V konstant und alles läuft tadellos.
Danke nochmal in die Runde.
Gruß Uwe

Dann hast du den Regler nicht richtig beschaltet, wie ich schon in Post #16 geschrieben habe.
Warum hast du nicht darauf geantwortet ?

Hatte ich aber geschrieben: VCC an 5V und alt. Schaltbild sind auch 2 Kondensatoren, 1x Eingang 1x Ausgang. Und die Spannung hatte ich bis dato noch nicht gemessen.

Dann lies dir noch mal Post #16 durch.

Kondensatoren sind frequenzabhängige Bauteile. Daher ist größer nicht immer besser. Im Datenblatt werden da 330nF und 100nF empfohlen. Zweimal 100nF tut es aber der Einfachheit halber auch. Du kannst du 10/100µF auch drin lassen und nochmal 100nF parallel einbauen. Wobei auch so nah wo möglich ab Stabilisator sitzen sollten