Main.cpp Fahrradleuchte

Dependencies:   mbed

Committer:
RudiNiki
Date:
Mon Jan 25 16:40:23 2016 +0000
Revision:
0:fb288e5361c9
Test Fahrradleuchte

Who changed what in which revision?

UserRevisionLine numberNew 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 }