STM Schalter

Dependencies:   mbed C12832 LM75B

Stm_Schalter

https://os.mbed.com/users/mexx/code/info_181024_stm_schalter/

Aufgabe https://os.mbed.com/users/fpucher/code/HIM0Board/wiki/STM-Schalter

https://os.mbed.com/media/uploads/fpucher/stm0_3_error.jpg

iStateMaschine

#include "mbed.h"
#include "C12832.h"
#include "LM75B.h"

//      LCD
C12832 lcd(p5, p7, p6, p8, p11);    // Definition der Pins vom LCD
//      Temperatur
LM75B temp (p27, p28);
//      Led
DigitalOut Led1(LED1);   // 1. LED
DigitalOut Led2(LED2);   // 2. LED
DigitalOut Led3(LED3);   // 3. LED
DigitalOut Led4(LED4);   // 4. LED
//      Joystick
InterruptIn  Sw4(p13);      // LEFT
InterruptIn  Sw1(p14);      // CENTER
InterruptIn  Sw2(p15);      // UP
InterruptIn  Sw3(p12);      // DOWN
InterruptIn  Sw5(p16);      // RIGHT


//      Prototyping
void StateMachine();
//void ST_Error (void);
void ST_Ein (void);
void ST_Aus (void);
//void rise(void);
void Sw1Rise(void);
void Sw2Rise(void);
//bool CheckFlag() ;
bool CheckSw1(void);
bool CheckSw2(void);
void Time (void);
void TimeOut(void); 
void Flip (void);
void TempOut (void);
void TimeOutError(void);
void ErrorBlinken(void);
void TimeOver(void);


//bool pressed = false;
bool volatile Sw1Pressed;
bool volatile Sw2Pressed;

//***** VARIABLEN ******

enum State {ST_AUS=0, ST_EIN, ST_TimeOut, ST_TempOut, ST_Error};
//State state;
State volatile state;
Timer getTime; //Timer-Schnittstelle dient zum Erstellen, Starten, Stoppen und Lesen eines Timers 
Ticker TickFlip;//für blinken der LED     //wiederkehrenden Interrupt 
Timeout resetTime;//Die Timeout-Schnittstelle wird verwendet, um einen Interrupt 
                    //einzurichten, um eine Funktion nach einer bestimmten Verzögerung aufzurufen.

volatile int counter; // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird



int main()
{
    
    Sw1.rise(&Sw1Rise);      //.fall(&fall)
    Sw2.rise(&Sw2Rise);//warten auf drücken
    state = ST_AUS;
    Sw1Pressed = 0;
    Sw2Pressed = 0;
    Led1 = 0;
    Led2 = 0;
    Led3 = 0;
    Led4 = 0;
    counter=0;

    while(1)
    {
        
        StateMachine();
    }
}

void TimeOver(void)
{
        lcd.cls();      // löscht lcd (clear screen)
        lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
        lcd.printf("Die Zeit ist abgelaufen");
        printf("Die Zeit ist abgelaufen \n");
        while(1)
    {}
}

void ErrorBlinken(void) ///blineken bei allen fehlern
{
    Led4 = !Led4;
    }

void TimeOutError (void) {///unerwartter fehler
        state = ST_Error;
        TickFlip.attach(&ErrorBlinken, 0.3);
        lcd.cls();      // löscht lcd (clear screen)
        lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
        lcd.printf("State: ERROR TimeOut");
        printf("State: ERROR TimeOut \n");
        
        printf("State: %i \n",state);
        lcd.cls();              // löscht lcd (clear screen)
        lcd.locate(0,0);        // x-position, y-position (x: 0-128; y: 0-32)
        lcd.printf("State: %i", state);   //Ausgabe am Display
    }

void TempOut(void) {//temp ausgabe
        lcd.cls();      // löscht lcd (clear screen)
        lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
        lcd.printf("Temp Out");
        printf ("Temp Out \n");
        int counterTempOut = 0;
        while(1) {
            lcd.cls();      // löscht lcd (clear screen)
            lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
            lcd.printf("Temp Out");
            printf ("Temp Out %f \n", temp.read());
            counterTempOut++;
            wait(1);

            if(CheckSw2() == true) {
                state = ST_EIN;
                return;
            }
        }
    }

