M0 Board

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
FlorianMaier
Date:
Thu Jan 18 12:08:08 2018 +0000
Commit message:
Fahrradleuchte m0Board

Changed in this revision

BtnEventM0.h Show annotated file Show diff for this revision Revisions of this file
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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BtnEventM0.h	Thu Jan 18 12:08:08 2018 +0000
@@ -0,0 +1,98 @@
+
+
+class BtnEventM0
+{
+public:
+    int16_t pressed;
+
+    BtnEventM0(PinName pin) : _isr(pin) {
+        pressed=0;
+    }
+
+    // Ist eine steigende Flanke aufgetreten ?
+    int CheckFlag() {
+        if( pressed ) {
+            pressed=0;
+            return 1;
+        }
+        return 0;
+    }
+
+    // 1..Button is pressed  else 0
+    int CheckButton() {
+        return _isr.read();
+    }
+
+    void Init() {
+        _isr.rise(this, &BtnEventM0::RisingISR);
+    }
+
+    void RisingISR() {
+        if( _isr.read() )
+            pressed = 1;
+    }
+protected:
+    InterruptIn _isr;
+};
+
+/*
+class BtnEventM02 : public BtnEventM0
+{
+public:
+    BtnEventM02(PinName pin) : BtnEventM0(pin) {
+        _tm.stop();
+        _tm.reset();
+        _state=1;
+    }
+
+    void Init() {
+        _isr.rise(this, &BtnEventM02::RisingISR);
+    }
+
+    void RisingISR() {
+        if( !_isr.read() )
+            return;
+        pressed = 1;
+        _tm.start();
+        _state = 2;
+    }
+
+    void CheckButton() {
+        if( _state==1 )
+            return;
+        if( _state==2 ) {
+            if( !_isr.read() ) {
+                _state = 1;
+                return;
+            }
+            if( _tm.read_ms()>500 ) {
+                _tm.reset();
+                _state = 3;
+                pressed = 1;
+            }
+        } else if( _state==3 ) {
+            if( !_isr.read() ) {
+                _state = 1;
+                return;
+            }
+            if( _tm.read_ms()>100 ) {
+                _tm.reset();
+                _state = 3;
+                pressed = 1;
+            }
+        }
+    }
+private:
+    int16_t _state;
+    Timer _tm;
+};
+*/
+
+class AnalogInHL : public AnalogIn
+{
+public:
+    AnalogInHL(PinName pin) : AnalogIn(pin) { }
+    int Read() {
+        return read_u16()>>6;
+    }
+};
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jan 18 12:08:08 2018 +0000
@@ -0,0 +1,147 @@
+#include "mbed.h"
+#include "BtnEventM0.h"
+
+BusOut lb(P1_7,P1_6,P1_4,P1_3,P1_1,P1_0,LED4,LED3,LED2,LED1);
+
+BusOut stLED(P1_13,P1_12);
+
+BtnEventM0 sw4(P1_16), sw3(P0_23);
+
+class FahrradLeuchte
+{
+    public:
+        void Init()
+        {
+            state = 1; t1.start();   
+        }
+    public:
+        void State1Func();
+        void State2Func();
+        void State3Func();
+    public:  
+        void State1Action(); // Bit0 ( LED ) mit 10 Hz blinken
+        void State2Action(); // Bit2 ( LED ) mit 5 Hz blinken
+        void State3Action(); // Bit4 ( LED ) mit 2 Hz blinken
+    public:
+        // State sagt uns in welchem Zustand sich die FahrradLeuchte gerade befindet
+        int state;
+        Timer t1;
+};
+
+// Eine FahrradLeuchte anlegen
+FahrradLeuchte fl;
+
+int main(void)
+{
+    sw3.Init(); sw4.Init();
+    fl.Init();
+    lb = 0;
+    while(1)
+    {
+        if (fl.state == 1)
+            fl.State1Func();
+        if (fl.state == 2)
+            fl.State2Func();
+        if (fl.state == 3)
+            fl.State3Func();
+    }
+}
+
+void FahrradLeuchte::State1Func()
+{
+    // einmalige Aktion beim Eintritt in die Zustandsfunktion
+    stLED = 1;  // Anzeigen, dass im Zustand 1 sind
+    t1.reset();
+    while(1)
+    {
+        // Btn's abfragen und möglicherweise Zustand ändern
+        State1Action();
+        if (sw4.CheckFlag())
+        {
+            state = 2; return;
+        }
+        if (sw3.CheckFlag())
+        {
+            state = 3; return;
+        }
+    }
+}
+
+
+void FahrradLeuchte::State1Action()
+{
+   if (t1.read_ms() > 100)
+   {
+    t1.reset();
+    if (lb == 0)
+        lb = 1; // Mit Bit0 blinken
+    else
+        lb = 0;
+    }
+}
+
+void FahrradLeuchte::State2Func()
+{
+    
+    // einmalige Aktion beim Eintritt in die Zustandsfunktion
+    stLED = 2;  // Anzeigen, dass im Zustand 1 sind
+    t1.reset();
+    while(1)
+    {
+        // Btn's abfragen und möglicherweise Zustand ändern
+        State2Action();
+        if (sw4.CheckFlag())
+        {
+            state = 3; return;
+        }
+        if (sw3.CheckFlag())
+        {
+            state = 1; return;
+        }
+    }
+    
+}
+
+void FahrradLeuchte::State2Action()
+{
+   if (t1.read_ms() > 50)
+   {
+    t1.reset();
+    if (lb == 0)
+        lb = 2; // Mit Bit0 blinken
+    else
+        lb = 0;
+    }
+}
+
+void FahrradLeuchte::State3Func()
+{
+    // einmalige Aktion beim Eintritt in die Zustandsfunktion
+    stLED = 3;  // Anzeigen, dass im Zustand 1 sind
+    t1.reset();
+    while(1)
+    {
+        // Btn's abfragen und möglicherweise Zustand ändern
+        State3Action();
+        if (sw4.CheckFlag())
+        {
+            state = 1; return;
+        }
+        if (sw3.CheckFlag())
+        {
+            state = 2; return;
+        }
+    }
+}
+
+void FahrradLeuchte::State3Action()
+{
+   if (t1.read_ms() > 20)
+   {
+    t1.reset();
+    if (lb == 0)
+        lb = 4; // Mit Bit0 blinken
+    else
+        lb = 0;
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Jan 18 12:08:08 2018 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/25aea2a3f4e3
\ No newline at end of file