Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BLE_API mbed nRF51822
Fork of SenseAirLP8 by
Diff: main.cpp
- Revision:
- 0:ee3787c8e209
- Child:
- 1:b512a405b584
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Apr 21 13:26:06 2017 +0000
@@ -0,0 +1,123 @@
+#include "mbed.h"
+#include "BLE.h"
+#include "LP8_Service.h"
+#include "LP8.h"
+
+//setup ble stack
+BLE ble; //BLE object
+
+// Pins and timers needed for lp8 communication
+DigitalIn RDY(P0_8); //
+DigitalOut VBB(P0_5);
+DigitalOut VBB_EN(P0_4); //
+Serial Device(P0_9, P0_11); //tx, rx
+DigitalOut led1(P0_19, 1); //board led
+Timer lp8Wait; //timer for sensor communication
+
+
+
+//Sensor and ble Configuration parameters
+#define SENSOR_TIMER 10.0 //lp8 polling interval (seconds)
+#define BLE_ADV_INTERVAL 500 //advertisment interval (milliseconds)
+
+
+
+//device name and uuid list setup
+const static char DEVICE_NAME[] = "SenseAir LP8";
+static const uint16_t uuid16_list[] = {LP8_Service::LP8_SERVICE_UUID};
+
+
+//check for sensor triggering and uppdating Gatt Server
+bool triggerSensor = false; //check for sensor polling
+LP8_Service *lp8ServicePtr; //pointer to lp8 service object
+
+
+
+//**************************** ble functions *******************************
+//**************************** *******************************
+// on Disconnect, Restart BroadCasting
+void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
+{
+ //reset I/O pin, necessary?
+// VBB_EN.write ( 1 );
+
+ //restart broadcast
+ ble.gap().startAdvertising();
+}
+//timer function callback function
+void triggerSensorPollingInterupt()
+{
+ triggerSensor = true;
+};
+
+
+
+//main
+int main(void)
+{
+ led1 = 1; //turn off led
+
+ Ticker lp8Timer; //timer object for sensor polling interupts
+ lp8Timer.attach(&triggerSensorPollingInterupt, SENSOR_TIMER); //trigger sensor reading every X.Y sec
+
+ ble.init();
+ ble.gap().onDisconnection(disconnectionCallback); //do callback if disconnection occurs
+
+
+ int co2Value = 400; //initial CO2 value
+ bool initCheck = true; //check for init sensor state or lost state
+ bool successCheck = false;
+
+//setup LP8 peripheral communication
+ LP8 lp8(Device, VBB, VBB_EN, RDY, lp8Wait);
+
+
+//setup for GattService
+/* Setup Gatt server */
+ LP8_Service lp8Service(ble, co2Value); //pass in ble object and initial co2 value
+ lp8ServicePtr = &lp8Service; //set pointer to "real" lp8 service object
+
+
+/* setup advertising parameters */
+ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); //general bluetooth information(only support for ble
+ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); //service list
+ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
+ ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
+ ble.gap().setAdvertisingInterval(BLE_ADV_INTERVAL); /* advertising interval in ms. */
+ ble.gap().startAdvertising(); //start broadcast
+
+ /* SpinWait for initialization to complete. This is necessary because the
+ * BLE object is used in the main loop below. */
+ while (ble.hasInitialized() == false) { /* spin loop */ }
+
+
+
+//start the loop
+ while ( true )
+ {
+ if(triggerSensor && ble.gap().getState().connected ) //trigger when timer interupts ticks and there is an established connection
+ {
+ if ( initCheck ) {
+ successCheck = lp8.lp8Init();
+
+// if ( successCheck ) {
+ initCheck = false;
+// led1 = 0; //turn on led
+// }
+ }
+ else {
+ lp8.lp8Talk();
+ led1 = 0; //on when talking
+ }
+
+ //reset sensor status
+ triggerSensor = false;
+ //update gattServer with new CO2 value
+ lp8ServicePtr->updateCo2Value( lp8.getValue() );
+ }
+
+ else { ble.waitForEvent(); } //ble save energy
+ }
+
+};
+
