David SELOSSE / microbit-nsi-malraux-ble

Dependencies:   microbit

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "MicroBit.h"
00002 #include "MicroBitUARTService.h"
00003 
00004 MicroBit uBit;
00005 MicroBitUARTService *uart;
00006 
00007 int connected = 0;
00008 
00009 void onConnected(MicroBitEvent)
00010 {
00011 
00012     uBit.display.scroll("C");
00013 
00014     connected = 1;
00015 
00016     // mobile app will send ASCII strings terminated with the colon character
00017     ManagedString eom(":");
00018 
00019     while(connected == 1) {
00020         ManagedString msg = uart->readUntil(eom);
00021         uBit.display.scroll(msg);
00022     }
00023 
00024 }
00025 
00026 void onDisconnected(MicroBitEvent)
00027 {
00028     uBit.display.scroll("D");
00029     connected = 0;
00030 }
00031 
00032 void onButtonA(MicroBitEvent)
00033 {
00034     if (connected == 0) {
00035         return;
00036     }
00037     uart->send(ManagedString("YES"));
00038     uBit.display.scroll("Y");
00039 }
00040 
00041 void onButtonB(MicroBitEvent)
00042 {
00043     if (connected == 0) {
00044         return;
00045     }
00046     uart->send(ManagedString("NO"));
00047     uBit.display.scroll("N");
00048 }
00049 
00050 void onButtonAB(MicroBitEvent)
00051 {
00052     if (connected == 0) {
00053         return;
00054     }
00055     uart->send(ManagedString("GOT IT!!"));
00056     uBit.display.scroll("!");
00057 }
00058 
00059 int main()
00060 {
00061     // Initialise the micro:bit runtime.
00062     uBit.init();
00063 
00064     uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_CONNECTED, onConnected);
00065     uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_DISCONNECTED, onDisconnected);
00066     uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA);
00067     uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB);
00068     uBit.messageBus.listen(MICROBIT_ID_BUTTON_AB, MICROBIT_BUTTON_EVT_CLICK, onButtonAB);
00069 
00070 
00071     // Note GATT table size increased from default in MicroBitConfig.h
00072     // #define MICROBIT_SD_GATT_TABLE_SIZE             0x500
00073     uart = new MicroBitUARTService(*uBit.ble, 32, 32);
00074     uBit.display.scroll("UART ready");
00075 
00076     // If main exits, there may still be other fibers running or registered event handlers etc.
00077     // Simply release this fiber, which will mean we enter the scheduler. Worse case, we then
00078     // sit in the idle task forever, in a power efficient sleep.
00079     release_fiber();
00080 }