Version für den BSW Nottaster - OUT1
Dependencies: FreescaleIAP MODSERIAL mbed monitor timer0
Fork of 19_Taster_a by
main.cpp@22:dc30e220da6e, 2015-08-19 (annotated)
- Committer:
- mauchcontrols
- Date:
- Wed Aug 19 15:15:28 2015 +0000
- Revision:
- 22:dc30e220da6e
- Parent:
- 21:07482037ca54
angepasst f?r den BSW Nottaster - OUT1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mauchcontrols | 22:dc30e220da6e | 1 | // Version BSW 1.0 erstellt am 18.08.2015 |
mauchcontrols | 22:dc30e220da6e | 2 | // |
rs27 | 0:e248310dfcdb | 3 | |
rs27 | 0:e248310dfcdb | 4 | #include "mbed.h" |
rs27 | 19:f3c41bbc809a | 5 | #include "main.h" |
rs27 | 0:e248310dfcdb | 6 | #include "timer0.h" |
rs27 | 0:e248310dfcdb | 7 | #include "monitor.h" |
Sven3010 | 18:939d3df56218 | 8 | #include "MODSERIAL.h" |
rs27 | 0:e248310dfcdb | 9 | |
rs27 | 19:f3c41bbc809a | 10 | // timer 2 => optischer Alarm Periode = 500 entspricht Blinkfrequnz von 1 Selunde |
rs27 | 19:f3c41bbc809a | 11 | #define OA_PERIODE 500 |
rs27 | 19:f3c41bbc809a | 12 | // timer 3 => Minimale Zeit für den akustischen Alarm in ms >> soll 10000 entspricht 10 Sekunden |
rs27 | 19:f3c41bbc809a | 13 | #define AA_NIN 10000 |
rs27 | 19:f3c41bbc809a | 14 | // timer 4 => Verzögerung für des Entriegeln des Tasters. In dieser Zeit wird dann kein neuer |
rs27 | 19:f3c41bbc809a | 15 | // akustischer Alarm ausgelöst |
rs27 | 19:f3c41bbc809a | 16 | #define AA_DELAY 10000 |
rs27 | 0:e248310dfcdb | 17 | |
rs27 | 19:f3c41bbc809a | 18 | #define NEED_CONSOLE_OUTPUT 1 // Set this if you need debug messages on the console |
rs27 | 19:f3c41bbc809a | 19 | // mit Debug wird die Programmgröße von 32,8k um ca. 300 Byte vergrößert |
rs27 | 19:f3c41bbc809a | 20 | // dies ist nicht bedeutend, aber auch die Ausführungszeit der Ausgabebefehle |
rs27 | 19:f3c41bbc809a | 21 | // benötigt CPU Zeit |
rs27 | 19:f3c41bbc809a | 22 | #if NEED_CONSOLE_OUTPUT |
rs27 | 19:f3c41bbc809a | 23 | #define DEBUG(...) { pc.printf(__VA_ARGS__); } |
rs27 | 19:f3c41bbc809a | 24 | #else |
rs27 | 19:f3c41bbc809a | 25 | #define DEBUG(...) // nothing |
rs27 | 19:f3c41bbc809a | 26 | #endif // #if NEED_CONSOLE_OUTPUT |
Sven3010 | 18:939d3df56218 | 27 | |
rs27 | 6:f53dd76c8806 | 28 | //------------------------------------------------------------------------------ |
rs27 | 6:f53dd76c8806 | 29 | // Anlegen von Klassen |
Sven3010 | 4:46365f765d30 | 30 | |
rs27 | 2:f48d2eb0cc55 | 31 | timer0 down_timer; // Zeitsteuerung |
rs27 | 19:f3c41bbc809a | 32 | MODSERIAL pc(USBTX, USBRX); // tx, rx |
rs27 | 6:f53dd76c8806 | 33 | |
rs27 | 19:f3c41bbc809a | 34 | monitor mon; |
rs27 | 19:f3c41bbc809a | 35 | |
rs27 | 10:84387eed15b5 | 36 | Timer t; // Zeitmessung für Entprellen |
rs27 | 0:e248310dfcdb | 37 | |
rs27 | 6:f53dd76c8806 | 38 | //------------------------------------------------------------------------------ |
rs27 | 6:f53dd76c8806 | 39 | // Zuordnung von Eingängen und Ausgängen |
rs27 | 6:f53dd76c8806 | 40 | |
rs27 | 19:f3c41bbc809a | 41 | DigitalOut LED(PTE30); |
rs27 | 0:e248310dfcdb | 42 | |
mauchcontrols | 21:07482037ca54 | 43 | DigitalOut OUT1(PTC6); // Summer |
rs27 | 19:f3c41bbc809a | 44 | DigitalOut OUT2(PTC5); // LED Rot |
rs27 | 19:f3c41bbc809a | 45 | DigitalOut OUT3(PTC4); // LED Grün |
rs27 | 19:f3c41bbc809a | 46 | DigitalOut OUT4(PTC3); // LED Gelb |
mauchcontrols | 21:07482037ca54 | 47 | DigitalOut OUT5(PTC2); // nicht belegt |
rs27 | 19:f3c41bbc809a | 48 | DigitalOut OUT6(PTC1); // Relais |
rs27 | 0:e248310dfcdb | 49 | |
rs27 | 19:f3c41bbc809a | 50 | DigitalIn IN1(PTC7); // Notaus, schaltet gegen 24V => 24V oder 1 ist der Ruhezustand |
rs27 | 19:f3c41bbc809a | 51 | DigitalIn IN2(PTD4); // Sabotageschalter, schaltet gegen 24V => 24V oder 1 ist Ruhezustand |
rs27 | 19:f3c41bbc809a | 52 | DigitalIn IN3(PTD5); // KABA Türöffner Signal => 24V oder 1 ist Ruheezustand |
rs27 | 19:f3c41bbc809a | 53 | DigitalIn IN4(PTD6); // nicht belegt |
rs27 | 19:f3c41bbc809a | 54 | DigitalIn IN5(PTD7); // nicht belegt |
rs27 | 0:e248310dfcdb | 55 | |
rs27 | 19:f3c41bbc809a | 56 | DigitalInOut rst(PTA4); //Connect this to the reset pin |
rs27 | 6:f53dd76c8806 | 57 | |
rs27 | 6:f53dd76c8806 | 58 | //------------------------------------------------------------------------------ |
rs27 | 6:f53dd76c8806 | 59 | // Globale Variablen |
rs27 | 6:f53dd76c8806 | 60 | |
rs27 | 19:f3c41bbc809a | 61 | bool in; |
rs27 | 2:f48d2eb0cc55 | 62 | |
rs27 | 19:f3c41bbc809a | 63 | struct di_struct in1; // Eingang 1 |
rs27 | 19:f3c41bbc809a | 64 | struct di_struct in2; // Eingang 2 |
rs27 | 19:f3c41bbc809a | 65 | struct di_struct in3; // Eingang 3 |
rs27 | 0:e248310dfcdb | 66 | |
rs27 | 2:f48d2eb0cc55 | 67 | //------------------------------------------------------------------------------ |
rs27 | 2:f48d2eb0cc55 | 68 | // |
rs27 | 0:e248310dfcdb | 69 | |
rs27 | 19:f3c41bbc809a | 70 | int main() |
rs27 | 0:e248310dfcdb | 71 | { |
rs27 | 19:f3c41bbc809a | 72 | rst.input(); // SW watchdog ist derzeit nicht erforderlich |
Sven3010 | 3:72a65324d50d | 73 | |
rs27 | 2:f48d2eb0cc55 | 74 | //------------------------------------------------------------------------------ |
rs27 | 2:f48d2eb0cc55 | 75 | // RS232 Schnittstellt welche auf den CMSIS-DAP (USB Port) weitergeleitet wird |
rs27 | 2:f48d2eb0cc55 | 76 | // |
rs27 | 19:f3c41bbc809a | 77 | pc.baud(115200); |
rs27 | 19:f3c41bbc809a | 78 | pc.printf("\n N1380 V1.0 was compiled on %s %s \n", __DATE__,__TIME__); |
rs27 | 0:e248310dfcdb | 79 | |
rs27 | 19:f3c41bbc809a | 80 | |
rs27 | 19:f3c41bbc809a | 81 | //-------------------------------------------------------------------- |
rs27 | 19:f3c41bbc809a | 82 | // Anfangswerte setzen |
rs27 | 6:f53dd76c8806 | 83 | |
rs27 | 19:f3c41bbc809a | 84 | in1.old = 1; // 1 im Ruhezustand |
rs27 | 19:f3c41bbc809a | 85 | in1.aktiv = 0; |
rs27 | 19:f3c41bbc809a | 86 | in1.filter = 0; |
rs27 | 19:f3c41bbc809a | 87 | in1.optischer_alarm = 0; |
rs27 | 19:f3c41bbc809a | 88 | in1.summer = 0; |
rs27 | 0:e248310dfcdb | 89 | |
rs27 | 19:f3c41bbc809a | 90 | in2.old = 1; // 1 im Ruhezustand |
rs27 | 19:f3c41bbc809a | 91 | in2.aktiv = 0; |
rs27 | 19:f3c41bbc809a | 92 | in2.filter = 0; |
rs27 | 19:f3c41bbc809a | 93 | in2.optischer_alarm = 0; |
rs27 | 19:f3c41bbc809a | 94 | in2.summer = 0; |
rs27 | 19:f3c41bbc809a | 95 | |
rs27 | 19:f3c41bbc809a | 96 | in3.old = 1; // 1 im Ruhezustand |
rs27 | 19:f3c41bbc809a | 97 | in3.aktiv = 0; |
rs27 | 19:f3c41bbc809a | 98 | in3.filter = 0; |
rs27 | 2:f48d2eb0cc55 | 99 | |
rs27 | 2:f48d2eb0cc55 | 100 | //-------------------------------------------------------------------- |
rs27 | 19:f3c41bbc809a | 101 | // Softwaretimer für die Zeitsteuerung anlegen |
rs27 | 6:f53dd76c8806 | 102 | |
rs27 | 19:f3c41bbc809a | 103 | down_timer.SetCountdownTimer(0,1,500); // 1 ms Timer * 500 => ergibt 500 ms |
rs27 | 20:b85406f52de3 | 104 | down_timer.SetCountdownTimer(1,1,100); // 1 ms Timer * 10 => ergibt 10 ms, 100 ms für Einschaltverzögerung |
rs27 | 19:f3c41bbc809a | 105 | down_timer.SetCountdownTimer(2,1,0); // 1 ms Timer => reserviert für optischen Alarm |
rs27 | 19:f3c41bbc809a | 106 | down_timer.SetCountdownTimer(3,1,0); // 1 ms Timer => reserviert für akustischen Alarm |
rs27 | 19:f3c41bbc809a | 107 | down_timer.SetCountdownTimer(4,1,0); // 1 ms Timer => reserviert für nach Entriegelung |
rs27 | 2:f48d2eb0cc55 | 108 | |
rs27 | 0:e248310dfcdb | 109 | //-------------------------------------------------------------------- |
rs27 | 0:e248310dfcdb | 110 | // Schleife fuer die Datenerfassung |
rs27 | 19:f3c41bbc809a | 111 | |
rs27 | 0:e248310dfcdb | 112 | while(1) |
rs27 | 0:e248310dfcdb | 113 | { |
rs27 | 19:f3c41bbc809a | 114 | //------------------------------------------- |
rs27 | 19:f3c41bbc809a | 115 | // Prüfen ob Zeichen eingegeben wurden |
rs27 | 19:f3c41bbc809a | 116 | // wird in der aktiven Version ausgeblendet, ist nur zum Testen |
rs27 | 19:f3c41bbc809a | 117 | |
rs27 | 19:f3c41bbc809a | 118 | mon.get_line(); |
rs27 | 19:f3c41bbc809a | 119 | |
rs27 | 19:f3c41bbc809a | 120 | //------------------------------------------- |
rs27 | 19:f3c41bbc809a | 121 | // timer 0 steuert die LED auf dem Board mit der Takrate 0,5 Sekunden |
rs27 | 19:f3c41bbc809a | 122 | |
rs27 | 19:f3c41bbc809a | 123 | if (down_timer.GetTimerStatus(0) == 0) { |
rs27 | 19:f3c41bbc809a | 124 | down_timer.SetCountdownTimer(0,1,500); |
rs27 | 19:f3c41bbc809a | 125 | LED = !LED; |
rs27 | 19:f3c41bbc809a | 126 | |
rs27 | 19:f3c41bbc809a | 127 | } |
rs27 | 19:f3c41bbc809a | 128 | |
rs27 | 19:f3c41bbc809a | 129 | //------------------------------------------- |
rs27 | 19:f3c41bbc809a | 130 | // Eingänge abfragen und Aktionen ableiten |
rs27 | 19:f3c41bbc809a | 131 | // down |
rs27 | 19:f3c41bbc809a | 132 | |
rs27 | 19:f3c41bbc809a | 133 | if (down_timer.GetTimerStatus(1) == 0) |
rs27 | 19:f3c41bbc809a | 134 | { |
rs27 | 19:f3c41bbc809a | 135 | //down_timer 1 mit 10 ms gesetzt |
rs27 | 19:f3c41bbc809a | 136 | down_timer.SetCountdownTimer(1,1,10); |
Sven3010 | 18:939d3df56218 | 137 | |
rs27 | 19:f3c41bbc809a | 138 | //------------------------------------------------ |
rs27 | 19:f3c41bbc809a | 139 | // IN1 Nottaster auswerten, null im Ruhezustand |
rs27 | 19:f3c41bbc809a | 140 | // wird mit der negativen Flanke aktiviert |
rs27 | 19:f3c41bbc809a | 141 | // das Signal muss mindestens 10ms anliegen, damit es akzeptiert wird |
rs27 | 6:f53dd76c8806 | 142 | |
rs27 | 19:f3c41bbc809a | 143 | in = IN1; |
rs27 | 6:f53dd76c8806 | 144 | |
rs27 | 6:f53dd76c8806 | 145 | |
rs27 | 19:f3c41bbc809a | 146 | if(!in && in1.old) // Öffner im Ruhezustand 24 V >> durch Drücken wird eine neg. Flanke erzeugt |
rs27 | 16:3a4350104b68 | 147 | { |
rs27 | 19:f3c41bbc809a | 148 | in1.old = 0; |
rs27 | 19:f3c41bbc809a | 149 | in1.aktiv = 1; // Taster ist betätigt |
rs27 | 19:f3c41bbc809a | 150 | in1.optischer_alarm = 1; |
rs27 | 19:f3c41bbc809a | 151 | in1.summer = 1; |
rs27 | 19:f3c41bbc809a | 152 | down_timer.SetCountdownTimer(3,1,AA_NIN); // Zeit für Softtimer auf 10 Sekunden setzen |
rs27 | 19:f3c41bbc809a | 153 | DEBUG("\n negative Flanke IN1 \n"); |
rs27 | 19:f3c41bbc809a | 154 | } |
rs27 | 19:f3c41bbc809a | 155 | |
rs27 | 19:f3c41bbc809a | 156 | if (in && !in1.old) { // Öffner im Ruhenzustand 24 V >> durch Rückstellen enteht eine pos. Flanke |
rs27 | 19:f3c41bbc809a | 157 | in1.old = 1; |
rs27 | 19:f3c41bbc809a | 158 | in1.aktiv = 0; // Taster ist zurückgesetzt |
Sven3010 | 4:46365f765d30 | 159 | |
rs27 | 19:f3c41bbc809a | 160 | in1.summer = 0; |
rs27 | 19:f3c41bbc809a | 161 | down_timer.SetCountdownTimer(4,1,AA_DELAY); // Zeit für Entriegelung, Haube innerhalb von 10 Sekunden schließen |
rs27 | 19:f3c41bbc809a | 162 | DEBUG("\n positve Flanke IN1 \n"); |
rs27 | 6:f53dd76c8806 | 163 | } |
rs27 | 6:f53dd76c8806 | 164 | |
rs27 | 19:f3c41bbc809a | 165 | // optischer Alarm ausschalten, wenn IN3 wieder 0 bekommt ==> Quittierung |
rs27 | 19:f3c41bbc809a | 166 | |
rs27 | 20:b85406f52de3 | 167 | if (in1.optischer_alarm && in3.aktiv && !in1.aktiv) |
rs27 | 16:3a4350104b68 | 168 | { |
rs27 | 19:f3c41bbc809a | 169 | in1.optischer_alarm = 0; |
rs27 | 19:f3c41bbc809a | 170 | DEBUG("\n IN1 mit IN3 quittiert \n"); |
rs27 | 12:d5a745de5380 | 171 | } |
rs27 | 12:d5a745de5380 | 172 | |
rs27 | 19:f3c41bbc809a | 173 | |
rs27 | 19:f3c41bbc809a | 174 | //------------------------------------------------ |
rs27 | 19:f3c41bbc809a | 175 | // IN2 Sabotageschalter, 24V ist Ruhezustand |
rs27 | 19:f3c41bbc809a | 176 | // wird mit der negativen Flanke aktiviert |
rs27 | 19:f3c41bbc809a | 177 | // das Signal muss mindestens 10ms anliegen, damit es akzeptiert wird |
Sven3010 | 18:939d3df56218 | 178 | |
rs27 | 19:f3c41bbc809a | 179 | in = IN2; |
Sven3010 | 18:939d3df56218 | 180 | |
Sven3010 | 18:939d3df56218 | 181 | |
rs27 | 19:f3c41bbc809a | 182 | if(!in && in2.old) // Eingang neg. Flanke |
rs27 | 19:f3c41bbc809a | 183 | { |
rs27 | 19:f3c41bbc809a | 184 | in2.old = 0; // 0 im aktivierten Modus |
rs27 | 19:f3c41bbc809a | 185 | in2.aktiv = 1; // Eingang ist aktiv |
rs27 | 20:b85406f52de3 | 186 | //in2.optischer_alarm = 1; |
rs27 | 20:b85406f52de3 | 187 | in2.summer = 1; // am 11.05.15 entfernt, da Summer weiter untern aktiviert wird |
rs27 | 20:b85406f52de3 | 188 | //down_timer.SetCountdownTimer(3,1,AA_NIN); // Zeit für Softtimer auf 10 Sekunden setzen |
rs27 | 19:f3c41bbc809a | 189 | DEBUG("\n negative Flanke IN2 \n"); |
Sven3010 | 18:939d3df56218 | 190 | } |
rs27 | 19:f3c41bbc809a | 191 | |
rs27 | 19:f3c41bbc809a | 192 | if (in && !in2.old) // Eingang mit pos. Flanke |
rs27 | 19:f3c41bbc809a | 193 | { |
rs27 | 19:f3c41bbc809a | 194 | in2.old = 1; // 1 im Ruhezustand |
rs27 | 19:f3c41bbc809a | 195 | in2.aktiv = 0; // Eingang ist inaktiv |
rs27 | 19:f3c41bbc809a | 196 | in2.summer = 0; |
rs27 | 19:f3c41bbc809a | 197 | DEBUG("\n positve Flanke IN2 \n"); |
Sven3010 | 18:939d3df56218 | 198 | } |
rs27 | 20:b85406f52de3 | 199 | /* |
rs27 | 19:f3c41bbc809a | 200 | if (in2.aktiv && !in2.summer && !in1.summer && (down_timer.GetTimerStatus(4) == 0)) |
Sven3010 | 18:939d3df56218 | 201 | { |
rs27 | 19:f3c41bbc809a | 202 | in2.summer = 1; |
rs27 | 19:f3c41bbc809a | 203 | down_timer.SetCountdownTimer(3,1,AA_NIN); // Zeit für Softtimer auf 10 Sekunden setzen ( zum Testen auf 2 Sek. gesetzt ) |
rs27 | 19:f3c41bbc809a | 204 | DEBUG("\n IN2 Summer aktiviert \n"); |
Sven3010 | 18:939d3df56218 | 205 | } |
Sven3010 | 18:939d3df56218 | 206 | |
rs27 | 19:f3c41bbc809a | 207 | // nur zurückschalten, wenn IN3 wieder 1 ==> Quittierung |
rs27 | 19:f3c41bbc809a | 208 | |
rs27 | 19:f3c41bbc809a | 209 | if (in2.optischer_alarm && in3.aktiv) { |
rs27 | 19:f3c41bbc809a | 210 | in2.optischer_alarm = 0; |
rs27 | 19:f3c41bbc809a | 211 | DEBUG("\n IN2 mit IN3 quittiert \n"); |
rs27 | 19:f3c41bbc809a | 212 | } |
rs27 | 20:b85406f52de3 | 213 | */ |
rs27 | 19:f3c41bbc809a | 214 | //------------------------------------------------ |
rs27 | 19:f3c41bbc809a | 215 | // IN3 Signalstation, Öffner => 1 ist Ruheezustand |
rs27 | 19:f3c41bbc809a | 216 | |
rs27 | 19:f3c41bbc809a | 217 | in = IN3; |
rs27 | 19:f3c41bbc809a | 218 | |
rs27 | 19:f3c41bbc809a | 219 | if(in && !in3.old) // Eingang pos. Flanke |
rs27 | 19:f3c41bbc809a | 220 | { |
rs27 | 19:f3c41bbc809a | 221 | in3.old = 1; |
rs27 | 19:f3c41bbc809a | 222 | in3.aktiv = 0; // Eingang ist Ruhezustand |
Sven3010 | 18:939d3df56218 | 223 | |
Sven3010 | 18:939d3df56218 | 224 | } |
rs27 | 19:f3c41bbc809a | 225 | |
rs27 | 19:f3c41bbc809a | 226 | if (!in && in3.old) // Eingang mit neg Flanke |
rs27 | 19:f3c41bbc809a | 227 | { |
rs27 | 19:f3c41bbc809a | 228 | in3.old = 0; |
rs27 | 19:f3c41bbc809a | 229 | in3.aktiv = 1; // Eingang ist aktiv |
rs27 | 19:f3c41bbc809a | 230 | } |
rs27 | 19:f3c41bbc809a | 231 | |
rs27 | 19:f3c41bbc809a | 232 | |
rs27 | 19:f3c41bbc809a | 233 | //--------------------------------------------------------------------------------------------------------------------------------------- |
rs27 | 19:f3c41bbc809a | 234 | // Die Eingänge sind nun gelesen, jetzt kommt das Steuern der Ausgaänge |
rs27 | 19:f3c41bbc809a | 235 | // |
Sven3010 | 18:939d3df56218 | 236 | |
rs27 | 19:f3c41bbc809a | 237 | //------------------------------------------------ |
rs27 | 19:f3c41bbc809a | 238 | // Rot/Grüne LED (verriegelt/entriegelt): |
rs27 | 19:f3c41bbc809a | 239 | // rot Tor ist verriegelt |
rs27 | 19:f3c41bbc809a | 240 | // grün Tor ist entriegelt |
rs27 | 19:f3c41bbc809a | 241 | |
rs27 | 19:f3c41bbc809a | 242 | // 2. IN3 auf 0 = OUT2 aus und OUT3 ein Rot aus / Grün an (entriegelt) |
rs27 | 19:f3c41bbc809a | 243 | // 3. IN1 auf 1 = OUT2 aus und OUT3 ein Rot aus / Grün an (entriegelt) |
rs27 | 19:f3c41bbc809a | 244 | |
rs27 | 19:f3c41bbc809a | 245 | if (in3.aktiv || in1.aktiv) { |
rs27 | 19:f3c41bbc809a | 246 | OUT2 = LED_AUS; |
rs27 | 19:f3c41bbc809a | 247 | OUT3 = LED_EIN; |
rs27 | 19:f3c41bbc809a | 248 | } |
rs27 | 20:b85406f52de3 | 249 | else |
rs27 | 20:b85406f52de3 | 250 | // 1. IN3 auf 1 = OUT2 ein und OUT3 aus Rot an / Grün aus (verriegelt) |
rs27 | 20:b85406f52de3 | 251 | { |
rs27 | 20:b85406f52de3 | 252 | OUT2 = LED_EIN; |
rs27 | 20:b85406f52de3 | 253 | OUT3 = LED_AUS; |
rs27 | 20:b85406f52de3 | 254 | } |
rs27 | 19:f3c41bbc809a | 255 | |
rs27 | 19:f3c41bbc809a | 256 | //------------------------------------------------ |
rs27 | 19:f3c41bbc809a | 257 | // Gelbe LED (optischer Alarm): |
rs27 | 19:f3c41bbc809a | 258 | |
rs27 | 20:b85406f52de3 | 259 | if (in1.optischer_alarm) // sobald der optische Alarm aus Eingang 1 akiviert wurde, diesen in Blinkmode schalten |
rs27 | 19:f3c41bbc809a | 260 | { |
rs27 | 19:f3c41bbc809a | 261 | if (down_timer.GetTimerStatus(2) == 0) |
rs27 | 19:f3c41bbc809a | 262 | { |
rs27 | 19:f3c41bbc809a | 263 | down_timer.SetCountdownTimer(2,1,OA_PERIODE); // Zeit für Softtimer auf eine Sekunde setzen |
rs27 | 19:f3c41bbc809a | 264 | OUT4 = !OUT4; |
rs27 | 19:f3c41bbc809a | 265 | } |
rs27 | 19:f3c41bbc809a | 266 | } |
rs27 | 19:f3c41bbc809a | 267 | else |
rs27 | 19:f3c41bbc809a | 268 | { |
rs27 | 19:f3c41bbc809a | 269 | OUT4 = LED_AUS; |
rs27 | 19:f3c41bbc809a | 270 | } |
rs27 | 19:f3c41bbc809a | 271 | |
rs27 | 19:f3c41bbc809a | 272 | //------------------------------------------------ |
mauchcontrols | 21:07482037ca54 | 273 | // Summer (OUT1 GND) |
rs27 | 19:f3c41bbc809a | 274 | |
rs27 | 20:b85406f52de3 | 275 | |
rs27 | 19:f3c41bbc809a | 276 | if (in1.summer || in2.summer || (down_timer.GetTimerStatus(3) != 0)) // sobald der Eingang 1 oder Eingang 2 akiviert ist oder der Timer |
rs27 | 19:f3c41bbc809a | 277 | { // noch aktiv ist, den Summer aktivieren |
rs27 | 20:b85406f52de3 | 278 | DEBUG("\n Summer 1 = %d Summer 2 = %d \n",(uint8_t)in1.summer,(uint8_t)in2.summer); |
mauchcontrols | 21:07482037ca54 | 279 | OUT1 = 1; |
rs27 | 19:f3c41bbc809a | 280 | } |
rs27 | 19:f3c41bbc809a | 281 | else |
rs27 | 19:f3c41bbc809a | 282 | { |
mauchcontrols | 21:07482037ca54 | 283 | OUT1 = 0; |
rs27 | 19:f3c41bbc809a | 284 | } |
rs27 | 19:f3c41bbc809a | 285 | |
rs27 | 19:f3c41bbc809a | 286 | //------------------------------------------------ |
rs27 | 19:f3c41bbc809a | 287 | // Relais K1: |
rs27 | 19:f3c41bbc809a | 288 | // Der Kontakt des Nottasters wird weitergegeben |
rs27 | 19:f3c41bbc809a | 289 | |
rs27 | 19:f3c41bbc809a | 290 | if (in1.aktiv) { // 1. IN1 auf 0 = OUT6 (K1) ein |
rs27 | 20:b85406f52de3 | 291 | OUT6 = 1; |
rs27 | 19:f3c41bbc809a | 292 | } else { // 2. IN1 auf 1 = OUT6 aus |
rs27 | 20:b85406f52de3 | 293 | OUT6 = 0; |
rs27 | 19:f3c41bbc809a | 294 | } |
rs27 | 19:f3c41bbc809a | 295 | |
rs27 | 19:f3c41bbc809a | 296 | } // end if (downtimer ... |
rs27 | 19:f3c41bbc809a | 297 | |
rs27 | 0:e248310dfcdb | 298 | } // end while |
rs27 | 0:e248310dfcdb | 299 | |
rs27 | 19:f3c41bbc809a | 300 | } // end main |
rs27 | 19:f3c41bbc809a | 301 |