Sample NordicSemicondictor nRF52 beacon discovery for CO657 (University of Kent, UK); builds on mbed-os, derived from LEDBeacon sample code (on github). Writes out beacons recently seen to serial port and/or LCD (#ifdef job) on the MBED application shield.

Dependencies:   C12832

Revision:
1:7986f9873e20
Parent:
0:f4e27396137e
Child:
2:a19832685c89
--- a/main.cpp	Thu Oct 27 16:53:49 2016 +0000
+++ b/main.cpp	Fri Oct 28 08:18:04 2016 +0000
@@ -16,10 +16,18 @@
 #undef SERIAL_OUTPUT
 #define LCD_OUTPUT
 
-static DigitalOut led1 (LED1);
-static DigitalOut led2 (LED2);
-static DigitalOut led3 (LED3);
-static DigitalOut led4 (LED4);
+/* FRMB note: with the MBED application shield connected, the various LEDs/buttons on the nRF52 become pretty helpless */
+
+// static DigitalOut led1 (LED1);
+// static DigitalOut led2 (LED2);
+// static DigitalOut led3 (LED3);
+// static DigitalOut led4 (LED4);
+
+static DigitalOut shld_led_r (D5);
+static DigitalOut shld_led_g (D9);
+static DigitalOut shld_led_b (D8);
+
+static volatile int drop_flag = 0;
 
 #ifdef SERIAL_OUTPUT
 static Serial host (USBTX, USBRX);
@@ -76,6 +84,18 @@
     return;
 }
 
+void trigger_red_led (void)
+{
+    shld_led_r = 0;
+    drop_flag = 3;
+}
+
+void trigger_green_led (void)
+{
+    shld_led_g = 0;
+    drop_flag = 3;
+}
+
 #ifdef LCD_OUTPUT
 void draw_blog (void)
 {
@@ -102,6 +122,8 @@
     uint16_t a_hi;
     int newb = 0;
 
+    trigger_green_led ();
+    
     a_hi = ((uint16_t)params->peerAddr[5] << 8) | (uint16_t)params->peerAddr[4];
     a_lo = ((uint32_t)params->peerAddr[3] << 24) | ((uint32_t)params->peerAddr[2] << 16) | ((uint32_t)params->peerAddr[1] << 8) | (uint32_t)params->peerAddr[0];
     
@@ -232,21 +254,14 @@
 int main()
 {
     BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
-    uint8_t lw = 0x01;
     int acnt = 0;
 
 #ifdef SERIAL_OUTPUT
     host.baud (38400);
 #endif
 
-    led1 = 1;
-    led2 = 0;
-    led3 = 0;
-    led4 = 0;
-
     for (int i=0; i<MAX_BEACONS; i++) {
         memset (&blog[i], 0x00, sizeof (beacon_log_t));
-        
         blog[i].age = 0xff;
     }
 
@@ -262,17 +277,14 @@
     Thread::wait (500);
 #endif
 
+    /* light blue LED to start */
+    shld_led_r = 1;
+    shld_led_g = 1;
+    shld_led_b = 0;
+    drop_flag = 10;                     /* ~1s */
+
     // GROT
     for (;;) {
-        led1 = (lw & 0x01) ? 0 : 1;
-        led2 = (lw & 0x02) ? 0 : 1;
-        led4 = (lw & 0x04) ? 0 : 1;
-        led3 = (lw & 0x08) ? 0 : 1;
-        
-        lw <<= 1;
-        if (lw == 0x10) {
-            lw = 0x01;
-        }
         acnt++;
         if (acnt == 10) {
             acnt = 0;
@@ -283,6 +295,13 @@
         }
         
         ble.processEvents ();
+        if (drop_flag) {
+            if (!--drop_flag) {
+                shld_led_r = 1;         /* clear LEDs */
+                shld_led_g = 1;
+                shld_led_b = 1;
+            }
+        }
         
         Thread::wait (100);
     }