050216
Dependencies: MODSERIAL mon-050216 mbed timer0-050216
Fork of mbed_blinky by
Revision 11:be852b7b7692, committed 2016-03-10
- Comitter:
- rs27
- Date:
- Thu Mar 10 20:35:49 2016 +0000
- Parent:
- 10:cfd15bd4762a
- Commit message:
Changed in this revision
diff -r cfd15bd4762a -r be852b7b7692 RS_485.lib --- 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
diff -r cfd15bd4762a -r be852b7b7692 main.cpp --- 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) }
diff -r cfd15bd4762a -r be852b7b7692 mon.lib --- 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
diff -r cfd15bd4762a -r be852b7b7692 timer0.lib --- 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