Sonnen Verfolgung 2 Achsen

Danke für die Hinweise!
Habe es jetzt geändert, aber die Schalter gehen leider noch nicht!

Ich habe bereits die Schalter getestet, ob der Anschluss richtig ist. Dazu habe ich einfach den Pin statt an dem Digitalen Anschluss an den Analogen vom LDR angeschloss, dort werden mir das Werte von 0 und betätigt etwas mit 1000 angezeit!

Aber wieso geht es am Digitalanschluss nicht?

Irgendwie werde ich aus Deinen Beschreibungen nicht so recht schlau.
Male doch mal eine Schaltung auf, wie Du was angeschlossen hast. Bleistift genügt.

Gruß Tommy

So ist es an geschlossen, statt des LDR halt den Schalter:


Kann es sein, das es daran liegt, das ich hier:

int Endschalter1pin = 2; // Vertikal Endschalter oben
int Endschalter1Status[color=red]= 0[/color]; // Zustand des Endschalter oben merken
int Endschalter2pin = 3; // Vertikal Endschalter unten
int Endschalter2Status[color=red]= 0;[/color] // Zustand des Endschalter unten merken

Das rot markierte nicht drin hatte?

und schups mal einen aktuellen Sketch hoch

Klar, kein Thema:

// Sonnen Verfolgung v3 vom 18.12.2020

int Endschalter1pin = 2; // Vertikal Endschalter oben
int Endschalter1Status= 0; // Zustand des Endschalter oben merken
int Endschalter2pin = 3; // Vertikal Endschalter unten
int Endschalter2Status= 0; // Zustand des Endschalter unten merken

int Relais1pin = 4; // Relais 1 für Vertikale Achse, hoch fahren
int Relais2pin = 5; // Relais 2 für Vertikale Achse, runter fahren

// LDR Stiftverbindungen, Name = analogpin;
const byte LDRol = 0; // LDR oben links
const byte LDRor = 1; // LDR oben rechts
const byte LDRul = 2; // LDR unten links
const byte LDRur = 3; // LDR unten rechts

void setup ()
{
  pinMode(Endschalter1pin, INPUT); //Pin Modus definieren, Eingang
  pinMode(Endschalter2pin, INPUT); //Pin Modus definieren, Eingang

  pinMode(Relais1pin, OUTPUT); //Pin Modus definieren, Ausgang
  pinMode(Relais2pin, OUTPUT); //Pin Modus definieren, Ausgang

  Serial.begin(9600); // Serielle Schnittstelle initialisieren
}

