7ABELI

You are viewing an older revision! See the latest version

STM Schalter

Table of Contents

  1. STM SCHALTER

STM SCHALTER

zusammen mit Kundegraber Das Zustandsdiagramm (Statechart Diagram) sieht folgendermaßen aus:

/media/uploads/fpucher/stm0.jpg

STM SCHALTER

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

DigitalOut Led1(LED1);
DigitalOut Led2(LED2);
DigitalOut Led3(LED3);
DigitalOut Led4(LED4);
InterruptIn  SW1(p14);
InterruptIn  SW2(p15); 
InterruptIn  SW3(p12); 
InterruptIn  SW4(p16); 
C12832 lcd(p5, p7, p6, p8, p11);

enum State {ST_AUS=0, ST_EIN};
State state;

bool pressed = false;

 
void rise(void)
{  
    wait_ms(100);
    pressed = true;
}

bool CheckFlag() 
{
    if (pressed) {
        pressed=false;
        return true;
        }
    return false;
}


void ST_Aus (void)
{
    //Status auf LCD
    lcd.cls();      // clear screen
    lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
    lcd.printf("State: 1 (Aus)");
    // entry
    
    // do
    while(true) {
        Led1 = 0;
    
        if(CheckFlag()) {
            state = ST_EIN;
            
    // exit
            return;
            }
        }
}

void ST_Ein (void)
{
    //Status auf LCD
    lcd.cls();      // clear screen
    lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
    lcd.printf("State: 2 (Ein)");
    
    // entry
    Led4 = 1;
    wait_ms(200);
    Led4 = 0;
    wait_ms(200);
    Led4 = 1;
    wait_ms(200);
    Led4 = 0;
    wait_ms(200);
    // do
    while(true) {
        Led1 = 1;
    
        if(CheckFlag()) {
            state = ST_AUS;
            
    // exit
            return;
            }
        }
    
}

void ST_Error (void)
{
    //Status auf LCD
    lcd.cls();      // clear screen
    lcd.locate(0,0);   // x-position, y-position (x: 0-128; y: 0-32)
    lcd.printf("State: ERROR");
    return;
}

void stateMachine()
{
    switch (state)
    {
    case ST_AUS: ST_Aus();
        break;
    case ST_EIN: ST_Ein();
        break;
    default: ST_Error();  // sollte nicht auftreten :-)
        break;
    }
}


 
int main()
{
    SW1.rise(&rise);      //.fall(&fall); //rise beim drücken, fall beim loslasen
    state = ST_AUS;
    while(true){
        stateMachine(); 
        }
    
    
}


All wikipages