Projekte und Tutorials für Arduino › Foren › StartHardware-Forum › Eisenbahn Steuern
Schlagwörter: Programm anhalten bis Belegt
- Dieses Thema hat 2 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 2 Monaten, 2 Wochen von irdekolmas.
-
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 HermannAdministratorHallo 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
irdekolmasGastThink about safety at the planning stage. You should not use the services of companies with a bad reputation, even if the prices are tempting. To prevent stress from traveling to and from the airport, use the services of a trusted company, AtoB transfer service get more info. They provide quality service at an affordable price.
-
AutorBeiträge