SpDrS60 Stellwerkssimulation Stellwerkssimulation zu Verwendung in bliebigen Schienensystemen
melder.cpp
1/*Library für die Steuerung eines SpDrS60-Gleisbildstellpults
2 * mit dieser Library können Weichen, Signale etc. gesteuert werden
3 * Lennart Klüner 05.09.2020
4 */
5
6#include "Arduino.h"
7#include "Melder.h"
8#include "Actor.h"
9
10// Methoden der Klasse Melder
11Melder::Melder(String melderName, int tueMelderLed, int weckerPin, int wutPin, int registerPins[4])
12 : Actor(registerPins[0], registerPins[1], registerPins[2], registerPins[3]) // Led des Melders, Name des Melders(für Serielle Kommunitation z.B. FTÜ,GTÜ)
13{
14 Serial.begin(9600); // Die Serielle Kommunikation wird gestartet
15
16 // Anschlussdefinition
17 _melderName = melderName;
18 _tueMelderLed = tueMelderLed; //übernehmen der Variablen in die Klasse
19 _wutPin = wutPin;
20 _weckerPin = weckerPin;
21 // definieren ob Anschlüsse Aus- oder Eingang sind
22 pinMode(_tueMelderLed, OUTPUT); // Tastenüberwachung led Melder
23 pinMode(_wutPin, INPUT_PULLUP); // Tastenüberwachung Weckerunterbrechertaste
24 pinMode(_weckerPin, OUTPUT);
25
26 digitalSchalten(_weckerPin, HIGH);
27}
28
30{
31 if (ZugtastenControl.zugtastenGedrueckt()) // wenn eine Zugtaste gedrückt ist
32 {
33 if ((millis() - _melderStartzeit >= _melderTimeout))
34 {
35 _tueMelderStatus = true; // FTÜ-Melder ist false keine Warnung, true melder und ggf. wecker schlägt an
36 Melder::blinken(_tueMelderLed);
37
38 if (millis() - _melderStartzeit >= (_melderTimeout * 2) && _wutAktivierung == LOW) // Wenn 10 s lang eine Taste gedrückt wurde und nicht die Wut gedrückt wurde
39 {
40 Actor::digitalSchalten(_weckerPin, LOW); // Relais schaltet --> Wecker klingelt
41 }
42 if (digitalRead(_wutPin) == LOW) // wenn Weckerunterbrechertaste gedrückt
43 {
44 _wutAktivierung = HIGH; // die Weckerunterbrechertaste wurde gedrückt
45 Actor::digitalSchalten(_weckerPin, HIGH); // Relais fällt zurück --> Wecker wird gestoppt
46 }
47 Serial.println(_melderName); // Meldername und Status wird über den seriellen Monitor angezeigt............................... Ausgabe der Meldernamen funktioniert noch nicht
48 }
49 }
50
51 else // wenn keine Mehr gedrückt wird,
52 {
53 _melderStartzeit = millis(); // setze den Timer zurück
54 _tueMelderStatus = false; // den Status auf 0
55 Melder::digitalSchalten(_tueMelderLed, LOW); // Schalte die Led aus
56 Melder::digitalSchalten(_weckerPin, HIGH); // Mache den Wecker aus
57 _wutAktivierung = false; // beim Beenden der Störung wird die Unterbrechung wieder aufgehoben
58 }
59}
Definition: Actor.h:21
void digitalSchalten(int PinNr, boolean newPinStatus)
Definition: Actor.cpp:31
void blinken(int LedPin)
Definition: Actor.cpp:19
Melder(String melderName, int tueMelderLed, int weckerPin, int wutPin, int registerPins[4])
Definition: melder.cpp:11
void tueMelder(ZugtastenControl ZugtastenControl)
Definition: melder.cpp:29
boolean zugtastenGedrueckt()