TOF based Presence Detector

Dependencies:   BLE_API X_NUCLEO_6180XA1 X_NUCLEO_IDB0XA1 mbed

Fork of BLE_HeartRate_IDB0XA1 by ST

Committer:
hux
Date:
Mon Aug 20 16:43:10 2018 +0000
Revision:
29:eceecbe28088
made in Shanghai

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hux 29:eceecbe28088 1 // blink.cpp - send a morse pattern to LED1
hux 29:eceecbe28088 2 //
hux 29:eceecbe28088 3 // Function morse() is one way for running LED1 with a blinking sequence using
hux 29:eceecbe28088 4 // a busy wait, until the sequence is completed.
hux 29:eceecbe28088 5 //
hux 29:eceecbe28088 6 // morse(o," x xxx x "); send one time morse sequence, interval = 0.2
hux 29:eceecbe28088 7 // morse(o," x xxx x ",0.5); send one time morse sequence, interval = 0.5
hux 29:eceecbe28088 8 //
hux 29:eceecbe28088 9 // Function morse(o) got the additional feature to stop an ongoing timer based
hux 29:eceecbe28088 10 // blinking sequence.
hux 29:eceecbe28088 11 //
hux 29:eceecbe28088 12 // The alternative is to setup an ever repeating blink sequence via LED1 using
hux 29:eceecbe28088 13 // function blink(), which is non waiting.
hux 29:eceecbe28088 14 //
hux 29:eceecbe28088 15 // blink(o," x xxx x "); repeating blink sequence, interval = 0.2
hux 29:eceecbe28088 16 // blink(o," x xxx x ",0.5); repeating blink sequence, interval = 0.5
hux 29:eceecbe28088 17 // blink(o); stops blinking sequence
hux 29:eceecbe28088 18 //
hux 29:eceecbe28088 19
hux 29:eceecbe28088 20 #include "bricks/target.h"
hux 29:eceecbe28088 21 #include "bricks/blink.h"
hux 29:eceecbe28088 22
hux 29:eceecbe28088 23 #ifndef LED_INVERTED
hux 29:eceecbe28088 24 # define LED_ON 1
hux 29:eceecbe28088 25 # define LED_OFF 0
hux 29:eceecbe28088 26 #else
hux 29:eceecbe28088 27 # define LED_ON 0
hux 29:eceecbe28088 28 # define LED_OFF 1
hux 29:eceecbe28088 29 #endif
hux 29:eceecbe28088 30
hux 29:eceecbe28088 31 static DigitalOut led(LED1); // LED1, being used for morse sequence
hux 29:eceecbe28088 32 static Ticker ticker; // triggers periodic callbacks
hux 29:eceecbe28088 33 static const char *pointer = 0; // 0 means morse activity disabled
hux 29:eceecbe28088 34 static const char *sequence = 0; // next morse sequence for repeats
hux 29:eceecbe28088 35
hux 29:eceecbe28088 36
hux 29:eceecbe28088 37 void morse(O&o,const char *pattern, double interval)
hux 29:eceecbe28088 38 {
hux 29:eceecbe28088 39 pointer = 0; // disable ticker based blinking
hux 29:eceecbe28088 40 sequence = 0; // set also empty sequence
hux 29:eceecbe28088 41
hux 29:eceecbe28088 42 for (; *pattern; pattern++)
hux 29:eceecbe28088 43 {
hux 29:eceecbe28088 44 led = (*pattern == ' ') ? LED_OFF : LED_ON;
hux 29:eceecbe28088 45 wait(interval); // busy waiting for interval time
hux 29:eceecbe28088 46 }
hux 29:eceecbe28088 47 }
hux 29:eceecbe28088 48
hux 29:eceecbe28088 49 // callback for LED1 ticker controlled blinking
hux 29:eceecbe28088 50
hux 29:eceecbe28088 51 static void cbBlinker(void) // blinker callback
hux 29:eceecbe28088 52 {
hux 29:eceecbe28088 53 if (pointer != 0)
hux 29:eceecbe28088 54 {
hux 29:eceecbe28088 55 if (*pointer == 0)
hux 29:eceecbe28088 56 {
hux 29:eceecbe28088 57 pointer = sequence; // reset pointer to followup sequence
hux 29:eceecbe28088 58 }
hux 29:eceecbe28088 59
hux 29:eceecbe28088 60 if (*pointer)
hux 29:eceecbe28088 61 {
hux 29:eceecbe28088 62 led = (*pointer++ == ' ') ? LED_OFF : LED_ON;
hux 29:eceecbe28088 63 }
hux 29:eceecbe28088 64 }
hux 29:eceecbe28088 65 }
hux 29:eceecbe28088 66
hux 29:eceecbe28088 67 void blink(O&o,const char *pattern, const char* next, double interval)
hux 29:eceecbe28088 68 {
hux 29:eceecbe28088 69 pointer = 0; // stop current activities
hux 29:eceecbe28088 70 led = LED_OFF; // reset led with LED_OFF
hux 29:eceecbe28088 71
hux 29:eceecbe28088 72 sequence = next; // init morse sequence
hux 29:eceecbe28088 73
hux 29:eceecbe28088 74 ticker.attach(cbBlinker,interval);// next LED state after every interval
hux 29:eceecbe28088 75 pointer = pattern; // enable callback activty
hux 29:eceecbe28088 76 }
hux 29:eceecbe28088 77
hux 29:eceecbe28088 78 void blink(O&o, const char *pattern, double interval)
hux 29:eceecbe28088 79 {
hux 29:eceecbe28088 80 blink(o,pattern,pattern,interval);
hux 29:eceecbe28088 81 }
hux 29:eceecbe28088 82
hux 29:eceecbe28088 83