Mein 1. Versuch

Dependencies:   C12832 mbed

Revision:
0:6ed0ae055a52
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Nov 08 18:32:28 2018 +0000
@@ -0,0 +1,161 @@
+#include "mbed.h"
+#include "C12832.h"
+
+DigitalOut Led1(LED1, 0);   // 1. LED am MBED-Board
+DigitalOut Led2(LED2, 0);   // 2. LED am MBED-Board
+DigitalOut Led3(LED3, 0);   // 3. LED am MBED-Board
+DigitalOut Led4(LED4, 0);   // 4. LED am MBED-Board
+InterruptIn  SW1(p13);      // LEFT am MBED-Board
+InterruptIn  SW1(p14);      // CENTER am MBED-Board
+InterruptIn  SW2(p15);      // UP am MBED-Board
+InterruptIn  SW3(p12);      // DOWN am MBED-Board
+InterruptIn  SW4(p16);      // RIGHT am MBED-Board
+
+Ticker flipper;             // Ticker für blinken der LED
+volatile int blinkCount=0;  // Volatile, damit es nicht auf unterschiedlichen Cores ausgeführt wird
+
+
+//______________ LCD ____________________________\\
+
+C12832 lcd(p5, p7, p6, p8, p11);    // Definition der LCD-Pins
+
+//_____________ meine Variablen _________________\\
+
+enum State {ST_AUS=0, ST_EIN};
+State state;
+
+bool pressed = false;
+
+
+// ______________Led blinken lassen______________\\
+
+void flip()                 // 
+{
+    blinkCount++;           // Variable die hochgezählt wird um die LED 2 mal blinken zu lassen
+    Led4 = !Led4;           // umschalten der LED
+}
+
+//************* EREIGNISSE ****************
+ 
+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
+}
+
+//************* STATES ****************
+
+void ST_Aus (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: 1 (Aus)");   //Ausgabe am Display
+    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_EIN; // Wechsel auf Status EIN
+            
+//______________exit_______________________\\
+
+            return;
+            }
+        }
+}
+
+void ST_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)");
+    
+    
+    // aufruf um die Led blinken zu lassen
+    flipper.attach(&flip, 0.3); // the address of the function to be attached (flip) and the interval (2 seconds)
+    
+    while(true)
+    {
+        if ( blinkCount >= 4) break;
+        }
+        flipper.detach();
+        blinkCount=0;
+    
+    /*
+    // 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 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: ERROR!!!");
+    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);
+    state = ST_AUS;
+    while(true)
+    {
+        stateMachine(); 
+    }
+}
\ No newline at end of file