ohne class

Dependencies:   mbed

main.cpp

Committer:
mexx
Date:
2018-11-29
Revision:
0:2acc9e1d4fff
Child:
1:580bd2d56f39

File content as of revision 0:2acc9e1d4fff:

#include "mbed.h"

DigitalIn  btn(P14);  // für den Test ist nur dieser erforderlich


BusOut BoardLeds ( LED1 , LED2, LED3, LED4);

Ticker tickerflipper;             // Ticker für blinken der LED
volatile int blinkCounter=0;  // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird

enum State {ST_LEDAUS=0, ST_LEDEIN};
State state;

bool pressed = false;

void flipper()                 // 
{
    blinkCounter++;           // Variable die hochgezählt wird um die LED 2 mal blinken zu lassen
    Led4 = !Led4;           // umschalten der LED
}

 
void rise(void)
{  
    wait_ms(100);           // Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt...
    pressed = true;         // Umschalten auf WAHR, es wurde gedrückt
}

bool CheckFlag() 
{
    if (pressed)            // Abfrage ob pressed WAHR ist
    {
        pressed=false;      // Rücksetzen wieder auf Status FALSCH
        return true;        // Rückgabe bei CheckFlag das WAHR ist
    }
    return false;           // Wenn nicht pressed Wahr ist wird CheckFlag als FALSCH zurück gegeben
}


void ST_LedAus (void)
{


    
    printf("State: 1 (Aus)");       // Ausgabe auf der seriellen Console
    
//_______________entry____________________\\
    
//_______________do_______________________\\

    while(true) 
    {
        Led1 = 0;           // Led1 wird auf LOW gesetzt
        if(CheckFlag())     // Ist CheckFlag WAHR dann
        {
            state = ST_LEDEIN; // Wechsel auf Status EIN
            
//______________exit_______________________\\

            return;
            }
        }
}


void ST_LedEin (void)
{

    printf("State: 2 (Ein)");       // Ausgabe auf der seriellen Console
    
    
//____________aufruf um die Led blinken zu lassen____\\
    tickerflipper.attach(&flipper, 0.3);     // the address of the function to be attached (flip) and the interval (0,3 seconds)
    
    while(true)                     // Dauerschleife
    {
        if ( blinkCounter >= 4) break;// Ausbruch aus der Whileschleife wenn der blinkCounter größer gleich 4 ist
    }
        tickerflipper.detach();           // Tiker deaktivieren
        blinkCounter=0;               // blinkCounter rücksetzen auf 0 damit es wieder von vorne losgehen kann
    
    
//_____________do______________\\

    while(true) {
        Led1 = 1;
    
        if(CheckFlag()) 
        {
            state = ST_LEDAUS;
            
//_______________exit______________\\

            return;
            }
        }
}

void ST_Error (void)
{
    printf("State: ERROR!!!");
    return;
}


void stateMachine()
{
    switch (state)
    {
    case ST_LEDAUS: ST_LedAus();
        break;
    case ST_LEDEIN: ST_LedEin();
        break;
    default: ST_Error();  // sollte nicht auftreten :-)
        break;
    }
}


 
int main()
{
    SW1.rise(&rise);      //.fall(&fall);
    state = ST_LEDAUS;
    while(true)
    {
        stateMachine(); 
    }
}