Pull request for i.a. sensor buffer template
Dependencies: BLE_API MPU6050 mbed nRF51822
main.cpp@7:d92f1383bd81, 2018-10-16 (annotated)
- 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?
User | Revision | Line number | New 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 |