Notaus / Mbed 2 deprecated 19_Taster_a

Dependencies:   FreescaleIAP MODSERIAL mbed monitor timer0

Fork of 18_PT1000 by Temp27

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 // Version 1.0   erstellt am 22.08.2015
00002 //
00003 // IN1 auf 0 = OUT5+6 AUS
00004 // IN1 auf 1 = OUT5+6 EIN plus 5 Sekunden Ausschaltverzögerung
00005 
00006 #include "mbed.h"
00007 #include "main.h"
00008 #include "timer0.h"
00009 #include "monitor.h"
00010 #include "MODSERIAL.h"
00011 
00012 #define NEED_CONSOLE_OUTPUT 1   // Set this if you need debug messages on the console
00013                                 // mit Debug wird die Programmgröße von 32,8k um ca. 300 Byte vergrößert
00014                                 // dies ist nicht bedeutend, aber auch die Ausführungszeit der Ausgabebefehle
00015                                 // benötigt CPU Zeit
00016 #if NEED_CONSOLE_OUTPUT
00017   #define DEBUG(...) { pc.printf(__VA_ARGS__); }
00018 #else
00019   #define DEBUG(...)    // nothing
00020 #endif                  // #if NEED_CONSOLE_OUTPUT 
00021 
00022 //------------------------------------------------------------------------------
00023 // Anlegen von Klassen
00024 
00025 timer0 down_timer;                              // Zeitsteuerung
00026 MODSERIAL pc(USBTX, USBRX);                     // tx, rx
00027 
00028 monitor mon;
00029 
00030 Timer t;                                        // Zeitmessung für Entprellen
00031 
00032 //------------------------------------------------------------------------------
00033 // Zuordnung von Eingängen und Ausgängen
00034 
00035 DigitalOut LED(PTE30);
00036 
00037 DigitalOut OUT1(PTC6);      // nicht belegt
00038 DigitalOut OUT2(PTC5);      // nicht belegt
00039 DigitalOut OUT3(PTC4);      // nicht belegt
00040 DigitalOut OUT4(PTC3);      // Türöffner                                schaltet gegen GND max. 500mA
00041 DigitalOut OUT5(PTC2);      // nicht belegt (Summer)
00042 DigitalOut OUT6(PTC1);      // Relais: Tür / Torsteuerung               Relais Kontakt als Ausgang
00043 
00044 DigitalIn IN1(PTC7);        // Taster Türöffnersignal                   24V oder 1 ist der Ruhezustand
00045 DigitalIn IN2(PTD4);        // nicht belegt  
00046 DigitalIn IN3(PTD5);        // nicht belegt                  
00047 DigitalIn IN4(PTD6);        // nicht belegt                             
00048 DigitalIn IN5(PTD7);        // nicht belegt 
00049 
00050 DigitalInOut rst(PTA4);     //Connect this to the reset pin
00051 
00052 //------------------------------------------------------------------------------
00053 // Globale Variablen
00054 
00055 bool in;
00056 
00057 struct di_struct in1;      // Eingang 1
00058 
00059 
00060 //------------------------------------------------------------------------------
00061 //
00062 
00063 int main()
00064 {
00065     rst.input();     // SW watchdog ist derzeit nicht erforderlich
00066     
00067     //------------------------------------------------------------------------------
00068     // RS232 Schnittstellt welche auf den CMSIS-DAP (USB Port) weitergeleitet wird
00069     //
00070     pc.baud(115200);
00071     pc.printf("\n N1380 V1.0 was compiled on %s  %s \n", __DATE__,__TIME__);
00072 
00073 
00074     //--------------------------------------------------------------------
00075     //  Anfangswerte setzen
00076 
00077     in1.old = 1;        // 1 im Ruhezustand      
00078     OUT4 = 0;
00079     OUT6 = 0; 
00080       
00081     //--------------------------------------------------------------------
00082     // Softwaretimer für die Zeitsteuerung anlegen
00083 
00084     down_timer.SetCountdownTimer(0,1,500);      // 1 ms Timer * 500 => ergibt 500 ms für die LED
00085     down_timer.SetCountdownTimer(1,1,10);       // 1 ms Timer * 10  => ergibt 10 ms für die Tasterabfrage
00086     
00087     //--------------------------------------------------------------------
00088     // Schleife fuer die Datenerfassung
00089 
00090     while(1) 
00091     {
00092         //-------------------------------------------
00093         // Prüfen ob Zeichen eingegeben wurden
00094         // wird in der aktiven Version ausgeblendet, ist nur zum Testen
00095         
00096         mon.get_line();
00097 
00098         //-------------------------------------------
00099         // timer 0 steuert die LED auf dem Board mit der Takrate 0,5 Sekunden
00100 
00101         if (down_timer.GetTimerStatus(0) == 0) 
00102         {
00103             down_timer.SetCountdownTimer(0,1,500);
00104             LED = !LED;
00105             
00106         }
00107 
00108         //-------------------------------------------
00109         // Eingänge abfragen und Aktionen ableiten
00110         // down
00111 
00112         if (down_timer.GetTimerStatus(1) == 0) 
00113         {
00114             //down_timer 1 mit 10 ms gesetzt
00115             down_timer.SetCountdownTimer(1,1,10);
00116 
00117             //------------------------------------------------
00118             // IN1  Nottaster auswerten, null im Ruhezustand
00119             // wird mit der negativen Flanke aktiviert
00120             // das Signal muss mindestens 10ms anliegen, damit es akzeptiert wird
00121         
00122             in = IN1;
00123             
00124             if(!in && in1.old)       // Öffner im Ruhezustand 24 V >> durch Drücken wird eine neg. Flanke erzeugt
00125             {                        
00126                 in1.old = 0;
00127                 DEBUG("\n negative Flanke IN1 \n");
00128             }
00129 
00130             if (in && !in1.old)      // Öffner im Ruhenzustand 24 V >> durch Rückstellen enteht eine pos. Flanke
00131             {
00132                 in1.old = 1;
00133                 down_timer.SetCountdownTimer(3,1,5000);  // Zeit für Abschaltverzögerung auf 5 Sekunden setzen
00134                 DEBUG("\n positve Flanke IN1 \n");
00135             }
00136 
00137             //---------------------------------------------------------------------------------------------------------------------------------------
00138             // Die Eingänge sind nun gelesen, jetzt kommt das Steuern der Ausgänge
00139             //
00140             
00141             //------------------------------------------------
00142             // IN1 auf 0 = OUT4+6 AUS
00143             // Nach Ablauf der Ausschaltverzögerung wird der Ausgang wieder auf 0 geschaltet
00144             
00145             if (!in1.old && (down_timer.GetTimerStatus(3) == 0)) 
00146             {          
00147                 OUT4 = 0;
00148                 OUT6 = 0;
00149             }
00150 
00151             //------------------------------------------------
00152             // IN1 auf 1 = OUT4+6 EIN plus 5 Sekunden Ausschaltverzögerung 
00153             // Die Ausschaltverögerung wirkt auf das Ausschalten nicht auf das Einschalten
00154                        
00155             if (in1.old)
00156             {   
00157                 OUT4 = 1;
00158                 OUT6 = 1;
00159             }            
00160             
00161         } // end if (downtimer ...
00162         
00163     } // end while
00164 
00165 } // end main
00166