Main.cpp Fahrradleuchte
Dependencies: mbed
main.cpp@0:fb288e5361c9, 2016-01-25 (annotated)
- Committer:
- RudiNiki
- Date:
- Mon Jan 25 16:40:23 2016 +0000
- Revision:
- 0:fb288e5361c9
Test Fahrradleuchte
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RudiNiki | 0:fb288e5361c9 | 1 | |
RudiNiki | 0:fb288e5361c9 | 2 | #include "mbed.h" |
RudiNiki | 0:fb288e5361c9 | 3 | #include "FahrradLeuchte.h" |
RudiNiki | 0:fb288e5361c9 | 4 | |
RudiNiki | 0:fb288e5361c9 | 5 | // LSB MSB |
RudiNiki | 0:fb288e5361c9 | 6 | BusOut lb(P1_7,P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1); |
RudiNiki | 0:fb288e5361c9 | 7 | |
RudiNiki | 0:fb288e5361c9 | 8 | // Statusled zeigt uns in welchen Zustand die Statemachine gerade ist |
RudiNiki | 0:fb288e5361c9 | 9 | BusOut stLED(P1_13, P1_12); |
RudiNiki | 0:fb288e5361c9 | 10 | |
RudiNiki | 0:fb288e5361c9 | 11 | // BtnEventM0 erledigt für uns die Abfrage der positiven Flanke |
RudiNiki | 0:fb288e5361c9 | 12 | BtnEventM0 sw4(P1_16), sw3(P0_23); |
RudiNiki | 0:fb288e5361c9 | 13 | // sw4 == forward sw3 == backward |
RudiNiki | 0:fb288e5361c9 | 14 | |
RudiNiki | 0:fb288e5361c9 | 15 | class FahrradLeuchte |
RudiNiki | 0:fb288e5361c9 | 16 | { |
RudiNiki | 0:fb288e5361c9 | 17 | public: |
RudiNiki | 0:fb288e5361c9 | 18 | void Init() |
RudiNiki | 0:fb288e5361c9 | 19 | { |
RudiNiki | 0:fb288e5361c9 | 20 | state=1; t1.start(); |
RudiNiki | 0:fb288e5361c9 | 21 | } |
RudiNiki | 0:fb288e5361c9 | 22 | void State1Func(); |
RudiNiki | 0:fb288e5361c9 | 23 | void State2Func(); |
RudiNiki | 0:fb288e5361c9 | 24 | void State3Func(); |
RudiNiki | 0:fb288e5361c9 | 25 | public: |
RudiNiki | 0:fb288e5361c9 | 26 | void State1Action(); |
RudiNiki | 0:fb288e5361c9 | 27 | void State2Action(); |
RudiNiki | 0:fb288e5361c9 | 28 | void State3Action(); |
RudiNiki | 0:fb288e5361c9 | 29 | public: |
RudiNiki | 0:fb288e5361c9 | 30 | int state; // state sagt uns in welchen Zustand die Fahrradleuchte gerade ist |
RudiNiki | 0:fb288e5361c9 | 31 | Timer t1; |
RudiNiki | 0:fb288e5361c9 | 32 | }; |
RudiNiki | 0:fb288e5361c9 | 33 | |
RudiNiki | 0:fb288e5361c9 | 34 | FahrradLeuchte f1; |
RudiNiki | 0:fb288e5361c9 | 35 | |
RudiNiki | 0:fb288e5361c9 | 36 | int main(void) |
RudiNiki | 0:fb288e5361c9 | 37 | { |
RudiNiki | 0:fb288e5361c9 | 38 | sw4.Init(); sw3.Init(); f1.Init(); |
RudiNiki | 0:fb288e5361c9 | 39 | while(1) |
RudiNiki | 0:fb288e5361c9 | 40 | { |
RudiNiki | 0:fb288e5361c9 | 41 | if (f1.state==1) |
RudiNiki | 0:fb288e5361c9 | 42 | f1.State1Func(); |
RudiNiki | 0:fb288e5361c9 | 43 | if (f1.state==2) |
RudiNiki | 0:fb288e5361c9 | 44 | f1.State2Func(); |
RudiNiki | 0:fb288e5361c9 | 45 | if (f1.state==3) |
RudiNiki | 0:fb288e5361c9 | 46 | f1.State3Func(); |
RudiNiki | 0:fb288e5361c9 | 47 | } |
RudiNiki | 0:fb288e5361c9 | 48 | } |
RudiNiki | 0:fb288e5361c9 | 49 | |
RudiNiki | 0:fb288e5361c9 | 50 | void FahrradLeuchte::State1Func() |
RudiNiki | 0:fb288e5361c9 | 51 | { |
RudiNiki | 0:fb288e5361c9 | 52 | //Einmalige Aktion in der der Zustandsfunktion |
RudiNiki | 0:fb288e5361c9 | 53 | stLED = 1; // Anzeigen dass wir im Zustand 1 sind |
RudiNiki | 0:fb288e5361c9 | 54 | t1.reset(); |
RudiNiki | 0:fb288e5361c9 | 55 | while (1) |
RudiNiki | 0:fb288e5361c9 | 56 | { |
RudiNiki | 0:fb288e5361c9 | 57 | State1Action(); |
RudiNiki | 0:fb288e5361c9 | 58 | if (sw4.CheckFlag()) |
RudiNiki | 0:fb288e5361c9 | 59 | { |
RudiNiki | 0:fb288e5361c9 | 60 | state=2; |
RudiNiki | 0:fb288e5361c9 | 61 | return; |
RudiNiki | 0:fb288e5361c9 | 62 | } |
RudiNiki | 0:fb288e5361c9 | 63 | if (sw3.CheckFlag()) |
RudiNiki | 0:fb288e5361c9 | 64 | { |
RudiNiki | 0:fb288e5361c9 | 65 | state=3; |
RudiNiki | 0:fb288e5361c9 | 66 | return; |
RudiNiki | 0:fb288e5361c9 | 67 | } |
RudiNiki | 0:fb288e5361c9 | 68 | } |
RudiNiki | 0:fb288e5361c9 | 69 | } |
RudiNiki | 0:fb288e5361c9 | 70 | |
RudiNiki | 0:fb288e5361c9 | 71 | void FahrradLeuchte::State1Action() |
RudiNiki | 0:fb288e5361c9 | 72 | { |
RudiNiki | 0:fb288e5361c9 | 73 | // 2Hz blinken |
RudiNiki | 0:fb288e5361c9 | 74 | if (t1.read_ms()>500) |
RudiNiki | 0:fb288e5361c9 | 75 | { |
RudiNiki | 0:fb288e5361c9 | 76 | t1.reset(); |
RudiNiki | 0:fb288e5361c9 | 77 | if (lb==0) |
RudiNiki | 0:fb288e5361c9 | 78 | lb = 0xFFFF; |
RudiNiki | 0:fb288e5361c9 | 79 | else |
RudiNiki | 0:fb288e5361c9 | 80 | lb = 0; |
RudiNiki | 0:fb288e5361c9 | 81 | } |
RudiNiki | 0:fb288e5361c9 | 82 | } |
RudiNiki | 0:fb288e5361c9 | 83 | |
RudiNiki | 0:fb288e5361c9 | 84 | void FahrradLeuchte::State2Func() |
RudiNiki | 0:fb288e5361c9 | 85 | { |
RudiNiki | 0:fb288e5361c9 | 86 | stLED = 2; // Anzeigen dass wir im Zustand 1 sind |
RudiNiki | 0:fb288e5361c9 | 87 | t1.reset(); |
RudiNiki | 0:fb288e5361c9 | 88 | while (1) |
RudiNiki | 0:fb288e5361c9 | 89 | { |
RudiNiki | 0:fb288e5361c9 | 90 | State2Action(); |
RudiNiki | 0:fb288e5361c9 | 91 | if (sw4.CheckFlag()) |
RudiNiki | 0:fb288e5361c9 | 92 | { |
RudiNiki | 0:fb288e5361c9 | 93 | state=3; |
RudiNiki | 0:fb288e5361c9 | 94 | return; |
RudiNiki | 0:fb288e5361c9 | 95 | } |
RudiNiki | 0:fb288e5361c9 | 96 | if (sw3.CheckFlag()) |
RudiNiki | 0:fb288e5361c9 | 97 | { |
RudiNiki | 0:fb288e5361c9 | 98 | state=1; |
RudiNiki | 0:fb288e5361c9 | 99 | return; |
RudiNiki | 0:fb288e5361c9 | 100 | } |
RudiNiki | 0:fb288e5361c9 | 101 | } |
RudiNiki | 0:fb288e5361c9 | 102 | } |
RudiNiki | 0:fb288e5361c9 | 103 | |
RudiNiki | 0:fb288e5361c9 | 104 | void FahrradLeuchte::State2Action() |
RudiNiki | 0:fb288e5361c9 | 105 | { |
RudiNiki | 0:fb288e5361c9 | 106 | // Runlight Left 5Hz |
RudiNiki | 0:fb288e5361c9 | 107 | // 2Hz blinken |
RudiNiki | 0:fb288e5361c9 | 108 | if (t1.read_ms()>200) |
RudiNiki | 0:fb288e5361c9 | 109 | { |
RudiNiki | 0:fb288e5361c9 | 110 | t1.reset(); |
RudiNiki | 0:fb288e5361c9 | 111 | if (lb==0) |
RudiNiki | 0:fb288e5361c9 | 112 | lb = 0xFFFF; |
RudiNiki | 0:fb288e5361c9 | 113 | else |
RudiNiki | 0:fb288e5361c9 | 114 | lb = 0; |
RudiNiki | 0:fb288e5361c9 | 115 | } |
RudiNiki | 0:fb288e5361c9 | 116 | } |
RudiNiki | 0:fb288e5361c9 | 117 | |
RudiNiki | 0:fb288e5361c9 | 118 | void FahrradLeuchte::State3Func() |
RudiNiki | 0:fb288e5361c9 | 119 | { |
RudiNiki | 0:fb288e5361c9 | 120 | stLED = 3; // Anzeigen dass wir im Zustand 1 sind |
RudiNiki | 0:fb288e5361c9 | 121 | t1.reset(); |
RudiNiki | 0:fb288e5361c9 | 122 | while (1) |
RudiNiki | 0:fb288e5361c9 | 123 | { |
RudiNiki | 0:fb288e5361c9 | 124 | State3Action(); |
RudiNiki | 0:fb288e5361c9 | 125 | if (sw4.CheckFlag()) |
RudiNiki | 0:fb288e5361c9 | 126 | { |
RudiNiki | 0:fb288e5361c9 | 127 | state=1; |
RudiNiki | 0:fb288e5361c9 | 128 | return; |
RudiNiki | 0:fb288e5361c9 | 129 | } |
RudiNiki | 0:fb288e5361c9 | 130 | if (sw3.CheckFlag()) |
RudiNiki | 0:fb288e5361c9 | 131 | { |
RudiNiki | 0:fb288e5361c9 | 132 | state=2; |
RudiNiki | 0:fb288e5361c9 | 133 | return; |
RudiNiki | 0:fb288e5361c9 | 134 | } |
RudiNiki | 0:fb288e5361c9 | 135 | } |
RudiNiki | 0:fb288e5361c9 | 136 | } |
RudiNiki | 0:fb288e5361c9 | 137 | |
RudiNiki | 0:fb288e5361c9 | 138 | void FahrradLeuchte::State3Action() |
RudiNiki | 0:fb288e5361c9 | 139 | { |
RudiNiki | 0:fb288e5361c9 | 140 | // Runlight Right 10Hz |
RudiNiki | 0:fb288e5361c9 | 141 | // 2Hz blinken |
RudiNiki | 0:fb288e5361c9 | 142 | if (t1.read_ms()>100) |
RudiNiki | 0:fb288e5361c9 | 143 | { |
RudiNiki | 0:fb288e5361c9 | 144 | t1.reset(); |
RudiNiki | 0:fb288e5361c9 | 145 | if (lb==0) |
RudiNiki | 0:fb288e5361c9 | 146 | lb = 0xFFFF; |
RudiNiki | 0:fb288e5361c9 | 147 | else |
RudiNiki | 0:fb288e5361c9 | 148 | lb = 0; |
RudiNiki | 0:fb288e5361c9 | 149 | } |
RudiNiki | 0:fb288e5361c9 | 150 | } |