Pull request for i.a. sensor buffer template

Dependencies:   BLE_API MPU6050 mbed nRF51822

Committer:
Pieter Maljaars
Date:
Tue Oct 16 21:25:50 2018 +0200
Revision:
7:d92f1383bd81
Parent:
6:ed0dc0647c01
Child:
8:d1f5c8801d59
Enable acceleration again

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pietermaljaars 0:7c12d0922052 1
pietermaljaars 0:7c12d0922052 2 #include "mbed.h"
pietermaljaars 0:7c12d0922052 3 #include "nrf51.h"
pietermaljaars 0:7c12d0922052 4 #include "nrf51_bitfields.h"
pietermaljaars 3:7875f062a4ea 5 #include "MPU6050.h"
pietermaljaars 0:7c12d0922052 6
pietermaljaars 0:7c12d0922052 7 #include "BLE.h"
pietermaljaars 0:7c12d0922052 8 #include "DFUService.h"
pietermaljaars 0:7c12d0922052 9 #include "UARTService.h"
pietermaljaars 2:bf1a19d489eb 10 #include "BatteryService.h"
pietermaljaars 2:bf1a19d489eb 11 #include "DeviceInformationService.h"
pietermaljaars 5:614164945894 12 #include "TemperatureService.h"
Pieter Maljaars 7:d92f1383bd81 13 #include "AccelerationService.h"
pietermaljaars 0:7c12d0922052 14
pietermaljaars 0:7c12d0922052 15
pietermaljaars 0:7c12d0922052 16 #define LOG(...) { pc.printf(__VA_ARGS__); }
pietermaljaars 0:7c12d0922052 17
pietermaljaars 0:7c12d0922052 18 #define LED_GREEN p21
pietermaljaars 0:7c12d0922052 19 #define LED_RED p22
pietermaljaars 0:7c12d0922052 20 #define LED_BLUE p23
pietermaljaars 0:7c12d0922052 21 #define BUTTON_PIN p17
pietermaljaars 0:7c12d0922052 22 #define BATTERY_PIN p1
pietermaljaars 0:7c12d0922052 23
pietermaljaars 0:7c12d0922052 24 #define MPU6050_SDA p12
pietermaljaars 0:7c12d0922052 25 #define MPU6050_SCL p13
pietermaljaars 0:7c12d0922052 26
pietermaljaars 0:7c12d0922052 27 #define UART_TX p9
pietermaljaars 0:7c12d0922052 28 #define UART_RX p11
pietermaljaars 0:7c12d0922052 29 #define UART_CTS p8
pietermaljaars 0:7c12d0922052 30 #define UART_RTS p10
pietermaljaars 0:7c12d0922052 31
pietermaljaars 0:7c12d0922052 32 /* Starting sampling rate. */
pietermaljaars 0:7c12d0922052 33 #define DEFAULT_MPU_HZ (100)
pietermaljaars 0:7c12d0922052 34
pietermaljaars 2:bf1a19d489eb 35
pietermaljaars 4:aea4ff8e52ef 36 #define MANUFACTURER "PM @ ALTEN"
pietermaljaars 4:aea4ff8e52ef 37 #define MODELNUMBER "IoT BLE"
pietermaljaars 4:aea4ff8e52ef 38 #define SERIALNUMBER "123456"
pietermaljaars 4:aea4ff8e52ef 39 #define HARDWAREREVISION "Seeed demo IoT"
pietermaljaars 2:bf1a19d489eb 40 #define FIRMWAREREVISION "1.0"
pietermaljaars 2:bf1a19d489eb 41 #define SOFTWAREREVISION "1.0"
pietermaljaars 2:bf1a19d489eb 42
pietermaljaars 0:7c12d0922052 43 DigitalOut blue(LED_BLUE);
pietermaljaars 0:7c12d0922052 44 DigitalOut green(LED_GREEN);
pietermaljaars 0:7c12d0922052 45 DigitalOut red(LED_RED);
pietermaljaars 0:7c12d0922052 46
pietermaljaars 0:7c12d0922052 47 InterruptIn button(BUTTON_PIN);
pietermaljaars 0:7c12d0922052 48 AnalogIn battery(BATTERY_PIN);
pietermaljaars 0:7c12d0922052 49 Serial pc(UART_TX, UART_RX);
pietermaljaars 3:7875f062a4ea 50 MPU6050 mpu(MPU6050_SDA, MPU6050_SCL);
pietermaljaars 0:7c12d0922052 51
pietermaljaars 0:7c12d0922052 52 InterruptIn motion_probe(p14);
pietermaljaars 0:7c12d0922052 53
pietermaljaars 0:7c12d0922052 54 int read_none_count = 0;
pietermaljaars 0:7c12d0922052 55
pietermaljaars 0:7c12d0922052 56 BLEDevice ble;
pietermaljaars 0:7c12d0922052 57 UARTService *uartServicePtr;
pietermaljaars 0:7c12d0922052 58
pietermaljaars 2:bf1a19d489eb 59 // variables to monitor the battery voltage
pietermaljaars 3:7875f062a4ea 60 volatile float batteryVoltage = 100.0f;
pietermaljaars 3:7875f062a4ea 61 volatile bool batteryVoltageChanged = false;
pietermaljaars 3:7875f062a4ea 62
pietermaljaars 3:7875f062a4ea 63 volatile bool startMeasure = false;
pietermaljaars 2:bf1a19d489eb 64
pietermaljaars 0:7c12d0922052 65 volatile bool bleIsConnected = false;
pietermaljaars 0:7c12d0922052 66 volatile uint8_t tick_event = 0;
pietermaljaars 3:7875f062a4ea 67
pietermaljaars 3:7875f062a4ea 68 int16_t ax, ay, az;
pietermaljaars 3:7875f062a4ea 69 int16_t gx, gy, gz;
pietermaljaars 0:7c12d0922052 70
pietermaljaars 0:7c12d0922052 71
pietermaljaars 0:7c12d0922052 72 void connectionCallback(const Gap::ConnectionCallbackParams_t *params)
pietermaljaars 0:7c12d0922052 73 {
pietermaljaars 0:7c12d0922052 74 LOG("Connected!\n");
pietermaljaars 0:7c12d0922052 75 bleIsConnected = true;
pietermaljaars 0:7c12d0922052 76 }
pietermaljaars 0:7c12d0922052 77
pietermaljaars 0:7c12d0922052 78 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *cbParams)
pietermaljaars 0:7c12d0922052 79 {
pietermaljaars 0:7c12d0922052 80 LOG("Disconnected!\n");
pietermaljaars 0:7c12d0922052 81 LOG("Restarting the advertising process\n");
pietermaljaars 0:7c12d0922052 82 ble.startAdvertising();
pietermaljaars 0:7c12d0922052 83 bleIsConnected = false;
pietermaljaars 0:7c12d0922052 84 }
pietermaljaars 0:7c12d0922052 85
pietermaljaars 0:7c12d0922052 86 void tick(void)
pietermaljaars 0:7c12d0922052 87 {
pietermaljaars 0:7c12d0922052 88 green = !green;
pietermaljaars 3:7875f062a4ea 89 startMeasure = true; // notify the main-loop to start measuring the MPU6050
pietermaljaars 0:7c12d0922052 90 }
pietermaljaars 0:7c12d0922052 91
pietermaljaars 2:bf1a19d489eb 92 // timer callback function to measure the ADC battery level
pietermaljaars 2:bf1a19d489eb 93 void batteryMonitorCallback(void)
pietermaljaars 2:bf1a19d489eb 94 {
pietermaljaars 2:bf1a19d489eb 95 float sample;
pietermaljaars 2:bf1a19d489eb 96
pietermaljaars 2:bf1a19d489eb 97 sample = battery.read();
pietermaljaars 2:bf1a19d489eb 98 /* cannot use (uart.)printf() in a ISR like this. */
pietermaljaars 2:bf1a19d489eb 99 batteryVoltage = sample;
pietermaljaars 2:bf1a19d489eb 100 batteryVoltageChanged = true;
pietermaljaars 2:bf1a19d489eb 101 }
pietermaljaars 2:bf1a19d489eb 102
pietermaljaars 0:7c12d0922052 103 void detect(void)
pietermaljaars 0:7c12d0922052 104 {
pietermaljaars 0:7c12d0922052 105 LOG("Button pressed\n");
pietermaljaars 0:7c12d0922052 106 blue = !blue;
pietermaljaars 0:7c12d0922052 107 }
pietermaljaars 0:7c12d0922052 108
pietermaljaars 0:7c12d0922052 109
pietermaljaars 0:7c12d0922052 110 int main(void)
pietermaljaars 0:7c12d0922052 111 {
pietermaljaars 0:7c12d0922052 112 blue = 1;
pietermaljaars 0:7c12d0922052 113 green = 1;
pietermaljaars 0:7c12d0922052 114 red = 1;
pietermaljaars 0:7c12d0922052 115
pietermaljaars 0:7c12d0922052 116 pc.baud(115200);
pietermaljaars 0:7c12d0922052 117
pietermaljaars 0:7c12d0922052 118 wait(1);
pietermaljaars 0:7c12d0922052 119
pietermaljaars 0:7c12d0922052 120 LOG("---- Seeed Tiny BLE ----\n");
pietermaljaars 0:7c12d0922052 121
pietermaljaars 0:7c12d0922052 122
pietermaljaars 3:7875f062a4ea 123 LOG("MPU6050 testConnection \n");
pietermaljaars 3:7875f062a4ea 124 bool mpu6050TestResult = mpu.testConnection();
pietermaljaars 3:7875f062a4ea 125 if(mpu6050TestResult) {
pietermaljaars 3:7875f062a4ea 126 LOG("MPU6050 test passed \n");
pietermaljaars 3:7875f062a4ea 127 } else {
pietermaljaars 3:7875f062a4ea 128 LOG("MPU6050 test failed \n");
pietermaljaars 0:7c12d0922052 129 }
pietermaljaars 0:7c12d0922052 130
pietermaljaars 0:7c12d0922052 131 Ticker ticker;
pietermaljaars 3:7875f062a4ea 132 ticker.attach(tick, 5);
pietermaljaars 2:bf1a19d489eb 133
pietermaljaars 2:bf1a19d489eb 134 Ticker batteryMonitorTicker;
pietermaljaars 2:bf1a19d489eb 135 batteryMonitorTicker.attach(batteryMonitorCallback, 60.0f);
pietermaljaars 0:7c12d0922052 136
pietermaljaars 0:7c12d0922052 137 button.fall(detect);
pietermaljaars 0:7c12d0922052 138
pietermaljaars 0:7c12d0922052 139 LOG("Initialising the nRF51822\n");
pietermaljaars 0:7c12d0922052 140 ble.init();
pietermaljaars 0:7c12d0922052 141 ble.gap().onDisconnection(disconnectionCallback);
pietermaljaars 0:7c12d0922052 142 ble.gap().onConnection(connectionCallback);
pietermaljaars 1:b529e733ab71 143
pietermaljaars 1:b529e733ab71 144 uint8_t name[] = "iot aabbccddeeff";
pietermaljaars 1:b529e733ab71 145
pietermaljaars 1:b529e733ab71 146 Gap::AddressType_t addr_type;
pietermaljaars 1:b529e733ab71 147 Gap::Address_t address;
pietermaljaars 1:b529e733ab71 148 ble_error_t error = ble.gap().getAddress(&addr_type, address);
pietermaljaars 1:b529e733ab71 149 if (error == BLE_ERROR_NONE) {
pietermaljaars 1:b529e733ab71 150 for (int i = 5; i >= 0; i--){
pietermaljaars 1:b529e733ab71 151 char buffer[3];
pietermaljaars 1:b529e733ab71 152 sprintf(buffer, "%02x", address[i]);
pietermaljaars 1:b529e733ab71 153 name[4 + ((5-i)*2)] = buffer[0];
pietermaljaars 1:b529e733ab71 154 name[4 + ((5-i)*2) + 1] = buffer[1];
pietermaljaars 1:b529e733ab71 155 }
pietermaljaars 1:b529e733ab71 156 }
pietermaljaars 1:b529e733ab71 157 LOG("name = %s\n", name);
pietermaljaars 1:b529e733ab71 158
pietermaljaars 0:7c12d0922052 159 /* setup advertising */
pietermaljaars 0:7c12d0922052 160 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
pietermaljaars 0:7c12d0922052 161 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
pietermaljaars 0:7c12d0922052 162 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
pietermaljaars 1:b529e733ab71 163 name, sizeof(name));
pietermaljaars 0:7c12d0922052 164 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
pietermaljaars 0:7c12d0922052 165 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
pietermaljaars 0:7c12d0922052 166 DFUService dfu(ble);
pietermaljaars 0:7c12d0922052 167 UARTService uartService(ble);
pietermaljaars 0:7c12d0922052 168 uartServicePtr = &uartService;
pietermaljaars 0:7c12d0922052 169 //uartService.retargetStdout();
pietermaljaars 2:bf1a19d489eb 170 BatteryService battery(ble);
pietermaljaars 2:bf1a19d489eb 171 DeviceInformationService deviceInfo(ble, MANUFACTURER, MODELNUMBER, SERIALNUMBER, HARDWAREREVISION, FIRMWAREREVISION, SOFTWAREREVISION);
pietermaljaars 5:614164945894 172 TemperatureService tempService(ble);
Pieter Maljaars 7:d92f1383bd81 173 AccelerationService accelerationService(ble);
pietermaljaars 0:7c12d0922052 174
pietermaljaars 0:7c12d0922052 175 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
pietermaljaars 0:7c12d0922052 176 ble.gap().startAdvertising();
pietermaljaars 0:7c12d0922052 177
pietermaljaars 0:7c12d0922052 178 while (true) {
pietermaljaars 3:7875f062a4ea 179 ble.waitForEvent();
pietermaljaars 3:7875f062a4ea 180
pietermaljaars 3:7875f062a4ea 181 // update battery level after the level is measured
pietermaljaars 3:7875f062a4ea 182 if (batteryVoltageChanged == true) {
pietermaljaars 3:7875f062a4ea 183 LOG("VBat: %4.3f, ADC: %4.3f, Vadc: %4.3f\n", batteryVoltage*2.0f, batteryVoltage, batteryVoltage*3.3f);
pietermaljaars 3:7875f062a4ea 184 battery.updateBatteryLevel((uint8_t)(batteryVoltage*100.0f)); // input is 0-1.0 of 3.3V -> *100 = percentage of 3.3V
pietermaljaars 3:7875f062a4ea 185 batteryVoltageChanged = false;
pietermaljaars 3:7875f062a4ea 186 }
pietermaljaars 3:7875f062a4ea 187 else if (startMeasure == true) {
pietermaljaars 6:ed0dc0647c01 188 //float a[3];
pietermaljaars 6:ed0dc0647c01 189 //mpu.getAccelero(a);
pietermaljaars 6:ed0dc0647c01 190 //LOG("Acceleration %.2f;%.2f;%.2f\n", a[0], a[1], a[2]);
Pieter Maljaars 7:d92f1383bd81 191
pietermaljaars 6:ed0dc0647c01 192 int a[3];
pietermaljaars 6:ed0dc0647c01 193 mpu.getAcceleroRaw(a);
pietermaljaars 6:ed0dc0647c01 194 accelerationService.addAcceleration((int16_t*)a);
pietermaljaars 6:ed0dc0647c01 195 LOG("Acceleration %d;%d;%d\n", a[0], a[1], a[2]);
pietermaljaars 0:7c12d0922052 196
pietermaljaars 3:7875f062a4ea 197 float temp = mpu.getTemp();
pietermaljaars 5:614164945894 198 LOG("Temp = %.01f\n", temp);
pietermaljaars 5:614164945894 199 int16_t tempRaw = mpu.getTempRaw();
pietermaljaars 6:ed0dc0647c01 200 // convert into 0.1 degrees Celsius
pietermaljaars 5:614164945894 201 tempRaw *= 10;
pietermaljaars 5:614164945894 202 tempRaw += 5210;
pietermaljaars 5:614164945894 203 tempRaw /= 340;
pietermaljaars 5:614164945894 204 tempRaw += 350;
pietermaljaars 6:ed0dc0647c01 205 // update BLE tmperature
pietermaljaars 5:614164945894 206 tempService.updateTemperature(tempRaw);
pietermaljaars 6:ed0dc0647c01 207
pietermaljaars 6:ed0dc0647c01 208 startMeasure = false;
pietermaljaars 0:7c12d0922052 209 }
pietermaljaars 0:7c12d0922052 210 }
pietermaljaars 0:7c12d0922052 211 }
pietermaljaars 0:7c12d0922052 212