Projekte und Tutorials für Arduino › Foren › StartHardware-Forum › Eisenbahn Steuern
Schlagwörter: Programm anhalten bis Belegt
- Dieses Thema hat 1 Antwort und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 3 Jahre, 4 Monaten von Stefan Hermann.
-
AutorBeiträge
-
Hans-PeterTeilnehmer
Hallo Zusammen,
hier benötige ich mal Hilfe.Dies ist das noch unvollständige Programm:
//Variablendefinition
//Gleis bestromen Pin 1 bis 10
//Gleis 1 im Schattenbahnhof aussen
int Gleis_1=1;
//Gleis 2 im Schattenbahnhof innen
int Gleis_2=2;
//Gleis 3 im Bahnhof aussen
int Gleis_3=3;
//Gleis 4 im Schattenbahnhof innen
int Gleis_4=4;
//Gleis 5 Innengleis
int Gleis_5=5;
//Gleis 6 Abstellgleis im Schattenbahnhof
int Gleis_6=6;
//Ausßengleis bestromen
int Aussengleis=7;//Weichen Schalten Pin 11-15
//Weichen aus Gleis 1 schalten
int Weichen_Gleis_1=11;
//Weichen aus Gleis 2 schalten
int Weichen_Gleis_2=12;
//Weichen aus Gleis 3 schalten
int Weichen_Gleis_3=13;
//Weichen aus Gleis 4 schalten
int Weichen_Gleis_4=14;//Schaltgleise Pin 21-25
//Schaltgleis Gleis 1
int SG_1=21;
//Schaltgleis Gleis 2
int SG_2=22;
//Schaltgleis Gleis 3
int SG_3=23;
//Schaltgleis Gleis 4
int SG_4=24;
//Schaltgleis Gleis 5
int SG_5=25;void setup() {
// Pindefinitionen
pinMode(Gleis_1, OUTPUT);
pinMode(Gleis_2, OUTPUT);
pinMode(Gleis_3, OUTPUT);
pinMode(Gleis_4, OUTPUT);
pinMode(Gleis_5, OUTPUT);
pinMode(Gleis_6, OUTPUT);
pinMode(Aussengleis, OUTPUT);
pinMode(Weichen_Gleis_1, OUTPUT);
pinMode(Weichen_Gleis_2, OUTPUT);
pinMode(Weichen_Gleis_3, OUTPUT);
pinMode(Weichen_Gleis_4, OUTPUT);
pinMode(SG_1, INPUT);
pinMode(SG_2, INPUT);
pinMode(SG_3, INPUT);
pinMode(SG_4, INPUT);
pinMode(SG_5, INPUT);//Startkonfiguartion
//Gleis 1 und 2 im Schattenbahnhof belegt
//Gleis 3 belegt
//Gleis 5 im Bahnhof belegt// Weichen Grundstellung schalten
//Weichen zum befahren von Gleis 1 schalten
digitalWrite(Weichen_Gleis_1, HIGH);
delay(500);
//Weichen zum befahren von Gleis 4 schalten
digitalWrite(Weichen_Gleis_4, HIGH);
delay(500);
//Gleis 5 bestromen
digitalWrite(Gleis_5, HIGH);
//Aussengleis 7 bestromen
digitalWrite(Aussengleis, HIGH);//Startaktion
//Gleis 1 für 2 sek. bestromen
digitalWrite(Gleis_1, HIGH);
delay(2000);
//Gleid 4 für einfahrenden Zug bestromen
digitalWrite(Gleis_4, HIGH);}
void loop() {
// Programmablauf:
//(1) Zur läuft in Gleis 4 ein, bleibt stehen, schaltet die Weichen für Gleis 2 und 3 und bestromt Gleis 2
if (digitalRead(SG_4)==HIGH){
digitalWrite(Gleis_4, LOW);
digitalWrite(Weichen_Gleis_3, HIGH);
delay(500);
digitalWrite(Weichen_Gleis_2, HIGH);
delay(500);
digitalWrite(Gleis_3, HIGH);
digitalWrite(Gleis_2, HIGH);
} else {
digitalWrite(Gleis_6, LOW);
}
//warten, bis der Zug auf Gleis 2 hält
for (int SG_2=LOW; SG_2=HIGH; SG_2=LOW){
delay(250);
}//Status: Gleis 1 – 1
// Gleis 2 – 0
// Gleis 3 – 1
// Gleis 4 – 1//(2) Zur läuft in Gleis 2 ein, bleibt stehen, schaltet die Weichen für Gleis 1 und 3 und bestromt Gleis 3
if (digitalRead(SG_2)==HIGH){
digitalWrite(Gleis_2, LOW);
digitalWrite(Weichen_Gleis_1, HIGH);
delay(500);
digitalWrite(Weichen_Gleis_3, HIGH);
delay(500);
digitalWrite(Gleis_3, HIGH);
digitalWrite(Gleis_1, HIGH);
} else {
digitalWrite(Gleis_6, LOW);
}
//Status: Gleis 1 – 1
// Gleis 2 – 1
// Gleis 3 – 0
// Gleis 4 – 1//(3) Zur läuft in Gleis 3 ein, bleibt stehen, schaltet die Weichen für Gleis 1 und 4 und bestromt Gleis 3
if (digitalRead(SG_3)==HIGH){
digitalWrite(Gleis_3, LOW);
digitalWrite(Weichen_Gleis_4, HIGH);
delay(500);
digitalWrite(Weichen_Gleis_2, HIGH);
delay(500);
digitalWrite(Gleis_4, HIGH);
digitalWrite(Gleis_1, HIGH);
} else {
digitalWrite(Gleis_6, LOW);
}
//Status: Gleis 1 – 1
// Gleis 2 – 1
// Gleis 3 – 0
// Gleis 4 – 1//(4) Zur läuft in Gleis 1 ein, bleibt stehen, schaltet die Weichen für Gleis 2 und 4 und bestromt Gleis 43
if (digitalRead(SG_1)==HIGH){
digitalWrite(Gleis_1, LOW);
digitalWrite(Weichen_Gleis_2, HIGH);
delay(500);
digitalWrite(Weichen_Gleis_4, HIGH);
delay(500);
digitalWrite(Gleis_1, HIGH);
digitalWrite(Gleis_4, HIGH);
} else {
digitalWrite(Gleis_6, LOW);
}
//Status: Gleis 1 – 1
// Gleis 2 – 1
// Gleis 3 – 1
// Gleis 4 – 0}
es gibt dort eine Programmzeile:
//warten, bis der Zug auf Gleis 2 hält
for (int SG_2=LOW; SG_2=HIGH; SG_2=LOW){
delay(250);Ich möchte das Programm so lange an der stelle halten, bis SG_2 HIGH wird.
Kann das so funktionieren oder gibt es eine bessere Lösung?Danke für eure hilfe.
Stefan HermannVerwalterHallo Hans-Peter,
ich benutze für solche Aufgaben gern State-Machines. Das habe ich hier mal näher beschrieben: Tee-Timer mit Arduino.
Das ist ganz ähnlich zu den if-Abfragen, die du verwendest, gibt aber etwas mehr Struktur. Ich hoffe, das hilft dir ein bisschen.
Liebe Grüße
Stefan
-
AutorBeiträge