Fahrradleuchte

Dependencies:   mbed

Committer:
markusammer1992
Date:
Thu Jan 22 19:03:22 2015 +0000
Revision:
0:d5266079fbc9
Fahrradleuchte;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
markusammer1992 0:d5266079fbc9 1 #include "mbed.h"
markusammer1992 0:d5266079fbc9 2 #include "BtnEventM0.h"
markusammer1992 0:d5266079fbc9 3
markusammer1992 0:d5266079fbc9 4 // LSB MSB
markusammer1992 0:d5266079fbc9 5 BusOut lb (P1_7, P1_6, P1_4, P1_3, P1_1, P1_0, LED4, LED3, LED2, LED1);
markusammer1992 0:d5266079fbc9 6
markusammer1992 0:d5266079fbc9 7 // Statusled zeigt uns in welchem Zustand die Statemachine gerade ist
markusammer1992 0:d5266079fbc9 8 BusOut stLED (P1_13, P1_12);
markusammer1992 0:d5266079fbc9 9
markusammer1992 0:d5266079fbc9 10 // erledigt für uns die Abfrage der positiven Flanke
markusammer1992 0:d5266079fbc9 11 BtnEventM0 sw4(P1_16), sw3(P0_23);
markusammer1992 0:d5266079fbc9 12
markusammer1992 0:d5266079fbc9 13 class Fahrradleuchte
markusammer1992 0:d5266079fbc9 14 {
markusammer1992 0:d5266079fbc9 15 public:
markusammer1992 0:d5266079fbc9 16 void Init()
markusammer1992 0:d5266079fbc9 17 {
markusammer1992 0:d5266079fbc9 18 state = 1; t1.start();
markusammer1992 0:d5266079fbc9 19 }
markusammer1992 0:d5266079fbc9 20 void State1Func();
markusammer1992 0:d5266079fbc9 21 void State2Func();
markusammer1992 0:d5266079fbc9 22 void State3Func();
markusammer1992 0:d5266079fbc9 23 public:
markusammer1992 0:d5266079fbc9 24 void State1Action();
markusammer1992 0:d5266079fbc9 25 void State2Action();
markusammer1992 0:d5266079fbc9 26 void State3Action();
markusammer1992 0:d5266079fbc9 27 public:
markusammer1992 0:d5266079fbc9 28 int state;
markusammer1992 0:d5266079fbc9 29 Timer t1;
markusammer1992 0:d5266079fbc9 30 };
markusammer1992 0:d5266079fbc9 31
markusammer1992 0:d5266079fbc9 32 // Ein Objekt der Klasse Fahrradleuchte anlegen
markusammer1992 0:d5266079fbc9 33 Fahrradleuchte fl;
markusammer1992 0:d5266079fbc9 34
markusammer1992 0:d5266079fbc9 35 int main()
markusammer1992 0:d5266079fbc9 36 {
markusammer1992 0:d5266079fbc9 37 sw4.Init(); sw3.Init();
markusammer1992 0:d5266079fbc9 38 fl.Init();
markusammer1992 0:d5266079fbc9 39 while (1)
markusammer1992 0:d5266079fbc9 40 {
markusammer1992 0:d5266079fbc9 41 if (fl.state == 1)
markusammer1992 0:d5266079fbc9 42 fl.State1Func();
markusammer1992 0:d5266079fbc9 43 if (fl.state == 2)
markusammer1992 0:d5266079fbc9 44 fl.State2Func();
markusammer1992 0:d5266079fbc9 45 if (fl.state == 3)
markusammer1992 0:d5266079fbc9 46 fl.State3Func();
markusammer1992 0:d5266079fbc9 47 }
markusammer1992 0:d5266079fbc9 48 }
markusammer1992 0:d5266079fbc9 49
markusammer1992 0:d5266079fbc9 50 void Fahrradleuchte::State1Func()
markusammer1992 0:d5266079fbc9 51 {
markusammer1992 0:d5266079fbc9 52 // Einmalige Aktionen beim Eintritt in die Zustandsfunktion
markusammer1992 0:d5266079fbc9 53 t1.reset();
markusammer1992 0:d5266079fbc9 54 stLED = 1; // Anzeigen, dass wir im Zustand 1 sind
markusammer1992 0:d5266079fbc9 55
markusammer1992 0:d5266079fbc9 56 // Zyklische Aktionen in der Zustandsfunktion
markusammer1992 0:d5266079fbc9 57 while (1)
markusammer1992 0:d5266079fbc9 58 {
markusammer1992 0:d5266079fbc9 59 State1Action();
markusammer1992 0:d5266079fbc9 60 if (sw4.CheckFlag())
markusammer1992 0:d5266079fbc9 61 { state = 2; return; }
markusammer1992 0:d5266079fbc9 62 if (sw3.CheckFlag())
markusammer1992 0:d5266079fbc9 63 { state = 3; return; }
markusammer1992 0:d5266079fbc9 64 }
markusammer1992 0:d5266079fbc9 65 }
markusammer1992 0:d5266079fbc9 66
markusammer1992 0:d5266079fbc9 67 void Fahrradleuchte::State1Action()
markusammer1992 0:d5266079fbc9 68 {
markusammer1992 0:d5266079fbc9 69 // LED1 mit 500ms blinken
markusammer1992 0:d5266079fbc9 70 if (t1.read_ms() > 500)
markusammer1992 0:d5266079fbc9 71 {
markusammer1992 0:d5266079fbc9 72 t1.reset();
markusammer1992 0:d5266079fbc9 73 if (lb == 0)
markusammer1992 0:d5266079fbc9 74 lb = 512; //LED1
markusammer1992 0:d5266079fbc9 75 else
markusammer1992 0:d5266079fbc9 76 lb = 0;
markusammer1992 0:d5266079fbc9 77 }
markusammer1992 0:d5266079fbc9 78 }
markusammer1992 0:d5266079fbc9 79
markusammer1992 0:d5266079fbc9 80 void Fahrradleuchte::State2Func()
markusammer1992 0:d5266079fbc9 81 {
markusammer1992 0:d5266079fbc9 82 // Einmalige Aktionen beim Eintritt in die Zustandsfunktion
markusammer1992 0:d5266079fbc9 83 t1.reset();
markusammer1992 0:d5266079fbc9 84 stLED = 2; // Anzeigen, dass wir im Zustand 2 sind
markusammer1992 0:d5266079fbc9 85
markusammer1992 0:d5266079fbc9 86 // Zyklische Aktionen in der Zustandsfunktion
markusammer1992 0:d5266079fbc9 87 while (1)
markusammer1992 0:d5266079fbc9 88 {
markusammer1992 0:d5266079fbc9 89 State2Action();
markusammer1992 0:d5266079fbc9 90 if (sw4.CheckFlag())
markusammer1992 0:d5266079fbc9 91 { state = 3; return; }
markusammer1992 0:d5266079fbc9 92 if (sw3.CheckFlag())
markusammer1992 0:d5266079fbc9 93 { state = 1; return; }
markusammer1992 0:d5266079fbc9 94 }
markusammer1992 0:d5266079fbc9 95 }
markusammer1992 0:d5266079fbc9 96
markusammer1992 0:d5266079fbc9 97 void Fahrradleuchte::State2Action()
markusammer1992 0:d5266079fbc9 98 {
markusammer1992 0:d5266079fbc9 99 // LED2 mit 200ms blinken
markusammer1992 0:d5266079fbc9 100 if (t1.read_ms() > 200)
markusammer1992 0:d5266079fbc9 101 {
markusammer1992 0:d5266079fbc9 102 t1.reset();
markusammer1992 0:d5266079fbc9 103 if (lb == 0)
markusammer1992 0:d5266079fbc9 104 lb = 256; //LED2
markusammer1992 0:d5266079fbc9 105 else
markusammer1992 0:d5266079fbc9 106 lb = 0;
markusammer1992 0:d5266079fbc9 107 }
markusammer1992 0:d5266079fbc9 108 }
markusammer1992 0:d5266079fbc9 109
markusammer1992 0:d5266079fbc9 110 void Fahrradleuchte::State3Func()
markusammer1992 0:d5266079fbc9 111 {
markusammer1992 0:d5266079fbc9 112 // Einmalige Aktionen beim Eintritt in die Zustandsfunktion
markusammer1992 0:d5266079fbc9 113 t1.reset();
markusammer1992 0:d5266079fbc9 114 stLED = 3; // Anzeigen, dass wir im Zustand 3 sind
markusammer1992 0:d5266079fbc9 115
markusammer1992 0:d5266079fbc9 116 // Zyklische Aktionen in der Zustandsfunktion
markusammer1992 0:d5266079fbc9 117 while (1)
markusammer1992 0:d5266079fbc9 118 {
markusammer1992 0:d5266079fbc9 119 State3Action();
markusammer1992 0:d5266079fbc9 120 if (sw4.CheckFlag())
markusammer1992 0:d5266079fbc9 121 { state = 1; return; }
markusammer1992 0:d5266079fbc9 122 if (sw3.CheckFlag())
markusammer1992 0:d5266079fbc9 123 { state = 2; return; }
markusammer1992 0:d5266079fbc9 124 }
markusammer1992 0:d5266079fbc9 125 }
markusammer1992 0:d5266079fbc9 126
markusammer1992 0:d5266079fbc9 127 void Fahrradleuchte::State3Action()
markusammer1992 0:d5266079fbc9 128 {
markusammer1992 0:d5266079fbc9 129 // LED3 mit 100 blinken
markusammer1992 0:d5266079fbc9 130 if (t1.read_ms() > 100)
markusammer1992 0:d5266079fbc9 131 {
markusammer1992 0:d5266079fbc9 132 t1.reset();
markusammer1992 0:d5266079fbc9 133 if (lb == 0)
markusammer1992 0:d5266079fbc9 134 lb = 128; //LED3
markusammer1992 0:d5266079fbc9 135 else
markusammer1992 0:d5266079fbc9 136 lb = 0;
markusammer1992 0:d5266079fbc9 137 }
markusammer1992 0:d5266079fbc9 138 }