050216

Dependencies:   MODSERIAL mon-050216 mbed timer0-050216

Fork of mbed_blinky by Mbed

Committer:
rs27
Date:
Thu Mar 10 20:35:49 2016 +0000
Revision:
11:be852b7b7692
Parent:
10:cfd15bd4762a

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }