RE: MobaTools - EggTimer vs. delay

#1 von e69-fan ( gelöscht ) , 17.02.2020 15:57

Hallo und Guten Tag,

ich möchte mich erstmal hier im Forum vorstellen. Ich bin seit längerer Zeit stiller Mitleser und nach der Veröffentlichung der MobaTools bin ich endlich einen Schritt weiter mit meinem Anlagenbau gekommen. Ich setze die die MobaTools hauptsächlich zum Steuern von Servos und "Blinken" ein.

An dieser Stelle - l vielen Dank an microbahner für die tolle software.

Ich möchte nun die Bundeswehrfahrzeuge von meinem DC-Carsystem 1zu87 vor einem Tor steuern und habe den Ablauf in dem Sketch beschrieben.
Wahrscheinlich durch die "delays" ist der Ablauf nach einschalten des arduinno nano fehlerhaft. Das Relais" RELAIS_A2" schaltet zu früh und das Fahrzeug rutscht durch.

Wie sollte der Ablauf umgestaltet werden?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 

#include <MobaTools.h>
 
/* Gesteuerter Ablauf für DC-Car System 1:87, "Bundeswehr"
Auslösung durch Hallsensoren in der Fahrbahn, schaltbare Stoppimpulse
werden vom DC-Car Funktionsdecoder erzeugt
Fahrzeugverteilung durch unterschiedliche Polarität der Magneten am Fahrzeug
 
2020/ e69-fan
*/
const int HALL_1 = 3; //HALL_Sensor1 an Pin 3 vor Kasernentor
const int HALL_2 = 4; //HALL_Sensor2 an Pin 4 nach Kontrollbereich
const int servo2_Drehtor = 10; //Drehtor
const int RELAIS_A2 = 6; //Relais_A2 an Pin 6
const int RELAIS_A3 = 7; //Blinkrelais an Pin 7
const byte autoOff = 1;
 
bool tasterStatus1, tasterStatus2;
 
MoToServo Drehtor;
 
void setup() {
pinMode(HALL_1, INPUT_PULLUP);
pinMode(HALL_2, INPUT_PULLUP);
pinMode(RELAIS_A2, OUTPUT);
pinMode(RELAIS_A3, OUTPUT);

/*// IR1 im Wechsel mit IR2 "STOP vor Tor - FAHRT aus Kontrollbereich"
"FAHRT durch Tor - STOP im Kontrollbereich"
 
// -------------------- STARTposition ------------------------------------------ //
// beim Start stehen alle Relais auf HIGH/AUS, erstes LOW schaltet Relais EIN // */
 
digitalWrite(RELAIS_A2, HIGH);
digitalWrite(RELAIS_A3, HIGH);
Drehtor.attach(servo2_Drehtor, autoOff);
Drehtor.setSpeed( 10); //Geschwindigkeit einstellen
Drehtor.write(140); //Tor zu
 
}
 
void loop() {
tasterStatus1 = digitalRead(HALL_1); //Vor Kasernentor
tasterStatus2 = digitalRead(HALL_2); //Nach Kontrollbereich
 
if (tasterStatus1 == LOW) {

// ?? digitalWrite(RELAIS_A2, HIGH); //IR1 - Tor geschlossen - STOP vor Tor

digitalWrite(RELAIS_A3, LOW); //Blinklicht AN
Drehtor.attach(servo2_Drehtor, autoOff);
Drehtor.write(20); //Tor öffnen
 
delay ( 10000 ); //Dauer Öffnungsvorgang
 
digitalWrite(RELAIS_A3, HIGH); //Blinklicht AUS
digitalWrite(RELAIS_A2, LOW ); //IR1 - Tor offen - FAHRT in Konrollbereich
 
delay(15000); //Kontrollzeit
 
digitalWrite(RELAIS_A2, HIGH); //IR1 - STOP vor Tor für folgende Fahrzeuge
}
 
if (tasterStatus2 == LOW ) {
digitalWrite(RELAIS_A3, LOW); //Blinklicht AN
Drehtor.attach(servo2_Drehtor, autoOff);
Drehtor.write(140); //Tor schließen
 
delay ( 5000 ); //Dauer Schließvorgang
 
digitalWrite(RELAIS_A3, HIGH); //Blinklicht AUS
 
delay(20);
 
}
}
 
 



