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
Diff: main.cpp
- Revision:
- 0:3e21be32c98b
- Child:
- 1:b394935d1db1
diff -r 000000000000 -r 3e21be32c98b main.cpp --- /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"); + } + } +}