050216

Dependencies:   MODSERIAL mon-050216 mbed timer0-050216

Fork of mbed_blinky by Mbed

Files at this revision

API Documentation at this revision

Comitter:
rs27
Date:
Thu Mar 10 20:35:49 2016 +0000
Parent:
10:cfd15bd4762a
Commit message:

Changed in this revision

RS_485.lib Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mon.lib Show annotated file Show diff for this revision Revisions of this file
timer0.lib Show annotated file Show diff for this revision Revisions of this file
--- a/RS_485.lib	Fri Feb 05 16:52:41 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://developer.mbed.org/teams/Notaus/code/RS_485-050216/#8779e76fd4ea
--- a/main.cpp	Fri Feb 05 16:52:41 2016 +0000
+++ b/main.cpp	Thu Mar 10 20:35:49 2016 +0000
@@ -1,128 +1,181 @@
-// RS485 Link für modeserial
-// https://developer.mbed.org/cookbook/MODSERIAL
+// Hardware:    IOX.mini
+// Projekt:     Galliker LC4 tore
+// CPU:         LPC1768
+// Modul:       main.cpp
+// Anwendung:   Torsteuerung
 
 #include "mbed.h"
 #include "main.h"
 #include "timer0.h"
 #include "mon.h"
-#include "rs_485.h"
+#include "MODSERIAL.h"
+
+struct di_struct 
+{
+    bool  aktiv;      // Flag zur Steuerung
+    bool  old;        // alter Wert vom Eingang für Flankenerkennung 
+    bool  flag;       // Flag für Zeitsteuerung
+};
+
+#define AUS 1
+#define EIN 0
 
-DigitalOut led1(LED1,1);
-DigitalOut led2(LED2,1);
-DigitalOut led3(LED3,1);
-DigitalOut led4(LED4,1);
-DigitalOut led5(LED5,1);
-DigitalOut led6(LED6,1);
-DigitalOut led7(LED7,1);
+DigitalOut led_in1(LED2,AUS);
+DigitalOut led_in2(LED3,AUS);
+DigitalOut led_in3(LED4,AUS);
+DigitalOut led_in4(LED5,AUS);
 
-DigitalOut out1(OUT1,0);    // max 500mA schaltet gegen GND
+DigitalOut led_out1(LED7,AUS);  // die LED's out2 bis out4 sind direkt den Ausgängen zugeordnet
+
+DigitalOut led1(LED1,AUS);
+DigitalOut led6(LED6,AUS);
+
+DigitalOut out1(OUT1,0);        // max 500mA schaltet gegen GND
 DigitalOut out2(OUT2,0);
 DigitalOut out3(OUT3,0);
 DigitalOut out4(OUT4,0);
 
-DigitalIn in1(IN1);         // 0 oder 24V
-DigitalIn in2(IN2);
-DigitalIn in3(IN3);
-DigitalIn in4(IN4);
+DigitalIn IN_1(IN1);            // 0 oder 24V
+DigitalIn IN_2(IN2);
+DigitalIn IN_3(IN3);
+DigitalIn IN_4(IN4);
         
-MODSERIAL pc(TXD, RXD);             // tx, rx
-timer0 down_timer;                  // Timer für Zeitsteuerung
-rs_485 RS485_BUS;                   // RS485 BUS
+MODSERIAL pc(TXD, RXD);         // tx, rx
+timer0 down_timer;              // Timer für Zeitsteuerung
 
 monitor mon;
 
-void led_aus(void)
-{
-    led1 = 1;
-    led2 = 1;
-    led3 = 1;
-    led4 = 1;
-    led5 = 1; 
-    led6 = 1;
-    led7 = 1; 
-    out2 = 0; 
-    out3 = 0;
-    out4 = 0;                
-}
+//=====================================================================================
+// Globale Variablen
 
+bool in, flag_ablauftimer;
+struct di_struct in1;            // Eingang 1
+struct di_struct in2;            // Eingang 2
 