void loop ()
{
  int OL = analogRead (0) * 1.0; // oben links, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int OR = analogRead (1) * 1.0; // oben rechts, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int UL = analogRead (2) * 1.0; // unten links, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int UR = analogRead (3) * 1.0; // unten rechts, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int TOL = 100; // Wert, ab wann die Position geändert werden soll (Toleranz)

  int MWT = (OL + OR) / 2; // Mittelwert oben
  int MWU = (UL + UR) / 2; // Mittelwert unten
  int MWL = (OL + UL) / 2; // Mittelwert links
  int MWR = (OR + UR) / 2; // Mittelwert rechts

  int dvert = MWT - MWU; // Überprüfen der diffirence zwischen oben und unten
  int dhoriz = MWL - MWR; // Überprüfen der diffirence zwischen links und rechts
  int LDRcheck = (OL + OR + UL + UR); // Gesamtwert der 4 LDR

  if (LDRcheck < 200) // Wenn der Wert unter 200 ist, fahren die Linearmotoren in die Startposition
  {
    digitalWrite(Relais1pin, HIGH); //Vertikalachse in die unterste Stellung
    digitalWrite(Relais2pin, LOW); //Vertikalachse in die unterste Stellung
    Endschalter2Status = digitalRead(Endschalter2pin);
    if (Endschalter2Status = HIGH); // Wenn der untere Endschalter erreicht wurde, sollen die Relais deaktiviert werden
    {
      digitalWrite(Relais1pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }
  }

  else if (LDRcheck > 350) // Wenn der Wert über 350 ist, startet die Ausrichtung
  {
    if (-1 * TOL > dvert || dvert > TOL) // Überprüfen, ob die diffirenz in der Toleranz liegt, wenn nicht vertikalen Winkel verändern
      if (MWT > MWU) // LDR oben heller wie unten, runter fahren
      {
        Endschalter1Status = digitalRead(Endschalter1pin);
        if (Endschalter1pin = HIGH); // Wenn der untere Endschalter erreicht wurde, soll nichts passieren
        {
          digitalWrite(Relais1pin, LOW);
          digitalWrite(Relais2pin, LOW);
        }
      }
      else if (Endschalter2pin = LOW); // Wenn der untere Endschalter erreicht nicht wurde, soll er fahren
    {
      digitalWrite(Relais1pin, LOW);
      digitalWrite(Relais2pin, HIGH);
    }
    if (dvert < 10) // Wenn der Vertikale Wert
    {
      digitalWrite(Relais2pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }

    else if (MWT < MWU) // LDR unten heller wie oben
    {
      Endschalter1pin = digitalRead(Endschalter1pin);
      if (Endschalter1pin = HIGH); // Wenn der obere Endschalter erreicht wurde, soll nichts passieren
      {
        digitalWrite(Relais1pin, LOW);
        digitalWrite(Relais2pin, LOW);
      }
    }
    else if (Endschalter1pin = HIGH); // Wenn der untere Endschalter erreicht wurde, soll er fahren
    {
      digitalWrite(Relais1pin, HIGH);
      digitalWrite(Relais2pin, LOW);
    }
    if (dvert < 10) // Wenn der Vertikale Wert
    {
      digitalWrite(Relais2pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }
  }
  // Die 4 Helligkeitswerte und die Grad Zahl Servomotoren zu Testzwecken an den PC übertragen
  Serial.print ("LDRol:"); Serial.print(OL); // LDR oben links
  Serial.print (" LDRor:"); Serial.println(OR); // LDR oben rechts
  Serial.print ("LDRul:"); Serial.print(UL); // LDR unten links
  Serial.print (" LDRur:"); Serial.println(UR); // LDR unten rechts
  Serial.print ("Endschalter oben:"); Serial.print(Endschalter1Status); // Endschalter Vertikal oben
  Serial.print (" Endschalter unten:"); Serial.println (Endschalter2Status); // Endschalter Vertikal unten
  Serial.print ("LDR Gesamt:"); Serial.println(LDRcheck); //LDR Gesamtwert
  delay(5000);
}

Durch Dein delay(5000) können die Endschalter überfahren werden.

Gruß Tommy

Das ist aktuell nur drin, damit die Werte im Seriellen Monitor lesbar sind...oder kann man es anders anpassen?

Ist den alles andere so ok?

newpv:
oder kann man es anders anpassen?

Ja, mit millis().

Beschreibe doch mal, was geht und was nicht.

Gruß Tommy

Beschreibe doch mal, was geht und was nicht.

Und was deine Testausgaben zeigen …

static unsigned long lastprint;  // statt delay(5000);
if (millis() - lastprint > 5000) {
    lastprint = millis();
    Serial.print( ... ) // Testausgabe alle 5 s
    ...
}

Bei BlinkWithoutDelay geht es nicht um Blinken, sondern um WithoutDelay

Also aktuell ist es, wenn ich Strom auf dem Arduino geben zum Starten wird sofort das Relais 1 geschaltet. Mehr passiert nicht. Egal ob ich die LDRs abdunkle oder mit Taschenlampe anleichte…

Habe jetzt den Sketch mal angepasst mit deiner Vorlage @michael_x

// Sonnen Verfolgung v3.2 vom 18.12.2020

int Endschalter1pin = 2; // Vertikal Endschalter oben
int Endschalter1Status = 0; // Zustand des Endschalter oben merken
int Endschalter2pin = 3; // Vertikal Endschalter unten
int Endschalter2Status = 0; // Zustand des Endschalter unten merken

int Relais1pin = 4; // Relais 1 für Vertikale Achse, hoch fahren
int Relais2pin = 5; // Relais 2 für Vertikale Achse, runter fahren

// LDR Stiftverbindungen, Name = analogpin;
const byte LDRol = 0; // LDR oben links
const byte LDRor = 1; // LDR oben rechts
const byte LDRul = 2; // LDR unten links
const byte LDRur = 3; // LDR unten rechts

void setup ()
{
  pinMode(Endschalter1pin, INPUT); //Pin Modus definieren, Eingang
  pinMode(Endschalter2pin, INPUT); //Pin Modus definieren, Eingang

  pinMode(Relais1pin, OUTPUT); //Pin Modus definieren, Ausgang
  pinMode(Relais2pin, OUTPUT); //Pin Modus definieren, Ausgang

  Serial.begin(9600); // Serielle Schnittstelle initialisieren
}

void loop ()
{
  int OL = analogRead (0) * 1.0; // oben links, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int OR = analogRead (1) * 1.0; // oben rechts, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int UL = analogRead (2) * 1.0; // unten links, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int UR = analogRead (3) * 1.0; // unten rechts, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int TOL = 100; // Wert, ab wann die Position geändert werden soll (Toleranz)

  int MWT = (OL + OR) / 2; // Mittelwert oben
  int MWU = (UL + UR) / 2; // Mittelwert unten
  int MWL = (OL + UL) / 2; // Mittelwert links
  int MWR = (OR + UR) / 2; // Mittelwert rechts

  int dvert = MWT - MWU; // Überprüfen der diffirence zwischen oben und unten
  int dhoriz = MWL - MWR; // Überprüfen der diffirence zwischen links und rechts
  int LDRcheck = (OL + OR + UL + UR); // Gesamtwert der 4 LDR

  if (LDRcheck < 200) // Wenn der Wert unter 200 ist, fahren die Linearmotoren in die Startposition
  {
    digitalWrite(Relais1pin, HIGH); //Vertikalachse in die unterste Stellung
    digitalWrite(Relais2pin, LOW); //Vertikalachse in die unterste Stellung
    Endschalter2Status = digitalRead(Endschalter2pin);
    if (Endschalter2Status = HIGH); // Wenn der untere Endschalter erreicht wurde, sollen die Relais deaktiviert werden
    {
      digitalWrite(Relais1pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }
  }

  else if (LDRcheck > 350) // Wenn der Wert über 350 ist, startet die Ausrichtung
  {
    if (-1 * TOL > dvert || dvert > TOL) // Überprüfen, ob die diffirenz in der Toleranz liegt, wenn nicht vertikalen Winkel verändern
      if (MWT > MWU) // LDR oben heller wie unten, runter fahren
      {
        Endschalter1Status = digitalRead(Endschalter1pin);
        if (Endschalter1pin = HIGH); // Wenn der untere Endschalter erreicht wurde, soll nichts passieren
        {
          digitalWrite(Relais1pin, LOW);
          digitalWrite(Relais2pin, LOW);
        }
      }
      else if (Endschalter2pin = LOW); // Wenn der untere Endschalter erreicht nicht wurde, soll er fahren
    {
      digitalWrite(Relais1pin, LOW);
      digitalWrite(Relais2pin, HIGH);
    }
    if (dvert < 10) // Wenn der Vertikale Wert
    {
      digitalWrite(Relais2pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }

    else if (MWT < MWU) // LDR unten heller wie oben
    {
      Endschalter1pin = digitalRead(Endschalter1pin);
      if (Endschalter1pin = HIGH); // Wenn der obere Endschalter erreicht wurde, soll nichts passieren
      {
        digitalWrite(Relais1pin, LOW);
        digitalWrite(Relais2pin, LOW);
      }
    }
    else if (Endschalter1pin = HIGH); // Wenn der untere Endschalter erreicht wurde, soll er fahren
    {
      digitalWrite(Relais1pin, HIGH);
      digitalWrite(Relais2pin, LOW);
    }
    if (dvert < 10) // Wenn der Vertikale Wert
    {
      digitalWrite(Relais2pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }
  }
  // Die 4 Helligkeitswerte und die Grad Zahl Servomotoren zu Testzwecken an den PC übertragen
  static unsigned long lastprint;
  if (millis() - lastprint > 5000) { // Testausgabe alle 5s
    lastprint = millis();
    Serial.print ("LDRol:"); Serial.print(OL); // LDR oben links
    Serial.print (" LDRor:"); Serial.println(OR); // LDR oben rechts
    Serial.print ("LDRul:"); Serial.print(UL); // LDR unten links
    Serial.print (" LDRur:"); Serial.println(UR); // LDR unten rechts
    Serial.print ("Endschalter oben:"); Serial.print(Endschalter1Status); // Endschalter Vertikal oben
    Serial.print (" Endschalter unten:"); Serial.println (Endschalter2Status); // Endschalter Vertikal unten
    Serial.print ("LDR Gesamt:"); Serial.println(LDRcheck); //LDR Gesamtwert
  }
}

Wenn ich jetzt ohne was angeschlossen zu haben, außer halt USB sieht es so aus:

20:52:58.718 -> LDRol:0 LDRor:0
20:52:58.718 -> LDRul:0 LDRur:0
20:52:58.718 -> Endschalter oben:0 Endschalter unten:1
20:52:58.718 -> LDR Gesamt:0

Wieso wird bei “Endschalter unten” eine “1” angezeigt, ob wohl nichts angeschlossen ist?
Im angeschlossenen Zustand geht die Ausgabe von den ganzen LDRs richtig!

    if (Endschalter2Status = HIGH); // Wenn der untere Endschalter erreicht wurde, sollen die Relais deaktiviert werden

{
    ...
  }

Super :slight_smile:

Das setzt Endschalter2Status auf HIGH und führt (unabhängig davon) den folgenden Block immer aus.
Wenn du das wirklich wolltest, solltest du es anders schreiben, sonst denkt jeder es sei foll valsch.

Danke für den Hinweis…habe alles nochmals über arbeitet, jetzt geht auch die Ausgabe von den Endschaltern…
Wenn die Endschalter betätigt werden geht er auf LOW und die Ausgabe zeigt mir jetzt die 1 an!

// Sonnen Verfolgung v3.9 vom 19.12.2020

int Endschalter1VEU = 2; // Vertikal Endschalter unten
int Endschalter2VEO = 3; // Vertikal Endschalter oben

int Relais1pin = 4; // Relais 1 für Vertikale Achse, hoch fahren
int Relais2pin = 5; // Relais 2 für Vertikale Achse, runter fahren

// LDR Stiftverbindungen, Name = analogpin;
const byte LDRol = 0; // LDR oben links
const byte LDRor = 1; // LDR oben rechts
const byte LDRul = 2; // LDR unten links
const byte LDRur = 3; // LDR unten rechts

void setup ()
{
  pinMode(Endschalter1VEU, INPUT); //Pin Modus definieren, Eingang
  pinMode(Endschalter2VEO, INPUT); //Pin Modus definieren, Eingang

  pinMode(Relais1pin, OUTPUT); //Pin Modus definieren, Ausgang
  pinMode(Relais2pin, OUTPUT); //Pin Modus definieren, Ausgang

  Serial.begin(9600); // Serielle Schnittstelle initialisieren
}

void loop ()
{
  int OL = analogRead (0) * 1.0; // oben links, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int OR = analogRead (1) * 1.0; // oben rechts, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int UL = analogRead (2) * 1.0; // unten links, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int UR = analogRead (3) * 1.0; // unten rechts, Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind
  int TOL = 100; // Wert, ab wann die Position geändert werden soll (Toleranz)

  int MWT = (OL + OR) / 2; // Mittelwert oben
  int MWU = (UL + UR) / 2; // Mittelwert unten
  int MWL = (OL + UL) / 2; // Mittelwert links
  int MWR = (OR + UR) / 2; // Mittelwert rechts

  int dvert = MWT - MWU; // Überprüfen der diffirence zwischen oben und unten
  int dhoriz = MWL - MWR; // Überprüfen der diffirence zwischen links und rechts
  int LDRcheck = (OL + OR + UL + UR); // Gesamtwert der 4 LDR

  int Endschalter1VEUStatus = digitalRead(Endschalter1VEU);
  int Endschalter2VEOStatus = digitalRead(Endschalter2VEO);

  if (LDRcheck < 200) // Wenn der Wert unter 200 ist, fahren die Linearmotoren in die Startposition
  {
    digitalWrite(Relais1pin, HIGH); //Vertikalachse in die unterste Stellung
    digitalWrite(Relais2pin, LOW); //Vertikalachse in die unterste Stellung
    if (Endschalter1VEUStatus == LOW) // Wenn der untere Endschalter erreicht wurde, sollen die Relais deaktiviert werden
    {
      digitalWrite(Relais1pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }
  }

  else if (LDRcheck > 350) // Wenn der Wert über 350 ist, startet die Ausrichtung
  {
    if (-1 * TOL > dvert || dvert > TOL) // Überprüfen, ob die diffirenz in der Toleranz liegt, wenn nicht vertikalen Winkel verändern
      if (MWT > MWU) // LDR oben heller wie unten, runter fahren
      {
        if (Endschalter1VEUStatus == LOW) // Wenn der untere Endschalter erreicht wurde, soll nichts passieren
        {
          digitalWrite(Relais1pin, LOW);
          digitalWrite(Relais2pin, LOW);
        }
      }
      else if (Endschalter1VEUStatus == HIGH) // Wenn der untere Endschalter erreicht nicht wurde, soll er fahren
      {
        digitalWrite(Relais1pin, LOW);
        digitalWrite(Relais2pin, HIGH);
      }
    if (dvert < 10) // Wenn der Vertikale Wert
    {
      digitalWrite(Relais2pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }

    else if (MWT < MWU) // LDR unten heller wie oben
    {
      if (Endschalter2VEOStatus == LOW) // Wenn der obere Endschalter erreicht wurde, soll nichts passieren
      {
        digitalWrite(Relais1pin, LOW);
        digitalWrite(Relais2pin, LOW);
      }
    }
    else if (Endschalter1VEUStatus == LOW) // Wenn der untere Endschalter erreicht wurde, soll er fahren
    {
      digitalWrite(Relais1pin, HIGH);
      digitalWrite(Relais2pin, LOW);
    }
    if (dvert < 10) // Wenn der Vertikale Wert
    {
      digitalWrite(Relais2pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }
  }
  // Die 4 Helligkeitswerte und die Endschalterzustände zu Testzwecken an den PC übertragen
  static unsigned long lastprint;
  if (millis() - lastprint > 2000)// Testausgabe alle 2s
  {
    lastprint = millis();
    Serial.print ("LDRol:"); Serial.print(OL); // LDR oben links
    Serial.print (" LDRor:"); Serial.println(OR); // LDR oben rechts
    Serial.print ("LDRul:"); Serial.print(UL); // LDR unten links
    Serial.print (" LDRur:"); Serial.println(UR); // LDR unten rechts
    Serial.print ("LDR Gesamt:"); Serial.println(LDRcheck); //LDR Gesamtwert
    Serial.print ("Relais 1:"); Serial.print(digitalRead(Relais1pin)); // Zustand Relais 1
    Serial.print (" Relais 2:"); Serial.println (digitalRead(Relais2pin)); // Zustand Relais 1
    if (Endschalter1VEUStatus == LOW) //Vertikal Endschalter unten betätigt st kommt die Ausgabe 1
    {
      Serial.print ("Endschalter1VEU:"); Serial.print("1");
    }
    else if (Endschalter1VEUStatus == HIGH) //Vertikal Endschalter unten nicht betätigt kommt die Ausgabe 0
    {
      Serial.print ("Endschalter1VEU:"); Serial.print("0");
    }
    if (Endschalter2VEOStatus == LOW) //Vertikal Endschalter oben betätigt kommt die Ausgabe 1
    {
      Serial.print (" Endschalter2VEO:"); Serial.println("1");
    }
    else if (Endschalter2VEOStatus == HIGH) //Vertikal Endschalter oben nicht betätigt kommt die Ausgabe 0
    {
      Serial.print (" Endschalter2VEO:"); Serial.println("0");
    }
  }
}

Der Serielle Monitor sieht jetzt so aus:
16:23:13.580 → LDRol:0 LDRor:0
16:23:13.627 → LDRul:0 LDRur:0
16:23:13.627 → LDR Gesamt:0
16:23:13.627 → Relais 1:0 Relais 2:0
16:23:13.680 → Endschalter1VEU:1 Endschalter2VEO:1

Passte leider nicht in dem Post davor...

Beim Komplimieren bekomme ich diese Zeile in Orange angezeigt:

C:\Users\User\Desktop\Arduino Projekt Solar\Sonnen_Verfolgung_v2\Sonnen_Verfolgung_v2.ino: In function 'void loop()':
C:\Users\User\Desktop\Arduino Projekt Solar\Sonnen_Verfolgung_v2\Sonnen_Verfolgung_v2.ino:59:8: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
     if (-1 * TOL > dvert || dvert > TOL) // Überprüfen, ob die diffirenz in der Toleranz liegt, wenn nicht vertikalen Winkel verändern
        ^
C:\Users\User\Desktop\Arduino Projekt Solar\Sonnen_Verfolgung_v2\Sonnen_Verfolgung_v2.ino:40:7: warning: unused variable 'dhoriz' [-Wunused-variable]
   int dhoriz = MWL - MWR; // Überprüfen der diffirence zwischen links und rechts
       ^~~~~~

Ist das normal oder sind da noch Fehler drin?

Die Zeile mit der "unsued variable" ist ja erstmal egal, wird später verwendet!

Da sind pro Zeile 2 Fehler drin und das mehrfach:

if (Endschalter1VEUStatus = LOW);

Das = muss ein == sein (das wurde Dir bereits gesagt) und mit dem ; beendest Du das if und die Sachen in {} werden immer ausgeführt.

Ich empfehle Grundlagen zu lernen.

Gruß Tommy

Das = muss ein == sein (das wurde Dir bereits gesagt) und mit dem ; beendest Du das if und die Sachen in {} werden immer ausgeführt.

Es ist dann denke ich bei "else if" auch so, das wenn am Ende der Zeile ein ";" steht es beendet wird oder?

Danke für die Hilfe habe jetzt die Zeilen mit "=" geändert und mit den ";" auch! Passt das jetzt so?

Oben in den Posts habe ich den Sketch und die Fehlerausgabe erneuert!
Learning bei doing :wink:

PS.: Weitere Fehler behoben. Oben Ausgabe und Sketch aktualisiert

Schon besser.

    ...

digitalWrite(Relais1pin, HIGH); //Vertikalachse in die unterste Stellung
    digitalWrite(Relais2pin, LOW); //Vertikalachse in die unterste Stellung
    if (Endschalter1VEUStatus == LOW) // Wenn der untere Endschalter erreicht wurde, sollen die Relais deaktiviert werden
    {
      digitalWrite(Relais1pin, LOW);
      digitalWrite(Relais2pin, LOW);
    }

Dass Relais1pin für ca. 1 µs HIGH ist, wird nicht reichen, dass das Relais sich noch muckst.
Allein die vier analogRead am loop-Start sorgen dafür, dass der Rest des loop-Durchlaufs wesentlich länger dauert. Eine LED am Pin könnte man evtl. ganz schwach glimmen sehen. Ist hier also "nur" eine Schönheitsfrage.

Aber beim

if () 
  if () {
  }
  else

richtet sich der Compiler nicht nach der Einrückungstiefe, und du hilfst dir selber mit einem zusätzlichen { } Klammerpärchen.

Merke:
nur wenn

if (bed) Anweisung;

wirklich so kurz ist wie hier, sollte man sich selbst erlauben, die Klammer zu sparen.

if (bed1) {  // formal geht's ohne Klammern
   if (bed2) Anweisung;
   else // not bed2, aber bed1
    Alternative2;  
  // mit Klammern immer klarer
} else {
  // dies gilt für not bed1
}

Danke für deine/eure Antworten.
Diesen Fehler habe ich auch behoben, war nur ein Klammer fehler....

C:\Users\Marcel\Desktop\Arduino Projekt Solar\Sonnen_Verfolgung_v2\Sonnen_Verfolgung_v2.ino:59:8: warning: suggest explicit braces to avoid ambiguous 'else' [-Wdangling-else]
     if (-1 * TOL > dvert || dvert > TOL) // Überprüfen, ob die diffirenz in der Toleranz liegt, wenn nicht vertikalen Winkel verändern
^

from: michael_x Sun Dec 20 2020 11:36:22 GMT+0100 (Mitteleuropäische Normalzeit)

Schon besser.
Dass Relais1pin für ca. 1 µs HIGH ist, wird nicht reichen, dass das Relais sich noch muckst.
Allein die vier analogRead am loop-Start sorgen dafür, dass der Rest des loop-Durchlaufs wesentlich länger dauert. Eine LED am Pin könnte man evtl. ganz schwach glimmen sehen. Ist hier also "nur" eine Schönheitsfrage.

Kann man den "Schönheitsfehler" mit einem "delay ()" beheben?

Kann man den "Schönheitsfehler" mit einem "delay ()" beheben?

Beheben nicht. Ich tippe mal drauf, man merkt ihn eh nicht.
Wenn du es verbessern willst, dann mach in jedem loop - Durchlauf höchstens einmal (aber dann den richtigen) digitalWrite für einen Pin.

Also eher mit else oder mit einer anderen if - Abfrage.

Ok, ich lasse es dann erstmal so…

Habe jetzt bei den Sketch einiges geändert! Jetzt kommt auch solangsam die Funktion 8)
Wenn ich das hier in den Zeilen richtig sehe richtet sich die Zeile “if ((MWO < MWU)…” doch nicht nach der " if ((LDRcheck > START)", sondern ist so eine eigenständige Zeile. Richtig?

  // Vertikale Ausrichtung
  if ((LDRcheck > START) && (-1 * TOL > dvert || dvert > TOL)) // Wenn der START Wert höher ist, startet die Ausrichtung, Überprüfen, ob die diffirenz in der Toleranz liegt, wenn nicht vertikalen Winkel verändern
    if ((MWO < MWU) && (Endschalter2VEOStatus == LOW)) // LDR unten heller wie oben, Vertikalachse ausfahren, wenn Endschalter oben nicht Betätigt
    {
      digitalWrite(Relais1pin, HIGH); // Vertikalachse hochfahren
      digitalWrite(Relais2pin, LOW); // Vertikalachse hochfahren
    }
  if ((MWO == MWU) || (Endschalter2VEOStatus == HIGH)) // LDR unten und oben gleich oder Endschalter oben betätigt, Relais deaktivieren
  {
    digitalWrite(Relais1pin, LOW); // Relais1 deaktivieren
    digitalWrite(Relais2pin, LOW); // Relais2 deaktivieren
  }

so eine eigenständige Zeile

Bei Anweisungen gibt es keine Zeilen bei C/C++

Der komplette Block

    if ((MWO < MWU) && (Endschalter2VEOStatus == LOW)) // LDR unten heller wie oben, Vertikalachse ausfahren, wenn Endschalter oben nicht Betätigt
    {
      digitalWrite(Relais1pin, HIGH); // Vertikalachse hochfahren
      digitalWrite(Relais2pin, LOW); // Vertikalachse hochfahren
    }

(inklusive der if Abfrage) wird nur ausgeführt, wenn die vorherige if Bedingung erfüllt ist.
Die zwei if wirken also wie ein einziges, mit && verbundene Bedingungen.

Das dritte if
  if ((MWO == MWU) || (Endschalter2VEOStatus == HIGH)) // LDR unten und oben gleich oder Endschalter oben betätigt, Relais deaktivieren ist unabhängig vom vorigen Block. Kann aber nur true werden, wenn das vorige if false ergeben hat.