Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: FreescaleIAP MODSERIAL mbed monitor timer0
Fork of 18_PT1000 by
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
Generated on Sat Jul 23 2022 04:58:04 by
1.7.2
