Ondelay OneShot timer example

Dependencies:   mbed

Revision:
0:d31d989a13fc
Child:
1:2416bbc70934
Child:
2:2e40a6f0c892
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 21 05:48:43 2018 +0000
@@ -0,0 +1,71 @@
+// Nucleo OnDeley Oneshot
+#include "mbed.h"
+
+// IO instance
+//#define F746ZG
+#undef F746ZG
+#ifdef F746ZG    
+DigitalOut myled(PB_0);     // Green
+DigitalOut myled2(PB_7);    // Blue
+DigitalOut myled3(PB_14);   // Red
+DigitalIn mySw(PC_13);      // User button
+#define MYSWLOGIC 1
+#endif
+
+#define F411RE
+//#undef F411RE
+#ifdef F411RE    
+DigitalOut myled(D13);     // LED
+DigitalOut myled2(D12);    // 
+DigitalOut myled3(D11);   // 
+DigitalIn mySw(PC_13);      // User button
+#define MYSWLOGIC 0
+#endif
+
+
+// Timer instance
+Timeout delay1;
+Timeout oneShot1;
+
+// Timer flag
+bool swon = false;          // Switch status. Set true when press. Set false when Time up and release. 
+bool tmon = false;          // Timer status.  Set to the true when the OneShot timer starts. Set to the false when time up. 
+
+// Function prototype
+void upDelay1();
+void upOneShot1();
+
+// Functions
+// Up time from delay timer. 
+void upDelay1(){
+    myled2 = 1;                                 // LED on
+    oneShot1.attach_us(&upOneShot1, 50000);   // Set oneShot
+    tmon = true;                                // tmon flag set.
+}
+
+// Up time from oneShot timeer.
+void upOneShot1(){
+    myled2 = 0;                                 // LED off
+    delay1.detach();                            // Timeout::detach
+    oneShot1.detach();                          // Timeout::detach
+    tmon = false;                               // tmon flag reset.
+}
+
+int main() {
+    while(1) {
+        myled3 = !myled3;
+        if (mySw == MYSWLOGIC){                         // If sw on,
+            myled = 1;                          // Monitor LED ON
+            if(myled2 == 0 && swon == false){   // If timer is not started,
+                swon = true;                    //  flag on
+                delay1.attach_us(&upDelay1, 50000);    // Start delay timer.
+            }            
+        }else{                                  // If sw off,
+            myled = 0; // LED is OFF            //  Monitor LED off
+            if(tmon == false){                  //  If timer is completed,
+                swon = false;                   //      frag reset.
+                delay1.detach();                //      Cansel the on delay timer.
+            }
+         }
+    }
+}