void TimeOut(void) {
        lcd.cls();      // löscht lcd (clear screen)
        lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
        lcd.printf("Time Out");
        printf ("TimeOut \n");
        int counter2 = 0;
        while(1) {
            lcd.cls();      // löscht lcd (clear screen)
            lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
            lcd.printf("TimeOut %i", counter2);
            printf ("TimeOut %i \n", counter2);
            counter2++;
            wait(1);
            if(CheckSw2() == true) {
                state = ST_TempOut;
                return;
            }
        }
    }

void Sw2Rise(void) {
        lcd.cls();      // löscht lcd (clear screen)
        lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
        lcd.printf("Sw2Rise");
        printf ("Sw2Rise \n");
        if(state == ST_EIN || state == ST_TimeOut || state == ST_TempOut)      
        Sw2Pressed = true;
        // je weleer status schalte weiter
        wait(0.2);
    }

bool CheckSw2(void) {//Werte true oder false 
        if(Sw2Pressed == true) {
            lcd.cls();      // löscht lcd (clear screen)
            lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
            lcd.printf("CheckSw2");
            printf ("CheckSw2 \n");
            Sw2Pressed = false;
            return true;
        }

        return false;
    }
 
void Time(void) {
        lcd.cls();      // löscht lcd (clear screen)
        lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
        lcd.printf("Time");
        printf ("Time \n");
        if(getTime.read() == 0) 
        {
            getTime.start(); //Timer Starten
        } 
        else {
            lcd.cls();      // löscht lcd (clear screen)
            lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
            lcd.printf("Sekunden: %f", getTime.read());
            printf("Sekunden: %f \n", getTime.read());
            getTime.reset();//Timer löschen
        }
    }      

bool CheckSw1(void) {  ////Werte true oder false 
        if(Sw1Pressed == true) {
            lcd.cls();      // löscht lcd (clear screen)
            lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
            lcd.printf("CheckSw1");
            printf ("CheckSw1 \n");
            Time();  //TIME UNTERPROGRAM
            Sw1Pressed = false;
            return true;
        }

        return false;
    }
    
void Sw1Rise(void) {
        lcd.cls();      // löscht lcd (clear screen)
        lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
        lcd.printf("Sw1Rise");
        printf ("Sw1Rise \n");
        if(state == ST_EIN || state == ST_AUS) {
            // wenn Taste getrückt wird wechsel je welcher status
            Sw1Pressed = true;// Umschalten auf WAHR, es wurde gedrückt
            wait_ms(200);
        }// Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt...
    } 
 
void Ein (void)
{
    //Status auf LCD und Serial
    lcd.cls();      // löscht lcd (clear screen)
    lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
    lcd.printf("State: 2 (Ein)");
    printf("State: 2 (Ein)");

//  entry

    // aufruf um die Led blinken zu lassen
    TickFlip.attach(&Flip, 0.5);// the address of the function to be attached (Flip) and the interval (2 seconds)
    resetTime.attach(&TimeOutError, 10);//time out starten
    Led1 = true; //led ein

    while(1) {

        if(state == ST_Error) {
            lcd.cls();      // löscht lcd (clear screen)
            lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
            lcd.printf("State: 2 (Ein)verlassen");
            printf("State: 2 (Ein) verlassen");
            Led1 = false;
//          exit
            return;
        }

        
        if(CheckSw2() == true) {
            state = ST_TimeOut;  // state timeOut
            resetTime.detach(); // timeout rücksetzen
//          exit
            return;
        }
        if(CheckSw1() == true) {
            state = ST_AUS;// state aus
            Led1 = false;
            resetTime.detach();// timeout rücksetzen
//          exit
            return;
        }
    }
}

void Flip (void)  //MIT TICKER 2X blinken
{
    lcd.cls();      // löscht lcd (clear screen)
    lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
    lcd.printf("Flip");
    printf ("Flip \n");
    
    Led4 = !Led4;// umschalten der LED
    
    if (counter == 3) {
        TickFlip.detach();//ticker stopp
        counter = 0;
    } 
    else 
        counter++;// Variable die hochgezählt wird um die LED 2 mal blinken zu lassen
    }

