Nein, ich möchte bei einer Boe in waagerechte fahren...bis es wieder vorbei ist!
Deshlab auch meine Frage, wenn eine Boe gekommen ist in waagerechte fahren und dann soll eine Zeit laufen, z.B. wenn dann wieder eine Boe kommt soll die Zeit wieder vom neuen beginnen. Ich suche nur nach ideen wie man es umsetzen kann.
Der akteulle Sketch ohne WIndgeschwindigkeit sieht so aus:
// Sonnen Verfolgung Vertikal und Horizontal v9.0 vom 14.06.2021
const int Endschalter1VEVS = 2; // Vertikal Endschalter vorne, schließer
const int Endschalter2VEHS = 3; // Vertikal Endschalter hinten, schließer
const int Endschalter2VEOOE = 4; // Vertikal Endschalter hinten, öffner
const int Relais1pin = 5; // Relais 1 für Vertikale Achse, Zylinder ausfahren
const int Relais2pin = 6; // Relais 2 für Vertikale Achse, Zylinder einfahren
const int Endschalter3HEVS = 7; // Horizontal Endschalter vorne, schließer
const int Endschalter4HEHS = 8; // Horizontal Endschalter hinten, schließer
const int Endschalter4HEHOE = 9; // Horizontal Endschalter hinten, öffner
const int Relais3pin = 10; // Relais 3 für Horizontal Achse, Zylinder ausfahren
const int Relais4pin = 11; // Relais 4 für Horizontal Achse, Zylinder einfahren
// LDR Stiftverbindungen am Analogpin, LDR5528, GL5528, 0,5-200kOhm, 5mm
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
// Feste Werte
int START = 300; // Wert ab wann das Programm wieder Startet (jeder Einzelner LDR)
int TOLV = 170; // Wert, ab wann die Position Veretikal geändert werden soll (Toleranz)
int TOLH = 170; // Wert, ab wann die Position Horizontal geändert werden soll (Toleranz)
int ENDEV = 10; // Wert zum Beenden der Ausrichtung Vertikal
int ENDEH = 10; // Wert zum Beenden der Ausrichtung Horizontal
int NACHT = 55; // Wert ab wann die Linearmotoren in Startposition fahren (Progamm bei Dunkelheit beendet, jeder Einzelner LDR)
void setup ()
{
pinMode(Endschalter1VEVS, INPUT); // Pin Modus definieren, Eingang, schließer
pinMode(Endschalter2VEHS, INPUT); // Pin Modus definieren, Eingang, schließer
pinMode(Endschalter2VEOOE, INPUT); // Pin Modus definieren, Eingang, öffner
pinMode(Relais1pin, OUTPUT); // Pin Modus definieren, Ausgang
pinMode(Relais2pin, OUTPUT); // Pin Modus definieren, Ausgang
pinMode(Endschalter3HEVS, INPUT); // Pin Modus definieren, Eingang, schließer
pinMode(Endschalter4HEHS, INPUT); // Pin Modus definieren, Eingang, schließer
pinMode(Endschalter4HEHOE, INPUT); // Pin Modus definieren, Eingang, öffner
pinMode(Relais3pin, OUTPUT); // Pin Modus definieren, Ausgang
pinMode(Relais4pin, 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 GWO = (OL + OR); // Gesamtwert oben
int GWU = (UL + UR); // Gesamtwert unten
int GWL = (OL + UL); // Gesamtwert links
int GWR = (OR + UR); // Gesamtwert rechts
int DVERT = abs(GWO - GWU); // Überprüfen der Diffirenz zwischen oben und unten, Vertikal, immer Positiv setzen
int DHORIZ = abs(GWL - GWR); // Überprüfen der Diffirenz zwischen links und rechts, Horizontal, immer Positiv setzen
int Endschalter1VEVSStatus = digitalRead(Endschalter1VEVS); // Zustand des Endschalter Vertikal vorne, schließer
int Endschalter2VEHSStatus = digitalRead(Endschalter2VEHS); // Zustand des Endschalter Vertikal hinten, schließer
int Endschalter2VEOOEStatus = digitalRead(Endschalter2VEOOE); // Zustand des Endschalter Vertikal hinten, öffner
int Endschalter3HEVSStatus = digitalRead(Endschalter3HEVS); // Zustand des Endschalter Horizontal vorne, schließer
int Endschalter4HEHSStatus = digitalRead(Endschalter4HEHS); // Zustand des Endschalter Horizontal hinten, schließer
int Endschalter4HEHOEStatus = digitalRead(Endschalter4HEHOE); // Zustand des Endschalter Horizontal hinten, öffner
// Vertikalachse ausrichten, Linearmotor 3000N 200mm
if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && (DVERT > TOLV) && (GWO < GWU) && ((Endschalter2VEHSStatus == LOW) || (Endschalter2VEOOEStatus == HIGH))) // // je LDR über "START" Wert, "DVERT" größer "TOLV" Wert, oben heller wie unten, Endschalter 2 schließer und öffner nicht betätigt
{
digitalWrite(Relais1pin, HIGH); // Zylinder ausfahren
digitalWrite(Relais2pin, LOW); // Relais2 deaktivieren
}
else if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && (DVERT > TOLV) && (GWO > GWU) && (Endschalter1VEVSStatus == LOW)) // je LDR über "START" Wert, "DVERT" größer "TOLV" Wert, oben dunkler wie unten, Endschalter 1 schließer nicht betätigt ist
{
digitalWrite(Relais1pin, LOW); // Relais1 deaktivieren
digitalWrite(Relais2pin, HIGH); // Zylinder einfahren
}
// Vertikalachse ausrichten abgeschlossen und die Relais 1 und 2 deaktivieren
if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && (DVERT <= ENDEV)) // LDR gesamt über "START" Wert, oben und unten gleich hell sind oder eine max. Differnz von "ENDEV" haben
{
digitalWrite(Relais1pin, LOW); // Relais1 deaktivieren
digitalWrite(Relais2pin, LOW); // Relais2 deaktivieren
}
else if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && ((Endschalter2VEHSStatus == HIGH) || (Endschalter2VEOOEStatus == LOW)) && (digitalRead(Relais1pin) == HIGH) && (digitalRead(Relais2pin) == LOW)) // je LDR über "START" Wert, Endschalter 2 schließer und öffner betätigt, Relais 1 betätigt und Relais 2 aus
{
digitalWrite(Relais1pin, LOW); // Relais1 deaktivieren
digitalWrite(Relais2pin, LOW); // Relais2 deaktivieren
}
else if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && (Endschalter1VEVSStatus == HIGH) && (digitalRead(Relais1pin) == LOW) && (digitalRead(Relais2pin) == HIGH)) // je LDR über "START" Wert, Endschalter 1 schließer betätigt, Relais 1 aus und Relais 2 betätigt ist
{
digitalWrite(Relais1pin, LOW); // Relais1 deaktivieren
digitalWrite(Relais2pin, LOW); // Relais2 deaktivieren
}
// Horizontalachse ausrichten, Linearmotor 3000N 100mm
if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && (DHORIZ > TOLH) && (GWL > GWR) && ((Endschalter4HEHSStatus == LOW) || (Endschalter4HEHOEStatus == HIGH))) // je LDR über "START" Wert, "DHORIZ" größer "TOLH" Wert, rechts heller wie links, Endschalter 4 schließer und öffner nicht betätigt
{
digitalWrite(Relais3pin, HIGH); // Zylinder ausfahren
digitalWrite(Relais4pin, LOW); // Relais4 deaktivieren
}
else if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && (DHORIZ > TOLH) && (GWL < GWR) && (Endschalter3HEVSStatus == LOW)) // je LDR über "START" Wert, "DHORIZ" größer "TOLH" Wert, rechts dunkler wie links, Endschalter 3 schließer nicht betätigt
{
digitalWrite(Relais3pin, LOW); // Relais3 deaktivieren
digitalWrite(Relais4pin, HIGH); // Zylinder einfahren
}
// Horizontalachse ausrichten abgeschlossen und die Relais 3 und 4 deaktivieren
if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && (DHORIZ <= ENDEH)) // je LDR über "START" Wert, oben und unten gleich hell sind oder eine max. Differnz von "ENDEH" haben
{
digitalWrite(Relais3pin, LOW); // Relais3 deaktivieren
digitalWrite(Relais4pin, LOW); // Relais4 deaktivieren
}
else if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && ((Endschalter4HEHSStatus == HIGH) || (Endschalter4HEHOEStatus == LOW)) && (digitalRead(Relais3pin) == HIGH) && (digitalRead(Relais4pin) == LOW)) // je LDR über "START" Wert, Endschalter 4 schließer und öffner betätigt, Relais 3 betätigt und Relais 4 aus
{
digitalWrite(Relais3pin, LOW); // Relais3 deaktivieren
digitalWrite(Relais4pin, LOW); // Relais4 deaktivieren
}
else if ((OL > START) && (OR > START) && (UL > START) && (UR > START) && (Endschalter3HEVSStatus == HIGH) && (digitalRead(Relais3pin) == LOW) && (digitalRead(Relais4pin) == HIGH)) // je LDR über "START" Wert, Endschalter 3 schließer betätigt, Relais 3 aus und Relais 4 betätigt ist
{
digitalWrite(Relais3pin, LOW); // Relais3 deaktivieren
digitalWrite(Relais4pin, LOW); // Relais4 deaktivieren
}
// Grundstellung bei Dunkelheit, Wert "NACHT"
if ((OL < NACHT) && (OR < NACHT) && (UL < NACHT) && (UR < NACHT) && (Endschalter1VEVSStatus == LOW))// je LDR unter "ENDE" Wert und der Endschalter 1 schließer nicht betätigt, fährt die Vertikalachse in die Startposition
{
digitalWrite(Relais1pin, LOW); // Relais1 deaktivieren
digitalWrite(Relais2pin, HIGH); // Zylinder einfahren, Vertikal
}
if ((OL < NACHT) && (OR < NACHT) && (UL < NACHT) && (UR < NACHT) && (Endschalter1VEVSStatus == HIGH)) // je LDR unter "NACHT" Wert ist, der Endschalter 1 schließer betätigt
{
digitalWrite(Relais1pin, LOW); // Relais1 deaktivieren
digitalWrite(Relais2pin, LOW); // Relais2 deaktivieren
}
if ((OL < NACHT) && (OR < NACHT) && (UL < NACHT) && (UR < NACHT) && (Endschalter3HEVSStatus == LOW))// je LDR unter "NACHT" Wert und der Endschalter 3 schließer nicht betätigt, fährt die Horizontalachse in die Startposition
{
digitalWrite(Relais3pin, LOW); // Relais3 deaktivieren
digitalWrite(Relais4pin, HIGH); // Zylinder einfahren, Horizontal
}
if ((OL < NACHT) && (OR < NACHT) && (UL < NACHT) && (UR < NACHT) && (Endschalter3HEVSStatus == HIGH)) // je LDR unter "NACHT" Wert ist, der Endschalter 3 schließer betätigt
{
digitalWrite(Relais3pin, LOW); // Relais3 deaktivieren
digitalWrite(Relais4pin, LOW); // Relais4 deaktivieren
}
// Die 4 Helligkeitswerte, Berechnung der Helligkeitswerte, Relais und die Endschalterzustände zu Testzwecken an den PC übertragen
static unsigned long lastprint;
if (millis() - lastprint > 3000) // Testausgabe alle 3s
{
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("GWO:"); Serial.print(GWO); // Gesamtwert oben
Serial.print(" GWU:"); Serial.println(GWU); // Gesamtwert unten
Serial.print("GWL:"); Serial.print(GWL); // Gesamtwert links
Serial.print(" GWR:"); Serial.println(GWR); // Gesamtwert rechts
Serial.print("Diff O & U:"); Serial.print(DVERT); // Diffirence zwischen oben und unten
Serial.print(" Diff L & R:"); Serial.println(DHORIZ); // Diffirence zwischen links und rechts
Serial.print("Relais 1:"); Serial.print(digitalRead(Relais1pin)); // Zustand Relais 1
Serial.print(" Relais 2:"); Serial.println (digitalRead(Relais2pin)); // Zustand Relais 1
Serial.print("Relais 3:"); Serial.print(digitalRead(Relais3pin)); // Zustand Relais 1
Serial.print(" Relais 4:"); Serial.println (digitalRead(Relais4pin)); // Zustand Relais 1
Serial.print("Endschalter1VEVS:");
if (Endschalter1VEVSStatus == LOW) // Vertikal Endschalter vorne betätigt kommt die Ausgabe 0
{
Serial.println("0");
}
else if (Endschalter1VEVSStatus == HIGH) // Vertikal Endschalter vorne nicht betätigt kommt die Ausgabe 1
{
Serial.println("1");
}
Serial.print("Endschalter2VEHS:");
if (Endschalter2VEHSStatus == LOW) // Vertikal Endschalter hinten betätigt kommt die Ausgabe 0
{
Serial.print("0");
}
else if (Endschalter2VEHSStatus == HIGH) // Vertikal Endschalter hinten nicht betätigt kommt die Ausgabe 1
{
Serial.print("1");
}
Serial.print(" Endschalter2VEOOE:");
if (Endschalter2VEOOEStatus == LOW) // Vertikal Endschalter hinten betätigt kommt die Ausgabe 0
{
Serial.println("0");
}
else if (Endschalter2VEOOEStatus == HIGH) // Vertikal Endschalter hinten nicht betätigt kommt die Ausgabe 1
{
Serial.println("1");
}
Serial.print("Endschalter3HEVS:");
if (Endschalter3HEVSStatus == LOW) // Vertikal Endschalter vorne betätigt kommt die Ausgabe 0
{
Serial.println("0");
}
else if (Endschalter3HEVSStatus == HIGH) // Vertikal Endschalter vorne nicht betätigt kommt die Ausgabe 1
{
Serial.println("1");
}
Serial.print("Endschalter4HEHS:");
if (Endschalter4HEHSStatus == LOW) // Vertikal Endschalter hinten betätigt kommt die Ausgabe 0
{
Serial.print("0");
}
else if (Endschalter4HEHSStatus == HIGH) // Vertikal Endschalter hinten nicht betätigt kommt die Ausgabe 1
{
Serial.print("1");
}
Serial.print(" Endschalter4HEHOE:");
if (Endschalter4HEHOEStatus == LOW) // Vertikal Endschalter oben betätigt kommt die Ausgabe 0
{
Serial.println("0");
}
else if (Endschalter4HEHOEStatus == HIGH) // Vertikal Endschalter oben nicht betätigt kommt die Ausgabe 1
{
Serial.println("1");
}
}
}