Vielen Dank für die Hilfe - e69-fan


e69-fan

RE: MobaTools - EggTimer vs. delay

#2 von VT601 , 17.02.2020 18:33

Hallo e69-fan.

Es ist die Delay die deine Wünsche stört. Wenn Delay genutzt wird stopt der ganze Ablauf des Programms.
Es ist jetzt besser einen Timer zu nutzen.
Davon gibt es manche Beispiele im Internet und bri YouTube. Such mal nach Interupt und Timer.

John


Fahre Märklin-system, unter Nutzung von CS3+ und IB-Basic und PC-Steuerung über Rocrail.
Mitglied des 3railforum.nl und die M-Track Gruppe NL (www.mtrack-org)
Lese und schreibe Niederländisch, Deutsch und Englisch.
YouTubekanal: VT601


 
VT601
InterRegio (IR)
Beiträge: 218
Registriert am: 22.03.2017
Ort: NL-Gouda
Gleise K-Gleis und C-Gleis
Spurweite H0
Steuerung CS3+, IB-Basic
Stromart AC, Digital


RE: MobaTools - EggTimer vs. delay

#3 von MicroBahner , 26.02.2020 11:45

Hallo,
hast Du dir schon mal mein Tutorial zu' Zeitsteuerungen ohne delay' angeschaut? Da habe ich erklärt wie das geht.

Edit: Link zumTutorial eingefügt.
In der aktuellen Version der MobaTools heißt der EggTimer jetzt 'MoToTimer' ( 'EggTimer' funktioniert aber auch noch - bis auf weiteres ).


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: MobaTools - EggTimer vs. delay

#4 von e69-fan ( gelöscht ) , 11.06.2020 14:43

Hallo MicroBahner,

nachdem ich das Tutorial zu' Zeitsteuerungen ohne delay' angeschaut habe, ist folgendes herausgekommen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
 

#include <MobaTools.h>
 
/* - Gesteuerter Ablauf für DC-Car System 1:87, "Bundeswehr"
- Auslösung durch Hallsensoren in der Fahrbahn,
- schaltbare Stoppimpulse werden vom DC-Car Funktionsdekoder erzeugt
- Fahrzeugverteilung durch unterschiedliche Polarität der Magneten am Fahrzeug
- Ablauf wird im Seriellen Monitor ausgegeben
2020/ e69-fan
*/
const int HALL_0 = A0; //Verteilung
const int HALL_1 = A1; //HALL_Sensor1
const int HALL_2 = A2; //HALL_Sensor2
 
const int RELAIS_STOP = 2; //IR1 - IR2
const int RELAIS_BLINK = 3; //Blinkrelais
const int RELAIS_HELI = 4; //Helikopter
 
const int servoVerteilung = 5; //Verteilung
const int servo2_Drehtor = 6; //Drehtor

const byte autoOff = 1;
 
bool Verteilung_Status, HALL1_Status, HALL2_Status, BLINKRELAIS_Status, STOP_RELAIS_Status;
 
byte DC_Car = 0;
 
#define Schritt_1 0 // "HALL_1 wurde ausgelöst"
#define Schritt_2 1 // "Tor wird geöffnet"
#define Schritt_3 2 // "Tor steht offen"
#define Schritt_4 3 // "Fahrzeug fährt in den Kontrollbereich"
#define Schritt_5 4 // "Fahrzeug hält im Kontrollbereich"
#define Schritt_6 5 // "Fahrzeug fährt aus den Kontrollbereich"
#define Schritt_7 6 // "HALL_2 wurde ausgelöst"
#define Schritt_8 7 // "Tor wird geschlossen"
 
MoToServo Verteilung;
MoToServo Drehtor;
 
MoToTimer myTimer_Verteilung;
MoToTimer Wartezeit1;
MoToTimer Tor_AUF;
MoToTimer Kontrollzeit;
MoToTimer Tor_ZU;
MoToTimer HELIKOPTER;
 