void Aus (void)//10s timerout starten
{
    resetTime.attach(&TimeOutError, 10);
    lcd.cls();              // löscht lcd (clear screen)
    lcd.locate(0,0);        // x-position, y-position (x: 0-128; y: 0-32)
    lcd.printf("State: 1 (Aus)");   //Ausgabe am Display
    printf("State: 1 (Aus)\n");       // Ausgabe auf der seriellen Console

    while(true) {
        if(state == ST_Error) {
            printf("ERROR State AUS verlassen /n");
            lcd.cls();              // löscht lcd (clear screen)
            lcd.locate(0,0);        // x-position, y-position (x: 0-128; y: 0-32)
            lcd.printf("ERROR State AUS verlassen");   //Ausgabe am Display
            return;
        }

        if(CheckSw1() == true) {  //wenn sw1 gedrückt
            state = ST_EIN;
            resetTime.detach(); // timerout wieder stoppen
            return;
        }

    }
}               
void StateMachine()  //mit den ganzen möglichen Statuse
{
    switch (state) 
    {
        case ST_AUS:          Aus()      ;break;
        case ST_EIN:          Ein()      ;break;
        case ST_TimeOut:      TimeOut()     ;break;
        case ST_TempOut:      TempOut()     ;break;
        case ST_Error:        TimeOver()    ;break;
        default: printf("ERROR")            ; 
                 lcd.cls()                  ;               // löscht lcd (clear screen)
                 lcd.locate(0,0)            ;               // x-position, y-position (x: 0-128; y: 0-32)
                 lcd.printf("ERROR")        ;break;         //Ausgabe am Display                     
    }
}



