Ein kleines Programm zum verinnerlichen der Statemachine.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
domenicf
Date:
Thu Nov 15 17:06:08 2018 +0000
Commit message:
Tinf Beispiele

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r a2de8a5a01a0 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Nov 15 17:06:08 2018 +0000
@@ -0,0 +1,235 @@
+#include "mbed.h"
+
+
+LM75B tmp(p28, p27);
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+InterruptIn sw1(p14);
+InterruptIn sw2(p15);
+
+void flipper(void);
+void ON(void);
+void IDLE(void);
+void sw1Rise(void);
+void sw2Rise(void);
+void Time(void);
+void TimeOut(void);
+void Blink(void);
+void tempOut(void);
+void timeOutError(void);
+void errorBlink(void);
+void timeover(void);
+bool checker(void);
+bool checkerSW2(void);
+bool volatile sw2Pressed;
+bool volatile sw1Pressed;
+
+Timeout removeTime;
+Timer gettime;
+Ticker tickerflipper;
+int counter;
+
+enum Status{ST_IDLE=0, ST_ON, ST_TimeOut, ST_TempOut, ST_Error};
+Status volatile status;
+
+int main(void)
+{
+    sw1.rise(&sw1Rise);
+    sw2.rise(&sw2Rise);
+    status = ST_IDLE;
+    sw1Pressed = 0;
+    sw2Pressed = 0;
+    counter=0;
+    led1=0, led2=0, led3=0, led4=0;
+    
+    while(1)
+    {
+        switch(status)
+        {
+            case ST_IDLE:IDLE()         ; break;
+            case ST_ON:ON()             ; break;
+            case ST_TimeOut:TimeOut()   ; break;
+            case ST_TempOut:tempOut()   ; break;
+            case ST_Error:timeover()    ; break;
+        }
+    }
+}
+
+void timeover(void)
+{
+    printf("Ende gut, Alles gut\n");
+    while(1)
+    {}
+}
+
+void errorBlink(void)
+{
+ led4 = !led4;
+ 
+}
+void timeOutError(void)
+{
+    status = ST_Error;
+    printf("Error TimeOut\n");
+    printf("Status: %i\n", status);
+}
+
+void tempOut(void)
+{
+    int countertmp = 0;
+    
+    printf("void tempOut\n");
+    while(1)
+    {
+     printf("Temperatur: %f\n",tmp.read());
+     if(checkerSW2() == true)
+     {
+         status = ST_ON;
+         return;
+     }   
+     countertmp++;
+     wait(1);
+    }
+}
+
+void flipper(void)
+{
+    printf("void flipper\n");
+    led4 = !led4;
+    if(counter == 3)
+    {
+     tickerflipper.detach();   
+     counter=0;
+    }
+    else
+    counter++; 
+}
+
+void TimeOut(void)
+{
+    printf("void TimeOut\n");
+    int counterto = 0;
+    while(1)
+    {
+        printf("TimeOut: %i\n", counterto);
+        counterto++;
+        wait(1);
+        
+    if(checkerSW2() == true)
+    {
+        status = ST_TempOut;
+        return;
+    }
+    }
+}
+
+void Time(void)
+{
+    printf("void Time\n");
+    if (gettime.read() ==0)
+    {
+        gettime.start();
+    }
+    
+    else
+        printf("Secunden: %f\n", gettime.read());
+        gettime.reset();
+}
+
+bool checker(void)
+{
+    if(sw1Pressed == true)
+    {
+        printf("void checker\n");
+        Time();
+        sw1Pressed = false;
+        return true;
+    }
+    return false;
+}
+
+bool checkerSW2(void)
+{
+    if(sw2Pressed == true)
+    {
+        printf("void checkerSW2\n");
+        sw2Pressed = false;
+        return true;
+    }
+    return false;
+}
+    
+
+void sw1Rise(void)
+{   
+    printf("sw1Rise\n");
+    
+    if(status == ST_ON || status == ST_IDLE) sw1Pressed = 1;
+    wait_ms(200);
+}
+
+void sw2Rise(void)
+{
+    printf("void sw2Rise\n");
+    if(status == ST_ON || status == ST_TimeOut || status == ST_TempOut)  sw2Pressed = 1;
+    wait_ms(200);
+}
+
+void ON(void)
+{
+    printf("void ON\n");
+    tickerflipper.attach(&flipper, 0.5);
+    removeTime.attach(&timeOutError, 10);
+    led1 = true; 
+    
+    while(1)
+    {
+        if(status == ST_Error)
+        {
+            printf("IDLE verlassen\n");
+            tickerflipper.attach(&errorBlink, 0.3);
+            led1=false;
+        return;
+        }
+        if(checkerSW2() == true)
+        {
+            status = ST_TimeOut;
+            removeTime.detach();
+            return;
+        }
+        if (checker() == true)
+        {
+            status = ST_IDLE;
+            removeTime.detach();
+            led1=false;
+            return;
+        }
+    }
+}
+
+void IDLE(void)
+{
+    printf("void IDLE\n");
+    removeTime.attach(&timeOutError, 10);
+    while(1)
+    {
+        if(status == ST_Error)
+        {
+            printf("IDLE verlassen\n");
+            tickerflipper.attach(&errorBlink, 0.3);
+            led1=false;
+        return;
+        }
+        if (checker() == true)
+        {
+            status = ST_ON;
+            removeTime.detach();
+            return;
+        }
+
+    }
+}
diff -r 000000000000 -r a2de8a5a01a0 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Nov 15 17:06:08 2018 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/e95d10626187
\ No newline at end of file