TOF based Presence Detector

Dependencies:   BLE_API X_NUCLEO_6180XA1 X_NUCLEO_IDB0XA1 mbed

Fork of BLE_HeartRate_IDB0XA1 by ST

Revision:
28:a23b16555909
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bricks/blinker.cpp	Mon Aug 20 16:42:59 2018 +0000
@@ -0,0 +1,84 @@
+// blinker.cpp - send a morse pattern to LED1
+//
+// Function morse() is one way for running LED1 with a blinking sequence using
+// a busy wait, until the sequence is completed.
+//
+//    Blinker b;
+//    b.morse(" x xxx x    ");      send one time morse sequence, interval = 0.2
+//    b.morse(" x xxx x    ",0.5);  send one time morse sequence, interval = 0.5
+//
+// Function morse(o) got the additional feature to stop an ongoing timer based
+// blinking sequence.
+//    
+// The alternative is to setup an ever repeating blink sequence via LED1 using
+// function blink(), which is non waiting.
+//
+//    Blinker b;
+//    b.blink(" x xxx x    ");         repeating blink sequence, interval = 0.2
+//    b.blink(" x xxx x    ",0.5);     repeating blink sequence, interval = 0.5
+//    b.blink();                       stops blinking sequence
+//
+
+#include "bricks/target.h"
+#include "bricks/blinker.h"
+
+#ifndef LED_INVERTED
+#   define LED_ON  1
+#   define LED_OFF 0
+#else
+#   define LED_ON  0
+#   define LED_OFF 1
+#endif
+
+   static DigitalOut led(LED1);         // LED1, being used for morse sequence
+   static Ticker ticker;                // triggers periodic callbacks
+   static const char *pointer = 0;      // 0 means morse activity disabled
+   static const char *sequence = 0;     // next morse sequence for repeats
+
+   void Blinker::morse(const char *pattern, double interval)
+   {
+       pointer = 0;                     // disable ticker based blinking
+       sequence = 0;                    // set also empty sequence
+       
+       for (; *pattern; pattern++)
+       {
+          led = (*pattern == ' ') ? LED_OFF : LED_ON;
+          wait(interval);               // busy waiting for interval time
+       }
+   }
+          
+// callback for LED1 ticker controlled blinking   
+           
+   static void cbBlinker(void)         // blinker callback
+   {
+       if (pointer != 0)
+      {
+         if (*pointer == 0)
+         {
+            pointer = sequence;        // reset pointer to followup sequence
+         }
+        
+         if (*pointer)
+         {
+            led = (*pointer++ == ' ') ? LED_OFF : LED_ON;
+         }
+      }
+   }
+   
+   void Blinker::blink(const char *pattern, const char* next, double interval) 
+   {
+      pointer = 0;                      // stop current activities
+      led = LED_OFF;                    // reset led with LED_OFF
+      
+      sequence = next;                  // init morse sequence   
+         
+      ticker.attach(cbBlinker,interval);// next LED state after every interval
+      pointer = pattern;                // enable callback activty
+   }  
+
+   void Blinker::blink(const char *pattern, double interval)
+   {
+       blink(pattern,pattern,interval);
+   }
+   
+   
\ No newline at end of file