Committer:
mexx
Date:
Tue Nov 27 17:45:43 2018 +0000
Revision:
3:972b50928bd6
Parent:
2:245d5008b630
Child:
4:2a67507b5ee1
27.11.2018

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mexx 0:d68d7d2fd930 1 #include "mbed.h"
mexx 0:d68d7d2fd930 2 #include "C12832.h"
mexx 3:972b50928bd6 3 #include "LM75B.h"
mexx 0:d68d7d2fd930 4
mexx 3:972b50928bd6 5 // LCD
mexx 3:972b50928bd6 6 C12832 lcd(p5, p7, p6, p8, p11); // Definition der Pins vom LCD
mexx 3:972b50928bd6 7 // Temperatur
mexx 3:972b50928bd6 8 LM75B temp (p27, p28);
mexx 3:972b50928bd6 9 // Led
mexx 3:972b50928bd6 10 DigitalOut Led1(LED1); // 1. LED
mexx 3:972b50928bd6 11 DigitalOut Led2(LED2); // 2. LED
mexx 3:972b50928bd6 12 DigitalOut Led3(LED3); // 3. LED
mexx 3:972b50928bd6 13 DigitalOut Led4(LED4); // 4. LED
mexx 3:972b50928bd6 14 // Joystick
mexx 3:972b50928bd6 15 InterruptIn Sw4(p13); // LEFT
mexx 3:972b50928bd6 16 InterruptIn Sw1(p14); // CENTER
mexx 3:972b50928bd6 17 InterruptIn Sw2(p15); // UP
mexx 3:972b50928bd6 18 InterruptIn Sw3(p12); // DOWN
mexx 3:972b50928bd6 19 InterruptIn Sw5(p16); // RIGHT
mexx 0:d68d7d2fd930 20
mexx 1:765c9174d9a6 21
mexx 3:972b50928bd6 22 // Prototyping
mexx 3:972b50928bd6 23 void StateMachine();
mexx 3:972b50928bd6 24 //void ST_Error (void);
mexx 1:765c9174d9a6 25 void ST_Ein (void);
mexx 1:765c9174d9a6 26 void ST_Aus (void);
mexx 3:972b50928bd6 27 //void rise(void);
mexx 3:972b50928bd6 28 void Sw1Rise(void);
mexx 3:972b50928bd6 29 void Sw2Rise(void);
mexx 1:765c9174d9a6 30 //bool CheckFlag() ;
mexx 1:765c9174d9a6 31 bool CheckSw1(void);
mexx 1:765c9174d9a6 32 bool CheckSw2(void);
mexx 3:972b50928bd6 33 void Time (void);
mexx 3:972b50928bd6 34 void TimeOut(void);
mexx 3:972b50928bd6 35 void Flip (void);
mexx 3:972b50928bd6 36 void TempOut (void);
mexx 3:972b50928bd6 37 void TimeOutError(void);
mexx 3:972b50928bd6 38 void ErrorBlinken(void);
mexx 3:972b50928bd6 39 void TimeOver(void);
mexx 3:972b50928bd6 40
mexx 1:765c9174d9a6 41
mexx 1:765c9174d9a6 42 //bool pressed = false;
mexx 3:972b50928bd6 43 bool volatile Sw1Pressed;
mexx 3:972b50928bd6 44 bool volatile Sw2Pressed;
mexx 1:765c9174d9a6 45
mexx 0:d68d7d2fd930 46 //***** VARIABLEN ******
mexx 0:d68d7d2fd930 47
mexx 3:972b50928bd6 48 enum State {ST_AUS=0, ST_EIN, ST_TimeOut, ST_TempOut, ST_Error};
mexx 1:765c9174d9a6 49 //State state;
mexx 1:765c9174d9a6 50 State volatile state;
mexx 3:972b50928bd6 51 Timer getTime;
mexx 3:972b50928bd6 52 Ticker TickFlip;//für blinken der LED
mexx 3:972b50928bd6 53 Timeout resetTime;
mexx 3:972b50928bd6 54 volatile int counter; // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird
mexx 0:d68d7d2fd930 55
mexx 0:d68d7d2fd930 56
mexx 1:765c9174d9a6 57
mexx 1:765c9174d9a6 58 int main()
mexx 1:765c9174d9a6 59 {
mexx 3:972b50928bd6 60
mexx 3:972b50928bd6 61 Sw1.rise(&Sw1Rise); //.fall(&fall)
mexx 3:972b50928bd6 62 Sw2.rise(&Sw2Rise);//warten auf drücken
mexx 1:765c9174d9a6 63 state = ST_AUS;
mexx 3:972b50928bd6 64 Sw1Pressed = 0;
mexx 3:972b50928bd6 65 Sw2Pressed = 0;
mexx 3:972b50928bd6 66 Led1 = 0;
mexx 3:972b50928bd6 67 Led2 = 0;
mexx 3:972b50928bd6 68 Led3 = 0;
mexx 3:972b50928bd6 69 Led4 = 0;
mexx 3:972b50928bd6 70 counter=0;
mexx 0:d68d7d2fd930 71
mexx 3:972b50928bd6 72 while(1)
mexx 1:765c9174d9a6 73 {
mexx 3:972b50928bd6 74
mexx 3:972b50928bd6 75 StateMachine();
mexx 1:765c9174d9a6 76 }
mexx 0:d68d7d2fd930 77 }
mexx 0:d68d7d2fd930 78
mexx 3:972b50928bd6 79 void TimeOver(void)
mexx 0:d68d7d2fd930 80 {
mexx 3:972b50928bd6 81 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 82 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 83 lcd.printf("Die Zeit ist abgelaufen");
mexx 3:972b50928bd6 84 printf("Die Zeit ist abgelaufen \n");
mexx 3:972b50928bd6 85 while(1)
mexx 3:972b50928bd6 86 {}
mexx 0:d68d7d2fd930 87 }
mexx 0:d68d7d2fd930 88
mexx 3:972b50928bd6 89 void ErrorBlinken(void)
mexx 3:972b50928bd6 90 {
mexx 3:972b50928bd6 91 Led4 = !Led4;
mexx 3:972b50928bd6 92 }
mexx 2:245d5008b630 93
mexx 3:972b50928bd6 94 void TimeOutError (void) {
mexx 3:972b50928bd6 95 state = ST_Error;
mexx 3:972b50928bd6 96 TickFlip.attach(&ErrorBlinken, 0.3);
mexx 3:972b50928bd6 97 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 98 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 99 lcd.printf("State: ERROR TimeOut");
mexx 3:972b50928bd6 100 printf("State: ERROR TimeOut \n");
mexx 3:972b50928bd6 101
mexx 3:972b50928bd6 102 printf("State: %i \n",state);
mexx 3:972b50928bd6 103 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 104 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 105 lcd.printf("State: %i", state); //Ausgabe am Display
mexx 3:972b50928bd6 106 }
mexx 3:972b50928bd6 107
mexx 3:972b50928bd6 108 void TempOut(void) {
mexx 3:972b50928bd6 109 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 110 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 111 lcd.printf("Temp Out");
mexx 3:972b50928bd6 112 printf ("Temp Out \n");
mexx 3:972b50928bd6 113 int counterTempOut = 0;
mexx 3:972b50928bd6 114 while(1) {
mexx 3:972b50928bd6 115 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 116 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 117 lcd.printf("Temp Out");
mexx 3:972b50928bd6 118 printf ("Temp Out %f \n", temp.read());
mexx 3:972b50928bd6 119 counterTempOut++;
mexx 3:972b50928bd6 120 wait(1);
mexx 3:972b50928bd6 121
mexx 3:972b50928bd6 122 if(CheckSw2() == true) {
mexx 3:972b50928bd6 123 state = ST_EIN;
mexx 3:972b50928bd6 124 return;
mexx 3:972b50928bd6 125 }
mexx 3:972b50928bd6 126 }
mexx 3:972b50928bd6 127 }
mexx 3:972b50928bd6 128
mexx 3:972b50928bd6 129 void TimeOut(void) {
mexx 3:972b50928bd6 130 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 131 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 132 lcd.printf("Time Out");
mexx 3:972b50928bd6 133 printf ("TimeOut \n");
mexx 3:972b50928bd6 134 int counter2 = 0;
mexx 3:972b50928bd6 135 while(1) {
mexx 3:972b50928bd6 136 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 137 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 138 lcd.printf("TimeOut %i", counter2);
mexx 3:972b50928bd6 139 printf ("TimeOut %i \n", counter2);
mexx 3:972b50928bd6 140 counter2++;
mexx 3:972b50928bd6 141 wait(1);
mexx 3:972b50928bd6 142 if(CheckSw2() == true) {
mexx 3:972b50928bd6 143 state = ST_TempOut;
mexx 3:972b50928bd6 144 return;
mexx 3:972b50928bd6 145 }
mexx 3:972b50928bd6 146 }
mexx 3:972b50928bd6 147 }
mexx 2:245d5008b630 148
mexx 3:972b50928bd6 149 void Sw2Rise(void) {
mexx 3:972b50928bd6 150 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 151 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 152 lcd.printf("Sw2Rise");
mexx 3:972b50928bd6 153 printf ("Sw2Rise \n");
mexx 3:972b50928bd6 154 if(state == ST_EIN || state == ST_TimeOut || state == ST_TempOut)
mexx 3:972b50928bd6 155 Sw2Pressed = true;
mexx 3:972b50928bd6 156 wait(0.2);
mexx 3:972b50928bd6 157 }
mexx 3:972b50928bd6 158
mexx 3:972b50928bd6 159 bool CheckSw2(void) {
mexx 3:972b50928bd6 160 if(Sw2Pressed == true) {
mexx 3:972b50928bd6 161 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 162 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 163 lcd.printf("CheckSw2");
mexx 3:972b50928bd6 164 printf ("CheckSw2 \n");
mexx 3:972b50928bd6 165 Sw2Pressed = false;
mexx 3:972b50928bd6 166 return true;
mexx 3:972b50928bd6 167 }
mexx 3:972b50928bd6 168
mexx 3:972b50928bd6 169 return false;
mexx 3:972b50928bd6 170 }
mexx 3:972b50928bd6 171
mexx 3:972b50928bd6 172 void Time(void) {
mexx 3:972b50928bd6 173 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 174 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 175 lcd.printf("Time");
mexx 3:972b50928bd6 176 printf ("Time \n");
mexx 3:972b50928bd6 177 if(getTime.read() == 0)
mexx 3:972b50928bd6 178 {
mexx 3:972b50928bd6 179 getTime.start(); //Timer Starten
mexx 3:972b50928bd6 180 }
mexx 3:972b50928bd6 181 else {
mexx 3:972b50928bd6 182 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 183 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 184 lcd.printf("Sekunden: %f", getTime.read());
mexx 3:972b50928bd6 185 printf("Sekunden: %f \n", getTime.read());
mexx 3:972b50928bd6 186 getTime.reset();
mexx 3:972b50928bd6 187 }
mexx 3:972b50928bd6 188 }
mexx 3:972b50928bd6 189
mexx 3:972b50928bd6 190 bool CheckSw1(void) {
mexx 3:972b50928bd6 191 if(Sw1Pressed == true) {
mexx 3:972b50928bd6 192 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 193 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 194 lcd.printf("CheckSw1");
mexx 3:972b50928bd6 195 printf ("CheckSw1 \n");
mexx 3:972b50928bd6 196 Time(); //TIME UNTERPROGRAM
mexx 3:972b50928bd6 197 Sw1Pressed = false;
mexx 3:972b50928bd6 198 return true;
mexx 3:972b50928bd6 199 }
mexx 3:972b50928bd6 200
mexx 3:972b50928bd6 201 return false;
mexx 3:972b50928bd6 202 }
mexx 3:972b50928bd6 203
mexx 3:972b50928bd6 204 void Sw1Rise(void) {
mexx 3:972b50928bd6 205 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 206 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 207 lcd.printf("Sw1Rise");
mexx 3:972b50928bd6 208 printf ("Sw1Rise \n");
mexx 3:972b50928bd6 209 if(state == ST_EIN || state == ST_AUS) {
mexx 3:972b50928bd6 210 Sw1Pressed = true;// Umschalten auf WAHR, es wurde gedrückt
mexx 3:972b50928bd6 211 wait_ms(200);
mexx 3:972b50928bd6 212 }// Entprellung der Taste, bei mir 100ms da der Taster furchtbar prellt...
mexx 3:972b50928bd6 213 }
mexx 3:972b50928bd6 214
mexx 3:972b50928bd6 215 void Ein (void)
mexx 0:d68d7d2fd930 216 {
mexx 2:245d5008b630 217 //Status auf LCD und Serial
mexx 0:d68d7d2fd930 218 lcd.cls(); // löscht lcd (clear screen)
mexx 0:d68d7d2fd930 219 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 0:d68d7d2fd930 220 lcd.printf("State: 2 (Ein)");
mexx 2:245d5008b630 221 printf("State: 2 (Ein)");
mexx 3:972b50928bd6 222
mexx 3:972b50928bd6 223 // entry
mexx 3:972b50928bd6 224
mexx 3:972b50928bd6 225 // aufruf um die Led blinken zu lassen
mexx 3:972b50928bd6 226 TickFlip.attach(&Flip, 0.5);// the address of the function to be attached (Flip) and the interval (2 seconds)
mexx 3:972b50928bd6 227 resetTime.attach(&TimeOutError, 10);
mexx 3:972b50928bd6 228 Led1 = true;
mexx 3:972b50928bd6 229
mexx 1:765c9174d9a6 230 while(1) {
mexx 0:d68d7d2fd930 231
mexx 3:972b50928bd6 232 if(state == ST_Error) {
mexx 3:972b50928bd6 233 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 234 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 235 lcd.printf("State: 2 (Ein)verlassen");
mexx 3:972b50928bd6 236 printf("State: 2 (Ein) verlassen");
mexx 3:972b50928bd6 237 Led1 = false;
mexx 3:972b50928bd6 238 // exit
mexx 3:972b50928bd6 239 return;
mexx 1:765c9174d9a6 240 }
mexx 3:972b50928bd6 241
mexx 2:245d5008b630 242
mexx 3:972b50928bd6 243 if(CheckSw2() == true) {
mexx 3:972b50928bd6 244 state = ST_TimeOut;
mexx 3:972b50928bd6 245 resetTime.detach();
mexx 3:972b50928bd6 246 // exit
mexx 3:972b50928bd6 247 return;
mexx 3:972b50928bd6 248 }
mexx 3:972b50928bd6 249 if(CheckSw1() == true) {
mexx 3:972b50928bd6 250 state = ST_AUS;
mexx 3:972b50928bd6 251 Led1 = false;
mexx 3:972b50928bd6 252 resetTime.detach();
mexx 3:972b50928bd6 253 // exit
mexx 3:972b50928bd6 254 return;
mexx 3:972b50928bd6 255 }
mexx 0:d68d7d2fd930 256 }
mexx 0:d68d7d2fd930 257 }
mexx 0:d68d7d2fd930 258
mexx 3:972b50928bd6 259 void Flip (void)
mexx 3:972b50928bd6 260 {
mexx 3:972b50928bd6 261 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 262 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 263 lcd.printf("Flip");
mexx 3:972b50928bd6 264 printf ("Flip \n");
mexx 3:972b50928bd6 265
mexx 3:972b50928bd6 266 Led4 = !Led4;// umschalten der LED
mexx 3:972b50928bd6 267
mexx 3:972b50928bd6 268 if (counter == 3) {
mexx 3:972b50928bd6 269 TickFlip.detach();
mexx 3:972b50928bd6 270 counter = 0;
mexx 3:972b50928bd6 271 }
mexx 3:972b50928bd6 272 else
mexx 3:972b50928bd6 273 counter++;// Variable die hochgezählt wird um die LED 2 mal blinken zu lassen
mexx 3:972b50928bd6 274 }
mexx 0:d68d7d2fd930 275
mexx 3:972b50928bd6 276 void Aus (void)
mexx 3:972b50928bd6 277 {
mexx 3:972b50928bd6 278 resetTime.attach(&TimeOutError, 10);
mexx 3:972b50928bd6 279 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 280 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 281 lcd.printf("State: 1 (Aus)"); //Ausgabe am Display
mexx 3:972b50928bd6 282 printf("State: 1 (Aus)\n"); // Ausgabe auf der seriellen Console
mexx 1:765c9174d9a6 283
mexx 3:972b50928bd6 284 while(true) {
mexx 3:972b50928bd6 285 if(state == ST_Error) {
mexx 3:972b50928bd6 286 printf("ERROR State AUS verlassen /n");
mexx 3:972b50928bd6 287 lcd.cls(); // löscht lcd (clear screen)
mexx 3:972b50928bd6 288 lcd.locate(0,0); // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 289 lcd.printf("ERROR State AUS verlassen"); //Ausgabe am Display
mexx 3:972b50928bd6 290 return;
mexx 3:972b50928bd6 291 }
mexx 3:972b50928bd6 292
mexx 3:972b50928bd6 293 if(CheckSw1() == true) {
mexx 3:972b50928bd6 294 state = ST_EIN;
mexx 3:972b50928bd6 295 resetTime.detach();
mexx 3:972b50928bd6 296 return;
mexx 3:972b50928bd6 297 }
mexx 3:972b50928bd6 298
mexx 3:972b50928bd6 299 }
mexx 3:972b50928bd6 300 }
mexx 3:972b50928bd6 301 void StateMachine()
mexx 0:d68d7d2fd930 302 {
mexx 3:972b50928bd6 303 switch (state)
mexx 3:972b50928bd6 304 {
mexx 3:972b50928bd6 305 case ST_AUS: Aus() ;break;
mexx 3:972b50928bd6 306 case ST_EIN: Ein() ;break;
mexx 3:972b50928bd6 307 case ST_TimeOut: TimeOut() ;break;
mexx 3:972b50928bd6 308 case ST_TempOut: TempOut() ;break;
mexx 3:972b50928bd6 309 case ST_Error: TimeOver() ;break;
mexx 3:972b50928bd6 310 default: printf("ERROR") ;
mexx 3:972b50928bd6 311 lcd.cls() ; // löscht lcd (clear screen)
mexx 3:972b50928bd6 312 lcd.locate(0,0) ; // x-position, y-position (x: 0-128; y: 0-32)
mexx 3:972b50928bd6 313 lcd.printf("ERROR") ;break; //Ausgabe am Display
mexx 3:972b50928bd6 314 }
mexx 1:765c9174d9a6 315 }
mexx 1:765c9174d9a6 316
mexx 1:765c9174d9a6 317
mexx 1:765c9174d9a6 318
mexx 1:765c9174d9a6 319
mexx 1:765c9174d9a6 320
mexx 1:765c9174d9a6 321
mexx 3:972b50928bd6 322
mexx 3:972b50928bd6 323
mexx 3:972b50928bd6 324
mexx 3:972b50928bd6 325
mexx 3:972b50928bd6 326
mexx 3:972b50928bd6 327
mexx 3:972b50928bd6 328
mexx 3:972b50928bd6 329
mexx 3:972b50928bd6 330
mexx 3:972b50928bd6 331
mexx 3:972b50928bd6 332
mexx 3:972b50928bd6 333
mexx 3:972b50928bd6 334
mexx 3:972b50928bd6 335
mexx 3:972b50928bd6 336
mexx 3:972b50928bd6 337
mexx 3:972b50928bd6 338
mexx 3:972b50928bd6 339
mexx 3:972b50928bd6 340
mexx 3:972b50928bd6 341
mexx 3:972b50928bd6 342
mexx 3:972b50928bd6 343