Wechselblinker.ino 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include <MobaTools.h>
  2. /* Demo: Wechselblinker
  3. * Dieses Demo ist etwas komplexer und zeigt die Realisierung eines
  4. * Wechselblinker, der per Schalter ein- und ausgeschaltet wird.
  5. * Wie bei Wechselblinkern an einem BÜ üblich, starten die beiden Lampen
  6. * gleichzeitig, um dann im Wechseltakt zu blinken
  7. * Dieses Demo verwendet auch die 'Eieruhr' um Zeitverzögerungen zu realisieren
  8. * Die 'Eieruhr' ist ein Zeitzähler, der aufgezogen werden kann und im loop kann
  9. * abgefragt werden, ob er abgelaufen ist.
  10. */
  11. // Festlegen der Ports
  12. const int Blinker1P = 5; // Die beiden Led's des
  13. const int Blinker2P = 6; // Wechselblinkers.
  14. const int SchalterP = 7; // Schalter, der den Wechselblinker ein und ausschaltet
  15. // Weitere Konstante
  16. const int wbZykl = 1100; // Zykluszeit des Wechselblinkers
  17. const int wbSoft = 400; // Auf/Abblendzeit der Lampen
  18. // Zustand des Wechselblinker
  19. byte wblZustand = 0; // In dieser Variable wird hinterlegt, in welchem Zustand
  20. // sich der Wechselblinker gerade befindet
  21. #define WBL_AUS 0 // beide Lampen sind aus
  22. #define WBL_START 1 // Startphase: beide Lampen sind an
  23. #define WBL_BLINKT 2 // Die Lampen blinken normal im Wechsel
  24. byte ledState; // HIGH : Blinker1 ist an, LOW Blinker2 ist an
  25. SoftLed Blinker1;
  26. SoftLed Blinker2;
  27. EggTimer BlinkUhr;
  28. void setup() {
  29. pinMode(SchalterP, INPUT_PULLUP);
  30. Blinker1.attach(Blinker1P); // die Ausgänge werden automatisch auf OUTPUT gesetzt
  31. Blinker2.attach(Blinker2P);
  32. Blinker1.riseTime( wbSoft ); // Aufblendzeit in ms
  33. Blinker2.riseTime( wbSoft ); // Aufblendzeit in ms
  34. }
  35. void loop() {
  36. // Wechselblinker
  37. switch (wblZustand) {
  38. case WBL_AUS:
  39. // Beide Lampen sind aus, warten auf einschalten
  40. if ( digitalRead(SchalterP) == HIGH && BlinkUhr.running() == false ) {
  41. // Beide Leds einschalten, Timer für gemeinsames Startleuchten
  42. Blinker1.on();
  43. Blinker2.on();
  44. BlinkUhr.setTime( wbSoft );
  45. wblZustand = WBL_START;
  46. }
  47. break;
  48. case WBL_START:
  49. // Startphase: Nach Zeitablauf erste Led wieder aus
  50. if ( BlinkUhr.running() == false ) {
  51. // Die Startzeit ist abgelaufen, Übergang zur normalen Blinkphase
  52. ledState = HIGH;
  53. Blinker2.off();
  54. BlinkUhr.setTime(wbZykl/2); // Zeitverzögerung setzen
  55. wblZustand = WBL_BLINKT;
  56. }
  57. break;
  58. case WBL_BLINKT:
  59. if ( BlinkUhr.running() == false ) {
  60. BlinkUhr.setTime(wbZykl/2); // Zeitverzögerung setzen
  61. if ( ledState == LOW ) {
  62. Blinker1.on();
  63. Blinker2.off();
  64. ledState = HIGH;
  65. } else {
  66. ledState = LOW;
  67. Blinker2.on();
  68. Blinker1.off();
  69. }
  70. }
  71. if ( digitalRead(SchalterP) == LOW ) {
  72. // Wechselblinker abschalten
  73. Blinker1.off();
  74. Blinker2.off();
  75. wblZustand = WBL_AUS;
  76. BlinkUhr.setTime(wbZykl); // minimale 'Aus' zeit des Blinkers
  77. //( schützt vor Schalterprellen )
  78. }
  79. break;
  80. } // Ende switch Wechselblinker
  81. }