Adafruit Bluefruit with KL25Z sending MMA8451Q acceleration data over BLE UART to Nordic oder Adafruit app

Dependencies:   BLE_nRF8001 MMA8451Q mbed

Fork of BLE_KL25_nRF8001 by Ian Kilburn

Revision:
0:3e21be32c98b
Child:
1:b394935d1db1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Mar 09 16:56:23 2017 +0000
@@ -0,0 +1,136 @@
+/*
+
+Copyright (c) 2012-2014 RedBearLab
+
+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.
+
+*/
+
+/*
+ *    The application works with the BLEController iOS/Android App.
+ *    Type something from the Terminal to send
+ *    to the BLEController App or vice verse.
+ *    Characteristics received from App will print on Terminal.
+ */
+ 
+// Import libraries 
+#include "Arduino.h"
+#include "BLEPeripheral.h"
+
+Serial serial(USBTX, USBRX);
+
+// The SPI construct, REQN and RDYN IO construct should be modified manually
+// It depend on the board you are using and the REQN&RDYN configuration on BLE Shield
+// config for KL25Z
+SPI spi(PTD2, PTD3, PTD1);    // MOSI , MISO , SCLK  
+DigitalInOut BLE_RDY(PTD5);  // 
+DigitalInOut BLE_REQ(PTD0);   // 
+
+unsigned char txbuf[16] = {0};
+unsigned char txlen = 0;
+
+/*----- BLE Utility -------------------------------------------------------------------------*/
+// create peripheral instance, see pinouts above
+BLEPeripheral            blePeripheral        = BLEPeripheral(&BLE_REQ, &BLE_RDY, NULL);
+
+// create service
+BLEService               uartService          = BLEService("713d0000503e4c75ba943148f18d941e");
+
+// create characteristic
+BLECharacteristic    txCharacteristic = BLECharacteristic("713d0002503e4c75ba943148f18d941e", BLENotify, 20);
+BLECharacteristic    rxCharacteristic = BLECharacteristic("713d0003503e4c75ba943148f18d941e", BLEWriteWithoutResponse, 20);
+/*--------------------------------------------------------------------------------------------*/
+
+unsigned int interval = 0;
+unsigned char count_on = 0;
+ 
+int main()
+{ 
+    serial.baud(115200);
+    serial.printf("Serial begin!\r\n");
+    
+    /*----- BLE Utility ---------------------------------------------*/
+    // set advertised local name and service UUID
+    blePeripheral.setLocalName("BLE Shield");
+    
+    blePeripheral.setAdvertisedServiceUuid(uartService.uuid());
+    
+    // add service and characteristic
+    blePeripheral.addAttribute(uartService);
+    blePeripheral.addAttribute(rxCharacteristic);
+    blePeripheral.addAttribute(txCharacteristic);
+    
+    // begin initialization
+    blePeripheral.begin();
+    /*---------------------------------------------------------------*/
+    
+    serial.printf("BLE UART Peripheral begin!\r\n");
+    
+    while(1)
+    {
+        BLECentral central = blePeripheral.central();
+        
+        if (central) 
+        {
+            // central connected to peripheral
+            serial.printf("Connected to central\r\n");
+            
+            while (central.connected()) 
+            {
+                // central still connected to peripheral
+                if (rxCharacteristic.written()) 
+                {
+                    unsigned char rxlen = rxCharacteristic.valueLength();
+                    const unsigned char *val = rxCharacteristic.value();
+                    serial.printf("didCharacteristicWritten, Length: %d\r\n", rxlen); 
+                    unsigned char i = 0;
+                    while(i<rxlen)
+                    {
+                        serial.printf("%d, ",val[i++]);
+                    }
+                    serial.printf("\r\n");
+                }
+                 
+                if(serial.readable())   // Do not spend much time on doing other things when serial available! Otherwisee, data will lose. 
+                {
+                    if(!count_on)
+                    {
+                        count_on = 1;
+                    }
+                    interval = 0;
+                    txbuf[txlen] = serial.getc();
+                    txlen++;
+                }
+                
+                if(count_on)    // Count the interval after receiving a new char from terminate
+                {
+                    interval++;
+                }
+                
+                if(interval == 10)   // If there is no char available last the interval, send the received chars to central.
+                {
+                    interval = 0;
+                    count_on = 0;
+                    
+                    serial.printf("Received from terminal: %d bytes\r\n", txlen);
+                    txCharacteristic.setValue((const unsigned char *)txbuf, txlen);
+                    txlen = 0;
+                }
+            }
+        
+            // central disconnected
+            serial.printf("Disconnected from central\r\n");
+        }
+    }
+}