Simple BLE Radio tester and signal strength (RSSI) meter, using microbit radio lib.
Revision 0:28e881c1eb79, committed 2017-01-12
- Comitter:
- dl7avf
- Date:
- Thu Jan 12 11:26:14 2017 +0000
- Commit message:
- BLE radio tester and signal strength meter, initial.
Changed in this revision
diff -r 000000000000 -r 28e881c1eb79 MACROS.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MACROS.txt Thu Jan 12 11:26:14 2017 +0000 @@ -0,0 +1,1 @@ +MICROBIT_BLE_ENABLED=0
diff -r 000000000000 -r 28e881c1eb79 config.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config.h Thu Jan 12 11:26:14 2017 +0000 @@ -0,0 +1,22 @@ +// config.h | 18698.01 ** 2017-01-12 +//------------------------------------------------------------- +// Radio tester and RSSI meter, +// checks for BLE radio communication of motiles in the same group. + +#ifndef __CONFIG_H__ +#define __CONFIG_H__ + +#define MICROBIT_BLE_ENABLED 0 + +#define ksHeader "Radio tester and RSSI meter (18698.01)" +#define radioGroupName "TESTUDINES" +#define radioGroupNumber 42 +#define radioTimeout 12 // seconds. + +// Miscellaneous constants: + +#define FALSE 0 +#define TRUE 1 +#define kGRAD 0xB0 // ° = 0xF8 too. + +#endif //__CONFIG_H__
diff -r 000000000000 -r 28e881c1eb79 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jan 12 11:26:14 2017 +0000 @@ -0,0 +1,162 @@ +/* +The MIT License (MIT) + +Copyright (c) 2016 British Broadcasting Corporation. +This software is provided by Lancaster University by arrangement with the BBC. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation +the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + + +/* + * This is a simple example that uses the micro:bit radio to show if another + * micro:bit is nearby broadcasting with the same group number. + * The display will show the received signal strength in -dBm. + * + */ + +#include "config.h" +#include "MicroBit.h" + +#if MICROBIT_BLE_ENABLED + #ifdef YOTTA_CFG + #error "This example needs BLE to be disabled. Use the yotta config.json in the proximit-heart directory to do this" + #else + #error "This example needs BLE to be disabled in the microbit config file in the microbit-dal: MicroBitConfig.h" + #endif +#endif + +#ifdef USE_MICROBIT_ELEMENTS + +// Used microbit components. + +MicroBitDisplay display; +MicroBitRadio radio; +MicroBitMessageBus messageBus; + +#else + +// Complete microbit object. + +MicroBit uBit; + +#endif + +static int display = 0, receiving = 0, direction = 1; +static uint8_t radioRSSI = 98, radioGroup = radioGroupNumber; +ManagedString rxdata; +void onData(MicroBitEvent) + { + rxdata = uBit.radio.datagram.recv(); + receiving = 3; + radioRSSI = uBit.radio.getRSSI(); + display = 1; + } + +void onButtonA(MicroBitEvent) + { + if ( radioGroup != radioGroupNumber ) + { + radioGroup = radioGroupNumber; + uBit.radio.setGroup(radioGroup); + } + direction = -direction; + display = 2; + } + +void onButtonAlong(MicroBitEvent) + { + display = 3; + } + +void onButtonAhold(MicroBitEvent) + { + display = 3; + } + +void onButtonAdouble(MicroBitEvent) + { + display = 3; + } + +void onButtonBlong(MicroBitEvent) + { + display = 4; + } + +void onButtonB(MicroBitEvent) + { + radioGroup += direction; + uBit.radio.setGroup(radioGroup); + display = 2; + } + +int main() + { + int sleeping; + + // Initialise the micro:bit runtime. + uBit.init(); + uBit.radio.setGroup(radioGroupNumber); + //Setup a handler to run when data is received. + uBit.messageBus.listen(MICROBIT_ID_RADIO, MICROBIT_RADIO_EVT_DATAGRAM, onData); + // Setup some button handlers to allow extra control with buttons. + uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA); + uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB); + uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_LONG_CLICK, onButtonAlong); + uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_LONG_CLICK, onButtonBlong); + uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_HOLD, onButtonAhold); + uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_DOUBLE_CLICK, onButtonAdouble); + uBit.radio.enable(); + + while ( true ) + { + switch ( display ) + { + default: + case 0: // nothing to display? + uBit.display.print("?"); + sleeping = 1000; + break; + + case 1: // display signal strength. + uBit.display.scroll(radioRSSI); + sleeping = 500; + break; + + case 2: // display group number. + uBit.display.print("#", 300); + uBit.display.scroll(radioGroup); + sleeping = 500; + break; + + case 3: // display received data. + uBit.display.scroll(rxdata); + sleeping = 500; + break; + } + + if ( receiving ) + { + receiving -= 1; + display = receiving && display == 1 ? 1 : 0; + } + uBit.sleep(sleeping); + } +}
diff -r 000000000000 -r 28e881c1eb79 microbit.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/microbit.lib Thu Jan 12 11:26:14 2017 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/teams/Lancaster-University/code/microbit/#4b89e7e3494f