050216
Dependencies: MODSERIAL mon-050216 mbed timer0-050216
Fork of mbed_blinky by
main.cpp@11:be852b7b7692, 2016-03-10 (annotated)
- Committer:
- rs27
- Date:
- Thu Mar 10 20:35:49 2016 +0000
- Revision:
- 11:be852b7b7692
- Parent:
- 10:cfd15bd4762a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rs27 | 11:be852b7b7692 | 1 | // Hardware: IOX.mini |
rs27 | 11:be852b7b7692 | 2 | // Projekt: Galliker LC4 tore |
rs27 | 11:be852b7b7692 | 3 | // CPU: LPC1768 |
rs27 | 11:be852b7b7692 | 4 | // Modul: main.cpp |
rs27 | 11:be852b7b7692 | 5 | // Anwendung: Torsteuerung |
rs27 | 10:cfd15bd4762a | 6 | |
dan | 0:7dec7e9ac085 | 7 | #include "mbed.h" |
rs27 | 10:cfd15bd4762a | 8 | #include "main.h" |
rs27 | 10:cfd15bd4762a | 9 | #include "timer0.h" |
rs27 | 10:cfd15bd4762a | 10 | #include "mon.h" |
rs27 | 11:be852b7b7692 | 11 | #include "MODSERIAL.h" |
rs27 | 11:be852b7b7692 | 12 | |
rs27 | 11:be852b7b7692 | 13 | struct di_struct |
rs27 | 11:be852b7b7692 | 14 | { |
rs27 | 11:be852b7b7692 | 15 | bool aktiv; // Flag zur Steuerung |
rs27 | 11:be852b7b7692 | 16 | bool old; // alter Wert vom Eingang für Flankenerkennung |
rs27 | 11:be852b7b7692 | 17 | bool flag; // Flag für Zeitsteuerung |
rs27 | 11:be852b7b7692 | 18 | }; |
rs27 | 11:be852b7b7692 | 19 | |
rs27 | 11:be852b7b7692 | 20 | #define AUS 1 |
rs27 | 11:be852b7b7692 | 21 | #define EIN 0 |
rs27 | 10:cfd15bd4762a | 22 | |
rs27 | 11:be852b7b7692 | 23 | DigitalOut led_in1(LED2,AUS); |
rs27 | 11:be852b7b7692 | 24 | DigitalOut led_in2(LED3,AUS); |
rs27 | 11:be852b7b7692 | 25 | DigitalOut led_in3(LED4,AUS); |
rs27 | 11:be852b7b7692 | 26 | DigitalOut led_in4(LED5,AUS); |
rs27 | 10:cfd15bd4762a | 27 | |
rs27 | 11:be852b7b7692 | 28 | DigitalOut led_out1(LED7,AUS); // die LED's out2 bis out4 sind direkt den Ausgängen zugeordnet |
rs27 | 11:be852b7b7692 | 29 | |
rs27 | 11:be852b7b7692 | 30 | DigitalOut led1(LED1,AUS); |
rs27 | 11:be852b7b7692 | 31 | DigitalOut led6(LED6,AUS); |
rs27 | 11:be852b7b7692 | 32 | |
rs27 | 11:be852b7b7692 | 33 | DigitalOut out1(OUT1,0); // max 500mA schaltet gegen GND |
rs27 | 10:cfd15bd4762a | 34 | DigitalOut out2(OUT2,0); |
rs27 | 10:cfd15bd4762a | 35 | DigitalOut out3(OUT3,0); |
rs27 | 10:cfd15bd4762a | 36 | DigitalOut out4(OUT4,0); |
dan | 0:7dec7e9ac085 | 37 | |
rs27 | 11:be852b7b7692 | 38 | DigitalIn IN_1(IN1); // 0 oder 24V |
rs27 | 11:be852b7b7692 | 39 | DigitalIn IN_2(IN2); |
rs27 | 11:be852b7b7692 | 40 | DigitalIn IN_3(IN3); |
rs27 | 11:be852b7b7692 | 41 | DigitalIn IN_4(IN4); |
rs27 | 10:cfd15bd4762a | 42 | |
rs27 | 11:be852b7b7692 | 43 | MODSERIAL pc(TXD, RXD); // tx, rx |
rs27 | 11:be852b7b7692 | 44 | timer0 down_timer; // Timer für Zeitsteuerung |
rs27 | 10:cfd15bd4762a | 45 | |
rs27 | 10:cfd15bd4762a | 46 | monitor mon; |
rs27 | 10:cfd15bd4762a | 47 | |
rs27 | 11:be852b7b7692 | 48 | //===================================================================================== |
rs27 | 11:be852b7b7692 | 49 | // Globale Variablen |
rs27 | 10:cfd15bd4762a | 50 | |
rs27 | 11:be852b7b7692 | 51 | bool in, flag_ablauftimer; |
rs27 | 11:be852b7b7692 | 52 | struct di_struct in1; // Eingang 1 |
rs27 | 11:be852b7b7692 | 53 | struct di_struct in2; // Eingang 2 |
rs27 | 10:cfd15bd4762a | 54 | |
rs27 | 11:be852b7b7692 | 55 | //------------------------------------------------------------------------------------ |
dan | 0:7dec7e9ac085 | 56 | |
dan | 0:7dec7e9ac085 | 57 | int main() { |
rs27 | 10:cfd15bd4762a | 58 | |
rs27 | 10:cfd15bd4762a | 59 | pc.baud(115200); |
rs27 | 11:be852b7b7692 | 60 | |
rs27 | 11:be852b7b7692 | 61 | pc.printf("\nGalliker LC4 tore V0.0_a"); |
rs27 | 11:be852b7b7692 | 62 | pc.printf("\n build at "__DATE__" "__TIME__" "); |
rs27 | 11:be852b7b7692 | 63 | |
rs27 | 11:be852b7b7692 | 64 | in1.old = 1; // 1 im Ruhezustand |
rs27 | 11:be852b7b7692 | 65 | in2.old = 1; // 1 im Ruhezustand |
rs27 | 11:be852b7b7692 | 66 | |
rs27 | 11:be852b7b7692 | 67 | in1.flag = false; |
rs27 | 11:be852b7b7692 | 68 | in2.flag = false; |
rs27 | 11:be852b7b7692 | 69 | |
rs27 | 11:be852b7b7692 | 70 | flag_ablauftimer = false; |
rs27 | 11:be852b7b7692 | 71 | |
rs27 | 11:be852b7b7692 | 72 | down_timer.SetCountdownTimer(0,1,500); // Timer für LED |
rs27 | 11:be852b7b7692 | 73 | down_timer.SetCountdownTimer(1,1,500); // Timer für Eingänge lesen |
rs27 | 10:cfd15bd4762a | 74 | |
dan | 0:7dec7e9ac085 | 75 | while(1) { |
rs27 | 10:cfd15bd4762a | 76 | |
rs27 | 10:cfd15bd4762a | 77 | mon.monPC(); // Eingaben abfragen und auswerten |
rs27 | 11:be852b7b7692 | 78 | |
rs27 | 11:be852b7b7692 | 79 | // RS485_BUS.execute(); // RS485 Bus |
rs27 | 10:cfd15bd4762a | 80 | |
rs27 | 10:cfd15bd4762a | 81 | //-------------------------------------------------------------------------- |
rs27 | 10:cfd15bd4762a | 82 | // LED für Statusanzeige |
rs27 | 10:cfd15bd4762a | 83 | |
rs27 | 11:be852b7b7692 | 84 | if (down_timer.GetTimerStatus(0) == 0) |
rs27 | 11:be852b7b7692 | 85 | { |
rs27 | 11:be852b7b7692 | 86 | down_timer.SetCountdownTimer(0,1,500); // alle 500ms |
rs27 | 11:be852b7b7692 | 87 | led1 = !led1; |
rs27 | 11:be852b7b7692 | 88 | } |
rs27 | 11:be852b7b7692 | 89 | |
rs27 | 11:be852b7b7692 | 90 | //------------------------------------------------------------------------------- |
rs27 | 11:be852b7b7692 | 91 | // Eingänge abfragen und Aktionen ableiten |
rs27 | 11:be852b7b7692 | 92 | |
rs27 | 11:be852b7b7692 | 93 | if (down_timer.GetTimerStatus(1) == 0) |
rs27 | 10:cfd15bd4762a | 94 | { |
rs27 | 11:be852b7b7692 | 95 | down_timer.SetCountdownTimer(1,1,10); // ms Timer * 10 => ergibt 10 ms |
rs27 | 11:be852b7b7692 | 96 | |
rs27 | 11:be852b7b7692 | 97 | //============================================================================================== |
rs27 | 11:be852b7b7692 | 98 | // Impuls auf IN1 = OUT1 für 1s auf EIN |
rs27 | 11:be852b7b7692 | 99 | // |
rs27 | 11:be852b7b7692 | 100 | // Wenn Impuls auf IN0, dann wird ein Ablauftimer aktiviert (1,5h) |
rs27 | 11:be852b7b7692 | 101 | // - nach Ablauf dieser Zeit = OUT1 für 1s auf EIN |
rs27 | 11:be852b7b7692 | 102 | // - sofern nicht vorher ein Impuls von IN1 registriert wurde |
rs27 | 11:be852b7b7692 | 103 | // |
rs27 | 11:be852b7b7692 | 104 | // Ablauftimer ist Timer 4 |
rs27 | 11:be852b7b7692 | 105 | |
rs27 | 11:be852b7b7692 | 106 | in = IN_1; |
rs27 | 11:be852b7b7692 | 107 | if (in != in1.old) // negative Flanke an IN1 |
rs27 | 11:be852b7b7692 | 108 | { |
rs27 | 11:be852b7b7692 | 109 | in1.old = 0; |
rs27 | 11:be852b7b7692 | 110 | led_in1 = EIN; |
rs27 | 11:be852b7b7692 | 111 | out1 = 1; |
rs27 | 11:be852b7b7692 | 112 | led_out1 = EIN; |
rs27 | 11:be852b7b7692 | 113 | down_timer.SetCountdownTimer(2,1,1000); // 1 Sekunde |
rs27 | 11:be852b7b7692 | 114 | in1.flag = true; |
rs27 | 11:be852b7b7692 | 115 | down_timer.SetCountdownTimer(4,3,90); // 1,5 Stunden |
rs27 | 11:be852b7b7692 | 116 | flag_ablauftimer = true; |
rs27 | 11:be852b7b7692 | 117 | out3 = 1; // LED Taster (Ablaufzeit aktiviert) |
rs27 | 11:be852b7b7692 | 118 | pc.printf("\n negative Flanke IN1 \n"); |
rs27 | 11:be852b7b7692 | 119 | |
rs27 | 11:be852b7b7692 | 120 | } |
rs27 | 10:cfd15bd4762a | 121 | |
rs27 | 11:be852b7b7692 | 122 | if (in && !in1.old) // positive Flanke an IN1 |
rs27 | 11:be852b7b7692 | 123 | { |
rs27 | 11:be852b7b7692 | 124 | in1.old = 1; |
rs27 | 11:be852b7b7692 | 125 | led_in1 = AUS; |
rs27 | 11:be852b7b7692 | 126 | pc.printf("\n positve Flanke IN1 \n"); |
rs27 | 11:be852b7b7692 | 127 | } |
rs27 | 11:be852b7b7692 | 128 | |
rs27 | 11:be852b7b7692 | 129 | if (in1.flag && (down_timer.GetTimerStatus(2) == 0)) |
rs27 | 10:cfd15bd4762a | 130 | { |
rs27 | 11:be852b7b7692 | 131 | in1.flag = false; |
rs27 | 11:be852b7b7692 | 132 | out1 = 0; |
rs27 | 11:be852b7b7692 | 133 | led_out1 = AUS; |
rs27 | 11:be852b7b7692 | 134 | } |
rs27 | 11:be852b7b7692 | 135 | |
rs27 | 11:be852b7b7692 | 136 | //============================================================================================== |
rs27 | 11:be852b7b7692 | 137 | // Impuls auf IN2 = OUT2 für 1s auf EIN |
rs27 | 11:be852b7b7692 | 138 | // |
rs27 | 11:be852b7b7692 | 139 | |
rs27 | 11:be852b7b7692 | 140 | in = IN_2; |
rs27 | 11:be852b7b7692 | 141 | if (in != in2.old) // negative Flanke an IN2 |
rs27 | 11:be852b7b7692 | 142 | { |
rs27 | 11:be852b7b7692 | 143 | in2.old = 0; |
rs27 | 11:be852b7b7692 | 144 | led_in2 = EIN; |
rs27 | 11:be852b7b7692 | 145 | out2 = 1; |
rs27 | 11:be852b7b7692 | 146 | down_timer.SetCountdownTimer(3,1,1000); // 1 Sekunde |
rs27 | 11:be852b7b7692 | 147 | in2.flag = true; |
rs27 | 11:be852b7b7692 | 148 | flag_ablauftimer = false; // Ablaufzeit wird unterbrochen |
rs27 | 11:be852b7b7692 | 149 | pc.printf("\n negative Flanke IN2 \n"); |
rs27 | 11:be852b7b7692 | 150 | } |
rs27 | 11:be852b7b7692 | 151 | |
rs27 | 11:be852b7b7692 | 152 | if (in && !in2.old) // positive Flanke an IN2 |
rs27 | 11:be852b7b7692 | 153 | { |
rs27 | 11:be852b7b7692 | 154 | in2.old = 1; |
rs27 | 11:be852b7b7692 | 155 | led_in2 = AUS; |
rs27 | 11:be852b7b7692 | 156 | pc.printf("\n positve Flanke IN2 \n"); |
rs27 | 11:be852b7b7692 | 157 | } |
rs27 | 11:be852b7b7692 | 158 | |
rs27 | 11:be852b7b7692 | 159 | if (in2.flag && (down_timer.GetTimerStatus(3) == 0)) |
rs27 | 11:be852b7b7692 | 160 | { |
rs27 | 11:be852b7b7692 | 161 | in2.flag = false; |
rs27 | 11:be852b7b7692 | 162 | out2 = 0; |
rs27 | 11:be852b7b7692 | 163 | } |
rs27 | 11:be852b7b7692 | 164 | |
rs27 | 11:be852b7b7692 | 165 | //============================================================================================== |
rs27 | 11:be852b7b7692 | 166 | // prüfen ob Ablaufzeit vorbei, falls ja, die Ausgang out2 für eine Sekunde auf 1 setzen |
rs27 | 11:be852b7b7692 | 167 | // |
rs27 | 11:be852b7b7692 | 168 | |
rs27 | 11:be852b7b7692 | 169 | if (flag_ablauftimer && (down_timer.GetTimerStatus(4) == 0)) |
rs27 | 11:be852b7b7692 | 170 | { |
rs27 | 11:be852b7b7692 | 171 | flag_ablauftimer = false; |
rs27 | 11:be852b7b7692 | 172 | out2 = 1; |
rs27 | 11:be852b7b7692 | 173 | out3 = 0; // LED Taster (Zeit abgelaufen) |
rs27 | 11:be852b7b7692 | 174 | down_timer.SetCountdownTimer(3,1,1000); // 1 Sekunde |
rs27 | 11:be852b7b7692 | 175 | in2.flag = true; |
rs27 | 11:be852b7b7692 | 176 | } |
rs27 | 11:be852b7b7692 | 177 | |
rs27 | 11:be852b7b7692 | 178 | } |
rs27 | 11:be852b7b7692 | 179 | |
rs27 | 10:cfd15bd4762a | 180 | } // end while(1) |
dan | 0:7dec7e9ac085 | 181 | } |