Main.cpp Fahrradleuchte

Dependencies:   mbed

main.cpp

Committer:
RudiNiki
Date:
2016-01-25
Revision:
0:fb288e5361c9

File content as of revision 0:fb288e5361c9:


#include "mbed.h"
#include "FahrradLeuchte.h"

//        LSB                                                      MSB
BusOut lb(P1_7,P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1);

// Statusled zeigt uns in welchen Zustand die Statemachine gerade ist
BusOut stLED(P1_13, P1_12);

// BtnEventM0 erledigt für uns die Abfrage der positiven Flanke
BtnEventM0 sw4(P1_16), sw3(P0_23);
// sw4 == forward    sw3 == backward

class FahrradLeuchte
{
    public:
        void Init()
        {
            state=1; t1.start();
        }
        void State1Func(); 
        void State2Func();
        void State3Func();  
    public:     
        void State1Action();
        void State2Action();
        void State3Action();
    public:
        int state;  // state sagt uns in welchen Zustand die Fahrradleuchte gerade ist
        Timer t1;
};

FahrradLeuchte f1;

int main(void)
{
    sw4.Init(); sw3.Init(); f1.Init();
    while(1) 
    {
        if (f1.state==1)
            f1.State1Func();
        if (f1.state==2)
            f1.State2Func();
        if (f1.state==3)
            f1.State3Func();   
    }
}

void FahrradLeuchte::State1Func()
{
    //Einmalige Aktion in der der Zustandsfunktion
    stLED = 1; // Anzeigen dass wir im Zustand 1 sind
    t1.reset();   
    while (1)
    {
        State1Action();
        if (sw4.CheckFlag())
        {    
            state=2;
            return;
        }
        if (sw3.CheckFlag())
        {
            state=3;
            return;   
        }    
    }
}

void FahrradLeuchte::State1Action()
{
    // 2Hz blinken
    if (t1.read_ms()>500)
    {
        t1.reset();
        if (lb==0)
            lb = 0xFFFF;
        else
            lb = 0;    
    } 
}

void FahrradLeuchte::State2Func()
{
    stLED = 2; // Anzeigen dass wir im Zustand 1 sind
    t1.reset();   
    while (1)
    {
        State2Action();
        if (sw4.CheckFlag())
        {    
            state=3;
            return;
        }
        if (sw3.CheckFlag())
        {
            state=1;
            return;   
        }    
    }
}

void FahrradLeuchte::State2Action()
{
    // Runlight Left 5Hz
    // 2Hz blinken
    if (t1.read_ms()>200)
    {
        t1.reset();
        if (lb==0)
            lb = 0xFFFF;
        else
            lb = 0;    
    } 
}

void FahrradLeuchte::State3Func()
{
    stLED = 3; // Anzeigen dass wir im Zustand 1 sind
    t1.reset();   
    while (1)
    {
        State3Action();
        if (sw4.CheckFlag())
        {    
            state=1;
            return;
        }
        if (sw3.CheckFlag())
        {
            state=2;
            return;   
        }    
    }
}

void FahrradLeuchte::State3Action()
{
   // Runlight Right 10Hz
   // 2Hz blinken
    if (t1.read_ms()>100)
    {
        t1.reset();
        if (lb==0)
            lb = 0xFFFF;
        else
            lb = 0;    
    } 
}