ich habe mich mal auf Deinen Seiten mit
beschäftigt, komme aber bei einem komplexeren Ablauf nicht weiter.millis() anstelle von delay()
Bei mir ist eine Ampelanlage in Betrieb, aber dazu müssten jetzt die "delays" verschwinden, da noch ein Hallsensor und ein Relais hinzukommen soll.
Der mittlere Teil ist eine einspurige Straße , die entweder von links nach rechts oder von rechts nach links durchfahren wird.
Omnibusse welche von der linken Seite kommen, werden von einem Hallsensor erkannt und ein Servo
lenkt den Omnibus auf die Spur "Bushalt".
Stop vor der jeweiligen "roten Ampel" erfolgt durch ein externes Infrarotsinal per Relais an das Fahrzeug.
Zur Zeit läuft folgender Sketch auf einem nano - die delays haben hier keine Auswirkung auf den Ablauf.
So, nun soll noch ein Hallsensor und ein Relais rein -



Code: Alles auswählen
// Ampelsteuerung mit langer Rotphase für Engstelle und Verzögerung für Bus. geschaltenes Relais zum schalten der IR
// Seite 1 Bahnhof rechts
int red_1 = 4; // Rot
int yellow_1 = 3; // Gelb
int green_1 = 2; // Grün
// Seite 2 Bahnhof links
int red_2 = 7; // Rot
int yellow_2 = 6; // Gelb
int green_2 = 5; // Grün
// Seite 3 Busspur
int green_3 = 8; // Grün
int yellow_3 = 9; // Gelb
int red_3 = 10; // Rot
// Relais
int relais_10 = 11; // Relais Seite 1 Bahnhof rechts
int relais_11 = 12; // Relais Seite 2a Bahnhof links
int relais_12 = 13; // Relais Seite 2b Busspur
void setup() {
pinMode(red_1, OUTPUT);
pinMode(yellow_1, OUTPUT);
pinMode(green_1, OUTPUT);
pinMode(red_2, OUTPUT);
pinMode(yellow_2, OUTPUT);
pinMode(green_2, OUTPUT);
pinMode(red_3, OUTPUT);
pinMode(yellow_3, OUTPUT);
pinMode(green_3, OUTPUT);
pinMode(relais_10, OUTPUT);
pinMode(relais_11, OUTPUT);
pinMode(relais_12, OUTPUT);
}
void loop() {
// A = Starteinstellung
digitalWrite(red_1, HIGH); // Rot auf Seite 1 Bahnhof rechts ein
digitalWrite(relais_10, HIGH); // An dieser Stelle würde das Relais von Seite 1 einsschalten
digitalWrite(green_2, HIGH); // Grün auf Seite 2a ein
digitalWrite(relais_11, LOW); // An dieser Stelle würde das Relais von Seite 2 ausschalten
digitalWrite(green_3, HIGH); // Grün auf Seite 2b Busspur ein
digitalWrite(relais_12, LOW); // An dieser Stelle würde das Relais von Seite 2b ausschalten
// B = Grünphase von Seite 2a
// -------------------------------------------------------------------------------------------
delay(10000); // Ampelphase mit z.B. 10 Sekunden Länge
// -------------------------------------------------------------------------------------------
// C = Ende der Grünphase von Seite 2b Busspur
digitalWrite(green_3, LOW); // Grünes Licht aus
digitalWrite(relais_12, HIGH); // An dieser Stelle würde das Relais von Seite 2b einsschalten
digitalWrite(yellow_3, HIGH); // Gelbes Licht ein
// -------------------------------------------------------------------------------------------
delay(1000);
// -------------------------------------------------------------------------------------------
digitalWrite(red_3, HIGH); // Rotes Licht ein
digitalWrite(yellow_3, LOW); // Gelbes Licht aus
// -------------------------------------------------------------------------------------------
delay(2000); // 2 Sekunden Pause bevor Bahnhof links auf grün stellt
// -------------------------------------------------------------------------------------------
// D = Ende der Grünphase von Seite 2a Bahnhof links
digitalWrite(green_2, LOW); // Grünes Licht aus
digitalWrite(relais_11, HIGH); // An dieser Stelle würde das Relais von Seite 2a einsschalten
digitalWrite(yellow_2, HIGH); // Gelbes Licht ein
// -------------------------------------------------------------------------------------------
delay(1000);
// -------------------------------------------------------------------------------------------
digitalWrite(red_2, HIGH); // Rotes Licht ein
digitalWrite(yellow_2, LOW); // Gelbes Licht aus
// E = Beidseitige Rotphase 10 Sekunden
// -------------------------------------------------------------------------------------------
delay(10000); // 10 Sekunden Pause
// -------------------------------------------------------------------------------------------
// F = Beginn der Grünphase von Seite 1
digitalWrite(red_1, LOW); // Rotes Licht aus
digitalWrite(green_1, HIGH); // Grünes Licht an
digitalWrite(relais_10, LOW); // An dieser Stelle würde das Relais von Seite 1 ausschalten
// G = Grünphase von 1
// -------------------------------------------------------------------------------------------
delay(10000); // Ampelphase mit z.B. 10 Sekunden Länge
// -------------------------------------------------------------------------------------------
// H = Ende der Grünphase von 1
digitalWrite(green_1, LOW); // Grünes Licht aus
digitalWrite(relais_10, HIGH); // An dieser Stelle würde das Relais von Seite 1 einschalten
digitalWrite(yellow_1, HIGH); // Gelbes Licht an
// -------------------------------------------------------------------------------------------
delay(1000); // 1 Sekunde Pause
// -------------------------------------------------------------------------------------------
digitalWrite(yellow_1, LOW); // Gelbes Licht aus
digitalWrite(red_1, HIGH); // Rotes Licht an
// I = Beidseitige Rotphase 10 Sekunden
// -------------------------------------------------------------------------------------------
delay(10000);
// -------------------------------------------------------------------------------------------
// J = Beginn der Grünphase von Seite 2a und 2b
digitalWrite(red_2, LOW); // Rotes Licht aus
digitalWrite(red_3, LOW); // Rotes Licht aus
}
Vielleich gibt es einen praktikablen Lösungsansatz?
Schönen Nachmittag, ich such jetzt meine Lammfellstiefel raus.