-uint8_t i = 1;
+//------------------------------------------------------------------------------------
 
 int main() {
     
     pc.baud(115200);
-    pc.printf("\nHello IOX.mini\n");
-    
-    down_timer.SetCountdownTimer(1,1,500); // Timer für LED
+
+    pc.printf("\nGalliker LC4 tore V0.0_a");
+    pc.printf("\n build at "__DATE__"  "__TIME__" ");    
+
+    in1.old = 1;        // 1 im Ruhezustand
+    in2.old = 1;        // 1 im Ruhezustand    
+
+    in1.flag = false;
+    in2.flag = false;
+
+    flag_ablauftimer = false;
+              
+    down_timer.SetCountdownTimer(0,1,500); // Timer für LED
+    down_timer.SetCountdownTimer(1,1,500); // Timer für Eingänge lesen
     
     while(1) {
          
         mon.monPC();          // Eingaben abfragen und auswerten
-        //RS485_BUS.execute();  // RS485 Bus
+        
+        //  RS485_BUS.execute();  // RS485 Bus
         
         //--------------------------------------------------------------------------
         // LED für Statusanzeige              
        
-        if (down_timer.GetTimerStatus(1) == 0)
+        if (down_timer.GetTimerStatus(0) == 0)
+        {  
+            down_timer.SetCountdownTimer(0,1,500);    // alle 500ms 
+            led1 = !led1;
+        } 
+        
+        //-------------------------------------------------------------------------------
+        // Eingänge abfragen und Aktionen ableiten
+        
+        if (down_timer.GetTimerStatus(1) == 0) 
         {
-            // RS485.printf("\n %02x",i);
+            down_timer.SetCountdownTimer(1,1,10); // ms Timer * 10 => ergibt 10 ms  
+          
+            //==============================================================================================
+            // Impuls auf IN1 = OUT1 für 1s auf EIN
+            //
+            // Wenn Impuls auf IN0, dann wird ein Ablauftimer aktiviert (1,5h) 
+            // - nach Ablauf dieser Zeit = OUT1 für 1s auf EIN 
+            // - sofern nicht vorher ein Impuls von IN1 registriert wurde
+            // 
+            // Ablauftimer ist Timer 4
+
+            in = IN_1;
+            if (in != in1.old)       // negative Flanke an IN1
+            {
+                in1.old = 0;  
+                led_in1 = EIN;
+                out1 = 1;
+                led_out1 = EIN;
+                down_timer.SetCountdownTimer(2,1,1000);  // 1 Sekunde
+                in1.flag = true;
+                down_timer.SetCountdownTimer(4,3,90);    // 1,5 Stunden
+                flag_ablauftimer = true;
+                out3 = 1;                                // LED Taster (Ablaufzeit aktiviert)
+                pc.printf("\n negative Flanke IN1 \n");
+          
+            }
             
-            down_timer.SetCountdownTimer(1,1,50);    // alle 500ms 
-            // pc.printf("\nLED #%d",i);
-            switch (i)
+            if (in && !in1.old)      // positive Flanke an IN1
+            {
+                in1.old = 1;
+                led_in1 = AUS;
+                pc.printf("\n positve Flanke IN1 \n");
+            }
+            
+            if (in1.flag && (down_timer.GetTimerStatus(2) == 0))
             {
-                
-                case 1:
-                    i = 2;
-                    led_aus();
-                    led1 = 0;
-                    break;
-                case 2:
-                    i = 3;
-                    led_aus();
-                    led2 = 0;
-                    break; 
-                case 3:
-                    i = 4;
-                    led_aus();
-                    led3 = 0;
-                    break;  
-                case 4:
-                    i = 5;
-                    led_aus();
-                    led4 = 0;
-                    break;
-                case 5:
-                    i = 6;
-                    led_aus();
-                    led5 = 0;
-                    break;
-                case 6:
-                    i = 7;
-                    led_aus();
-                    led6 = 0;
-                    break; 
-                case 7:
-                    i = 8;
-                    led_aus();
-                    led7 = 0;
-                    break;
-                case 8:     // Die LED's sind mit den Ausgängen verbunden und werden mit 1 geschaltet
-                    i = 9;
-                    led_aus();
-                    out2 = 1;
-                    break;      
-                case 9:
-                    i = 10;
-                    led_aus();
-                    out3 = 1;
-                    break; 
-                case 10:
-                    i = 1;
-                    led_aus();
-                    out4 = 1;
-                    break;                                                                                                      
-            } // end switch
-        } // end if(down_timer
+               in1.flag = false;
+               out1 = 0;
+               led_out1 = AUS; 
+            }
+            
+            //==============================================================================================
+            // Impuls auf IN2 = OUT2 für 1s  auf EIN
+            //
+
+            in = IN_2;
+            if (in != in2.old)       // negative Flanke an IN2
+            {
+                in2.old = 0;  
+                led_in2 = EIN;
+                out2 = 1;
+                down_timer.SetCountdownTimer(3,1,1000);     // 1 Sekunde
+                in2.flag = true;
+                flag_ablauftimer = false;                   // Ablaufzeit wird unterbrochen
+                pc.printf("\n negative Flanke IN2 \n");
+            }
+            
+            if (in && !in2.old)      // positive Flanke an IN2
+            {
+                in2.old = 1;
+                led_in2 = AUS;
+                pc.printf("\n positve Flanke IN2 \n");
+            }
+            
+            if (in2.flag && (down_timer.GetTimerStatus(3) == 0))
+            {
+               in2.flag = false;
+               out2 = 0; 
+            } 
+            
+            //==============================================================================================
+            // prüfen ob Ablaufzeit vorbei, falls ja, die Ausgang out2 für eine Sekunde auf 1 setzen
+            //  
+
+            if (flag_ablauftimer && (down_timer.GetTimerStatus(4) == 0))
+            {
+                flag_ablauftimer = false;
+                out2 = 1;
+                out3 = 0;                                // LED Taster (Zeit abgelaufen)
+                down_timer.SetCountdownTimer(3,1,1000);  // 1 Sekunde
+                in2.flag = true;
+            }            
+        
+        }
+                      
     } // end while(1)
 }
--- a/mon.lib	Fri Feb 05 16:52:41 2016 +0000
+++ b/mon.lib	Thu Mar 10 20:35:49 2016 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/teams/Notaus/code/mon-050216/#bf1028d27a23
+https://developer.mbed.org/teams/Notaus/code/mon-050216/#512482b7f8c6
--- a/timer0.lib	Fri Feb 05 16:52:41 2016 +0000
+++ b/timer0.lib	Thu Mar 10 20:35:49 2016 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/teams/Notaus/code/timer0-050216/#3ab9e5cd87e7
+https://developer.mbed.org/teams/Notaus/code/timer0-050216/#f63678f5ed05