void setup() {

Serial.begin(115200);
 
pinMode(HALL_0, INPUT_PULLUP);
pinMode(HALL_1, INPUT_PULLUP);
pinMode(HALL_2, INPUT_PULLUP);
 
pinMode(RELAIS_BLINK, OUTPUT);
pinMode(RELAIS_STOP, OUTPUT);
pinMode(RELAIS_HELI, OUTPUT);
 
// -------------------- STARTposition ------------------------------------------ //
// beim Start schalten alle Relais auf HIGH/AUS, LOW schaltet Relais EIN //
 
digitalWrite(RELAIS_STOP, HIGH);
digitalWrite(RELAIS_BLINK,HIGH);
digitalWrite(RELAIS_HELI, HIGH);

Verteilung.attach(servoVerteilung, autoOff); //Servo an Pin 9
Verteilung.setSpeed(50); //Verfahrgeschwindigkeit einstellen
Verteilung.write(80); //Startposition - "Zivil"
 
Drehtor.attach(servo2_Drehtor, autoOff); //Servo an Pin 10
Drehtor.setSpeed( 10); //Geschwindigkeit einstellen
Drehtor.write(140); //Tor zu
}
 
void loop() {

// ----------------------------------------------------------------------------- //

Verteilung_Status = digitalRead(HALL_0); // Verteilung
HALL1_Status = digitalRead(HALL_1); // Einfahrt vor Kasernentor
HALL2_Status = digitalRead(HALL_2); // Ausfahrt nach Kontrollbereich

// --------------------- Fahrzeugverteilung -------------------------------------- //
if (!digitalRead(HALL_0) && !Verteilung.moving() && !myTimer_Verteilung.expired() ) {
Serial.println("HALL_0 wurde ausgelöst");
Serial.println("Fahrt Richtung Bundeswehr für *25000*");
Verteilung.attach(servoVerteilung, autoOff);
Verteilung.setSpeed(50);
Verteilung.write(50); //Richtung "Bundeswehr"
myTimer_Verteilung.setTime(2500); //Servostellung "Bundeswehr"
}
if (myTimer_Verteilung.expired() ) {
Verteilung.attach(servoVerteilung, autoOff);
Verteilung.write(80); //Richtung "Zivil"
Serial.println ("Grundstellung - Zivil");
}
// --------------------- Helikopterstart ----------------------------------------- //
if (!digitalRead(HALL_1) && !HELIKOPTER.running() ) {
HELIKOPTER.setTime( 50000 );
digitalWrite(RELAIS_HELI, LOW);
Serial.println("Helikopter - für *50000* AN");
}
if (HELIKOPTER.expired() ) {
Serial.println("Helikoptereit *50000* abgelaufen");
digitalWrite( RELAIS_HELI, HIGH );
Serial.println("Helikopter - AUS");
}
// --------------------- Fahrt in die Bundeswehranlage --------------------------- //
 
switch (DC_Car)
// ----------------------------------------------------------------------------- //

case Schritt_1: {
if (!digitalRead(HALL_1) && !Wartezeit1.running() ) {
Serial.println("HALL_1 wurde ausgelöst");
digitalWrite(RELAIS_BLINK, LOW);
Serial.println("Blinklicht- AN");
Serial.println("Verzögerung - *5000*");
Wartezeit1.setTime( 5000 );
}
if (Wartezeit1.expired() ) {
DC_Car = Schritt_2;
}
break;
// ----------------------------------------------------------------------------- //
case Schritt_2: {
if (BLINKRELAIS_Status == true);
Drehtor.attach(servo2_Drehtor, autoOff);
Drehtor.setSpeed( 10); //Geschwindigkeit einstellen
Drehtor.write(40); //Tor wird geöffnet
Serial.println ("Tor wird geöffnet");
DC_Car = Schritt_3;
}
break;
// ----------------------------------------------------------------------------- //
case Schritt_3: {
if (Drehtor.moving() == 0) {
Tor_AUF.setTime( 5000 );
Serial.println ("Tor steht offen");
Serial.println ("Fahrzeug fährt in den Kontrollbereich");
Serial.println ("Fahrzeit - *5000*");
DC_Car = Schritt_4;
}
break;
// ----------------------------------------------------------------------------- //
case Schritt_4: {
if (Tor_AUF.expired() ) {
digitalWrite(RELAIS_STOP, LOW); // IR1_rot / IR_2_grün
DC_Car = Schritt_5;
}
break;
// ----------------------------------------------------------------------------- //
case Schritt_5: {
if (STOP_RELAIS_Status == true); {
Serial.println ("Fahrzeug hält im Kontrollbereich");
Kontrollzeit.setTime (10000);
Serial.println ("Kontrollzeit *10000*");
DC_Car = Schritt_6;
}
break;
// ----------------------------------------------------------------------------- //
case Schritt_6: {
if (Kontrollzeit.expired() ) {
digitalWrite(RELAIS_STOP, HIGH); // IR1_rot / IR_2_grün
Serial.println ("Fahrzeug fährt aus dem Kontrollbereich in Richtung HALL_2");
DC_Car = Schritt_7;
}
break;
// ----------------------------------------------------------------------------- //
case Schritt_7: {
if (!digitalRead(HALL_2) ) {
Serial.println ("HALL_2 wurde ausgelöst");
Drehtor.attach(servo2_Drehtor, autoOff);
Drehtor.setSpeed( 10); //Geschwindigkeit einstellen
Drehtor.write(140); //Tor wird geschlossen
Serial.println ("Tor wir geschlossen");
Serial.println ("Schließdauer - *5000*");
Tor_ZU.setTime (5000);
DC_Car = Schritt_8;
}
break;
// ----------------------------------------------------------------------------- //
case Schritt_8: {
if (Tor_ZU.expired() && (Drehtor.moving() == 0) ) {
digitalWrite(RELAIS_BLINK, HIGH);
Serial.println ("Tor ist geschlossen, Blinklicht - AUS");
Serial.println ("Gehe zu Schritt_1");
DC_Car = Schritt_1;
}
break;
// ----------------------------------------------------------------------------- //
}
}
}
}
}
}
}
}
 
 



Ist das so i.O. oder muss noch weiter optimiert werden?

Vielen Dank und Servus - Wolfgang


e69-fan

RE: MobaTools - EggTimer vs. delay

#5 von MicroBahner , 11.06.2020 16:00

Hallo Wolfgang,
was mir so auf den ersten Blick auffällt: deine Verwendung der geschweiften Klammern ist sehr 'kreativ' . Da musst Du dich unbedingt nochmal mit der genauen Verwendung und Syntax befassen - speziell im Zusammenhang mit 'switch' . Auch wenn es kompiliert, heißt das nicht, das es korrekt ist.
Hinter die 'case' Zeilen gehört keine '{', aber der gesamte Switch-Block muss in einen Anweisungsblock { ... } . Also eine geöffnete hinter die switch-Anweisung, und die dann hinter dem letzten case-Block wieder schließen. Auch gehört zwischen das if (...) und die dazugehörige '{' kein Semikolon. Da sind auch ein paar drin. Das ist zwar rein syntaktisch nicht falsch, aber es macht nicht das, was Du willst.
Oft ist es auch sinnvoll, in den Voreinstellungen die Warnungen einzuschalten. Viele der 'üblichen' Fehler, die zwar syntaktisch korrekt sind aber meist nicht das machen was man beabsichtigt, kennt der Compiler und warnt davor. Zwar ist nicht gleich jede Warnung wirklich ein Fehler, aber sehr oft hat der Compiler da schon recht und besser ist es so zu programmieren, dass (fast) gar keine Warnungen ausgegeben werden.

Alle 'attach' für die Servos gehören ins Setup. Das wird nur einmal zugeordnet. Auch setSpeed musst Du nur machen, wenn es sich wirklich ändert. Ansonsten reicht es einmal im setup.

Ich würde den Schritten 'sprechende' Namen geben ( entsprechend den Kommentaren ). Einfach durchnummeriren ist etwas nichtssagend, da könntest Du auch gleich bei den Zahlen 0...7 bleiben.

Ansonsten scheint es vom Grundprinzip ok zu sein. Ob das jetzt in allen Einzelheiten so passt, kann ich natürlich nicht nachvollziehen.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


RE: MobaTools - EggTimer vs. delay

#6 von e69-fan ( gelöscht ) , 11.06.2020 19:28

Hallo MicroBahner,

Corona macht eben KREATIV - aber Danke für die schnelle Antwort.


Ich habe den Sketch wie folgt geändert:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
 

#include <MobaTools.h>
 
/* - Gesteuerter Ablauf für DC-Car System 1:87, "Bundeswehr"
- Auslösung durch Hallsensoren in der Fahrbahn,
- schaltbare Stoppimpulse werden vom DC-Car Funktionsdekoder erzeugt
- Fahrzeugverteilung durch unterschiedliche Polarität der Magneten am Fahrzeug
- Ablauf wird im Seriellen Monitor ausgegeben
2020/ e69-fan
*/
const int HALL_0 = A0; //Verteilung
const int HALL_1 = A1; //HALL_Sensor1
const int HALL_2 = A2; //HALL_Sensor2
 
