Update vom 10.05.15
Dependencies: FreescaleIAP MODSERIAL mbed monitor timer0
Fork of 18_PT1000 by
main.cpp
- Committer:
- rs27
- Date:
- 2015-08-23
- Revision:
- 21:6f524a6caabe
- Parent:
- 20:b85406f52de3
File content as of revision 21:6f524a6caabe:
// Version 1.0 erstellt am 22.08.2015 // // IN1 auf 0 = OUT5+6 AUS // IN1 auf 1 = OUT5+6 EIN plus 5 Sekunden Ausschaltverzögerung #include "mbed.h" #include "main.h" #include "timer0.h" #include "monitor.h" #include "MODSERIAL.h" #define NEED_CONSOLE_OUTPUT 1 // Set this if you need debug messages on the console // mit Debug wird die Programmgröße von 32,8k um ca. 300 Byte vergrößert // dies ist nicht bedeutend, aber auch die Ausführungszeit der Ausgabebefehle // benötigt CPU Zeit #if NEED_CONSOLE_OUTPUT #define DEBUG(...) { pc.printf(__VA_ARGS__); } #else #define DEBUG(...) // nothing #endif // #if NEED_CONSOLE_OUTPUT //------------------------------------------------------------------------------ // Anlegen von Klassen timer0 down_timer; // Zeitsteuerung MODSERIAL pc(USBTX, USBRX); // tx, rx monitor mon; Timer t; // Zeitmessung für Entprellen //------------------------------------------------------------------------------ // Zuordnung von Eingängen und Ausgängen DigitalOut LED(PTE30); DigitalOut OUT1(PTC6); // nicht belegt DigitalOut OUT2(PTC5); // nicht belegt DigitalOut OUT3(PTC4); // nicht belegt DigitalOut OUT4(PTC3); // Türöffner schaltet gegen GND max. 500mA DigitalOut OUT5(PTC2); // nicht belegt (Summer) DigitalOut OUT6(PTC1); // Relais: Tür / Torsteuerung Relais Kontakt als Ausgang DigitalIn IN1(PTC7); // Taster Türöffnersignal 24V oder 1 ist der Ruhezustand DigitalIn IN2(PTD4); // nicht belegt DigitalIn IN3(PTD5); // nicht belegt DigitalIn IN4(PTD6); // nicht belegt DigitalIn IN5(PTD7); // nicht belegt DigitalInOut rst(PTA4); //Connect this to the reset pin //------------------------------------------------------------------------------ // Globale Variablen bool in; struct di_struct in1; // Eingang 1 //------------------------------------------------------------------------------ // int main() { rst.input(); // SW watchdog ist derzeit nicht erforderlich //------------------------------------------------------------------------------ // RS232 Schnittstellt welche auf den CMSIS-DAP (USB Port) weitergeleitet wird // pc.baud(115200); pc.printf("\n N1380 V1.0 was compiled on %s %s \n", __DATE__,__TIME__); //-------------------------------------------------------------------- // Anfangswerte setzen in1.old = 1; // 1 im Ruhezustand OUT4 = 0; OUT6 = 0; //-------------------------------------------------------------------- // Softwaretimer für die Zeitsteuerung anlegen down_timer.SetCountdownTimer(0,1,500); // 1 ms Timer * 500 => ergibt 500 ms für die LED down_timer.SetCountdownTimer(1,1,10); // 1 ms Timer * 10 => ergibt 10 ms für die Tasterabfrage //-------------------------------------------------------------------- // Schleife fuer die Datenerfassung while(1) { //------------------------------------------- // Prüfen ob Zeichen eingegeben wurden // wird in der aktiven Version ausgeblendet, ist nur zum Testen mon.get_line(); //------------------------------------------- // timer 0 steuert die LED auf dem Board mit der Takrate 0,5 Sekunden if (down_timer.GetTimerStatus(0) == 0) { down_timer.SetCountdownTimer(0,1,500); LED = !LED; } //------------------------------------------- // Eingänge abfragen und Aktionen ableiten // down if (down_timer.GetTimerStatus(1) == 0) { //down_timer 1 mit 10 ms gesetzt down_timer.SetCountdownTimer(1,1,10); //------------------------------------------------ // IN1 Nottaster auswerten, null im Ruhezustand // wird mit der negativen Flanke aktiviert // das Signal muss mindestens 10ms anliegen, damit es akzeptiert wird in = IN1; if(!in && in1.old) // Öffner im Ruhezustand 24 V >> durch Drücken wird eine neg. Flanke erzeugt { in1.old = 0; DEBUG("\n negative Flanke IN1 \n"); } if (in && !in1.old) // Öffner im Ruhenzustand 24 V >> durch Rückstellen enteht eine pos. Flanke { in1.old = 1; down_timer.SetCountdownTimer(3,1,5000); // Zeit für Abschaltverzögerung auf 5 Sekunden setzen DEBUG("\n positve Flanke IN1 \n"); } //--------------------------------------------------------------------------------------------------------------------------------------- // Die Eingänge sind nun gelesen, jetzt kommt das Steuern der Ausgänge // //------------------------------------------------ // IN1 auf 0 = OUT4+6 AUS // Nach Ablauf der Ausschaltverzögerung wird der Ausgang wieder auf 0 geschaltet if (!in1.old && (down_timer.GetTimerStatus(3) == 0)) { OUT4 = 0; OUT6 = 0; } //------------------------------------------------ // IN1 auf 1 = OUT4+6 EIN plus 5 Sekunden Ausschaltverzögerung // Die Ausschaltverögerung wirkt auf das Ausschalten nicht auf das Einschalten if (in1.old) { OUT4 = 1; OUT6 = 1; } } // end if (downtimer ... } // end while } // end main