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.
Diff: main.cpp
- 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); }