const int RELAIS_STOP = 2; //IR1 - IR2
const int RELAIS_BLINK = 3; //Blinkrelais
const int RELAIS_HELI = 4; //Helikopter
 
const int servoVerteilung = 5; //Verteilung
const int servo2_Drehtor = 6; //Drehtor
 
const byte autoOff = 1;
 
bool Verteilung_Status, HALL1_Status, HALL2_Status, BLINKRELAIS_Status, STOP_RELAIS_Status;
 
byte DC_Car = 0;
 
#define Start_HALL_1_AN 0
#define Tor_wird_geoeffnet 1
#define Tor_ist_offen 2
#define Fahrt_zur_Kontrolle 3
#define Kontrollanfang 4
#define Kontrollende 5
#define HALL_2 6
#define Tor_wird_geschlossen 7
 
MoToServo Verteilung;
MoToServo Drehtor;
 
MoToTimer myTimer_Verteilung;
MoToTimer Wartezeit1;
MoToTimer Tor_AUF;
MoToTimer Kontrollzeit;
MoToTimer Tor_ZU;
MoToTimer HELIKOPTER;
 
void setup() {
 
Serial.begin(115200);
 
pinMode(HALL_0, INPUT_PULLUP);
pinMode(HALL_1, INPUT_PULLUP);
pinMode(HALL_2, INPUT_PULLUP);
 
pinMode(RELAIS_BLINK, OUTPUT);
pinMode(RELAIS_STOP, OUTPUT);
pinMode(RELAIS_HELI, OUTPUT);
 
// -------------------- STARTposition ------------------------------------------ //
// beim Start schalten alle Relais auf HIGH/AUS, LOW schaltet Relais EIN //
 
digitalWrite(RELAIS_STOP, HIGH);
digitalWrite(RELAIS_BLINK,HIGH);
digitalWrite(RELAIS_HELI, HIGH);
 
Verteilung.attach(servoVerteilung, autoOff); //Servo an Pin 9
Verteilung.setSpeed(50); //Verfahrgeschwindigkeit einstellen
Verteilung.write(80); //Startposition - "Zivil"
 
Drehtor.attach(servo2_Drehtor, autoOff); //Servo an Pin 10
Drehtor.setSpeed( 10); //Geschwindigkeit einstellen
Drehtor.write(140); //Tor zu
}
 
void loop() {
 
Verteilung_Status = digitalRead(HALL_0); // Verteilung
HALL1_Status = digitalRead(HALL_1); // Einfahrt vor Kasernentor
HALL2_Status = digitalRead(HALL_2); // Ausfahrt nach Kontrollbereich
 
// --------------------- Fahrzeugverteilung -------------------------------------- //
 
if (!digitalRead(HALL_0) && !Verteilung.moving() && !myTimer_Verteilung.expired() ) {
Serial.println("HALL_0 wurde ausgelöst");
Serial.println("Fahrt Richtung Bundeswehr für *25000*");
Verteilung.write(50); //Richtung "Bundeswehr"
myTimer_Verteilung.setTime(2500); //Servostellung "Bundeswehr"
}
if (myTimer_Verteilung.expired() ) {
Verteilung.write(80); //Richtung "Zivil"
Serial.println ("Grundstellung - Zivil");
}
// --------------------- Helikopterstart ----------------------------------------- //
 
if (!digitalRead(HALL_1) && !HELIKOPTER.running() ) {
HELIKOPTER.setTime( 50000 );
digitalWrite(RELAIS_HELI, LOW);
Serial.println("Helikopter - für *50000* AN");
}
if (HELIKOPTER.expired() ) {
Serial.println("Helikoptereit *50000* abgelaufen");
digitalWrite( RELAIS_HELI, HIGH );
Serial.println("Helikopter - AUS");
}
// xxxxxxxxxxxxxxxxxxxx Fahrt in die Bundeswehranlage xxxxxxxxxxxxxxxxxxxx //
 
switch (DC_Car) {
 
// ----------------------------------------------------------------- //
case Start_HALL_1_AN:
 
if (!digitalRead(HALL_1) && !Wartezeit1.running() ) {
Serial.println("HALL_1 wurde ausgelöst");
digitalWrite(RELAIS_BLINK, LOW);
Serial.println("Blinklicht- AN");
Serial.println("Verzögerung - *5000*");
Wartezeit1.setTime( 5000 );
}
if (Wartezeit1.expired() ) {
DC_Car = Tor_wird_geoeffnet;
}
break;
// ----------------------------------------------------------------- //
case Tor_wird_geoeffnet:
 
if (BLINKRELAIS_Status == true) {
Drehtor.write(40);
Serial.println ("Tor wird geöffnet");
DC_Car = Tor_ist_offen;
}
break;
// ----------------------------------------------------------------- //
case Tor_ist_offen:
 
if (Drehtor.moving() == 0) {
Tor_AUF.setTime( 5000 );
Serial.println ("Tor steht offen");
Serial.println ("Fahrzeug fährt in den Kontrollbereich");
Serial.println ("Fahrzeit - *5000*");
DC_Car = Fahrt_zur_Kontrolle;
}
break;
// ----------------------------------------------------------------- //
case Fahrt_zur_Kontrolle:
 
if (Tor_AUF.expired() ) {
digitalWrite(RELAIS_STOP, LOW); // IR1_rot / IR_2_grün
DC_Car = Kontrollanfang;
}
break;
// ----------------------------------------------------------------- //
case Kontrollanfang:
 
if (STOP_RELAIS_Status == true) {
Serial.println ("Fahrzeug hält im Kontrollbereich");
Kontrollzeit.setTime (10000);
Serial.println ("Kontrollzeit *10000*");
DC_Car = Kontrollende;
}
break;
// ----------------------------------------------------------------- //
case Kontrollende:
 
if (Kontrollzeit.expired() ) {
digitalWrite(RELAIS_STOP, HIGH); // IR1_rot / IR_2_grün
Serial.println ("Fahrzeug fährt aus dem Kontrollbereich in Richtung HALL_2");
DC_Car = HALL_2;
}
break;
// ----------------------------------------------------------------- //
case HALL_2:
 
if (!digitalRead(HALL_2) ) {
Serial.println ("HALL_2 wurde ausgelöst");
Drehtor.write(140); //Tor wird geschlossen
Serial.println ("Tor wir geschlossen");
Serial.println ("Schließdauer - *5000*");
Tor_ZU.setTime (5000);
DC_Car = Tor_wird_geschlossen;
}
break;
// ----------------------------------------------------------------- //
case Tor_wird_geschlossen:
 
if (Tor_ZU.expired() && (Drehtor.moving() == 0) ) {
digitalWrite(RELAIS_BLINK, HIGH);
Serial.println ("Tor ist geschlossen, Blinklicht - AUS");
Serial.println ("Gehe zu Schritt_1");
DC_Car = Start_HALL_1_AN;
}
break;
// ----------------------------------------------------------------- //
}
}
 

 
 



Es werden keine Fehler angezeigt - oder fehlt noch was ?

Wenn alles i.O. geht es zum nächsten Teil - das Fahrzeug muss ja noch tanken und dann den Bundeswehrbereich verlassen, mit Rücksicht auf die Vorfahrt des kreuzenden Zivilverkehr.

Danke und Servus - Wolfgang


e69-fan

RE: MobaTools - EggTimer vs. delay

#7 von MicroBahner , 12.06.2020 10:08

Hallo Wolfgang,

Zitat

Es werden keine Fehler angezeigt - oder fehlt noch was ?

Das sagt nicht viel, und ob noch was fehlt kann man auch nicht so leicht erkennen. Die logischen Fehler im Sketch sind das, was immer schwierig zu finden ist. Der Compiler ist normalerweise recht einfach zufriedenzustellen. Ob der Sketch hinterher das macht, was Du willst, ist damit aber noch lange nicht gesagt.
Deshalb sollte man auch die Funktionalität schrittweise prüfen. Also immer eine Funktionalität einbauen, und dann am 'lebenden Objekt' testen, ob die auch so funktioniert, wie DU dir das vorstellst. Erst dann das nächste einbauen. Hast Du den Sketch schonmal mit deiner echten HW laufen lassen? Bevor Du weitere Funktionalität hinzufügst, solltest Du das auf jeden Fall machen.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.833
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Steuerung Eigenbau
Stromart Analog


   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz