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: MPU9250_SPI
Fork of WearableDevice_Nucleo by
main.cpp@29:ab809198c1ba, 2018-02-16 (annotated)
- Committer:
- Muglug
- Date:
- Fri Feb 16 18:30:19 2018 +0000
- Revision:
- 29:ab809198c1ba
- Parent:
- 28:c7e977a19564
Final Version
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| gusteibolt | 1:a6dc717fb060 | 1 | /* |
| gusteibolt | 1:a6dc717fb060 | 2 | * Los Putacos |
| gusteibolt | 1:a6dc717fb060 | 3 | * Copyright (C) 2017, All rights reserved. |
| Muglug | 18:7f9c2b8541e1 | 4 | * ________________________________________ |
| gusteibolt | 1:a6dc717fb060 | 5 | * |
| gusteibolt | 1:a6dc717fb060 | 6 | * Created by: Gustavo Campana, Michael Schmidt, Miguel Lopez |
| Muglug | 28:c7e977a19564 | 7 | * Date: 02-Dec-2017 |
| gusteibolt | 1:a6dc717fb060 | 8 | * Version: V0.1 |
| gusteibolt | 1:a6dc717fb060 | 9 | */ |
| Muglug | 23:aad5fd1b3ef9 | 10 | //----------------------------------------------------------------- |
| gusteibolt | 1:a6dc717fb060 | 11 | |
| gusteibolt | 1:a6dc717fb060 | 12 | //----------------------------------------------------------------- |
| Muglug | 28:c7e977a19564 | 13 | // "THE BEER-WARE LICENSE" (Revision 42): |
| Muglug | 28:c7e977a19564 | 14 | // The "Los Putacos" team wrote this file. As long as you retain this notice you |
| Muglug | 28:c7e977a19564 | 15 | // can do whatever you want with this stuff. If we meet some day, and you think |
| Muglug | 28:c7e977a19564 | 16 | // this stuff is worth it, you can buy me a beer in return Poul-Henning Kamp |
| gusteibolt | 1:a6dc717fb060 | 17 | //----------------------------------------------------------------- |
| gusteibolt | 1:a6dc717fb060 | 18 | |
| gusteibolt | 1:a6dc717fb060 | 19 | //----------------------------------------------------------------- |
| gusteibolt | 1:a6dc717fb060 | 20 | // Includes |
| Muglug | 25:86137c182a17 | 21 | #include "mbed.h" |
| Muglug | 28:c7e977a19564 | 22 | #include "event.h" |
| Muglug | 28:c7e977a19564 | 23 | #include "MPU9250.h" |
| Muglug | 28:c7e977a19564 | 24 | #include "TCPSocket.h" |
| Muglug | 23:aad5fd1b3ef9 | 25 | #include "configuration.h" |
| Muglug | 28:c7e977a19564 | 26 | #include "ESP8266Interface.h" |
| gusteibolt | 3:26aeff25f610 | 27 | |
| gusteibolt | 1:a6dc717fb060 | 28 | //----------------------------------------------------------------- |
| gusteibolt | 0:73cd0cb02330 | 29 | |
| gusteibolt | 1:a6dc717fb060 | 30 | //----------------------------------------------------------------- |
| Muglug | 29:ab809198c1ba | 31 | // General Declarations |
| Muglug | 29:ab809198c1ba | 32 | Timer TimeStamp; // Timer µS time-stamp |
| Muglug | 29:ab809198c1ba | 33 | Serial PC(USBTX, USBRX); // Create an Serial PC Object - USBTX, USBRX |
| Muglug | 28:c7e977a19564 | 34 | |
| Muglug | 29:ab809198c1ba | 35 | // IMU-SPI Declaration |
| Muglug | 29:ab809198c1ba | 36 | SPI spi(IMU_MOSI, IMU_MISO,IMU_SCK); // Create an SPI Object for MPU9250 - MOSI, MISO, SCK |
| Muglug | 28:c7e977a19564 | 37 | mpu9250_spi imu(spi, IMU_CS); // Create an MPU9250 Object - SPI Object, CS |
| Muglug | 28:c7e977a19564 | 38 | |
| Muglug | 29:ab809198c1ba | 39 | // WiFi & TCP Socket Declaration |
| Muglug | 28:c7e977a19564 | 40 | ESP8266Interface WiFi(ESP_TX, ESP_RX); // ESP8266 WiFi Interface |
| Muglug | 28:c7e977a19564 | 41 | TCPSocket Socket_TCP; // TCP Socket |
| Muglug | 29:ab809198c1ba | 42 | nsapi_error_t response; // TCP Socket Response |
| Muglug | 25:86137c182a17 | 43 | |
| Muglug | 29:ab809198c1ba | 44 | // EventQueue Declarations |
| Muglug | 25:86137c182a17 | 45 | EventQueue queue(32 * EVENTS_EVENT_SIZE); // Event Setup |
| Muglug | 25:86137c182a17 | 46 | |
| Muglug | 29:ab809198c1ba | 47 | // Ticker Declarations |
| Muglug | 26:4bc56ce08d15 | 48 | Ticker Ticker_IMU; |
| Muglug | 29:ab809198c1ba | 49 | Ticker Ticker_ReadBattery; |
| Muglug | 28:c7e977a19564 | 50 | Ticker Ticker_ReceiveCommand; |
| Muglug | 25:86137c182a17 | 51 | |
| Muglug | 29:ab809198c1ba | 52 | // Thread Declarations |
| Muglug | 26:4bc56ce08d15 | 53 | Thread Thread_IMU(osPriorityRealtime); |
| Muglug | 29:ab809198c1ba | 54 | Thread Thread_ReadBattery(osPriorityRealtime); |
| Muglug | 29:ab809198c1ba | 55 | Thread Thread_ReceiveCommand(osPriorityRealtime); |
| gusteibolt | 3:26aeff25f610 | 56 | |
| Muglug | 26:4bc56ce08d15 | 57 | // Global Variables |
| Muglug | 29:ab809198c1ba | 58 | uint16_t LineCount = 0; |
| Muglug | 29:ab809198c1ba | 59 | uint32_t Line_Size = 0; |
| Muglug | 27:c4b2ce6fa5b8 | 60 | uint32_t Data_Size = 0; |
| Muglug | 29:ab809198c1ba | 61 | |
| Muglug | 29:ab809198c1ba | 62 | // Read & Writepointer Declarations |
| Muglug | 29:ab809198c1ba | 63 | uint8_t Current_Position = 0; |
| Muglug | 26:4bc56ce08d15 | 64 | volatile uint16_t readPointer = 0; |
| Muglug | 26:4bc56ce08d15 | 65 | volatile uint16_t readPointer_MIC = 0; |
| Muglug | 26:4bc56ce08d15 | 66 | volatile uint16_t writePointer = 0; |
| Muglug | 26:4bc56ce08d15 | 67 | volatile uint16_t writePointer_MIC = 0; |
| Muglug | 24:eed68c95160c | 68 | |
| Muglug | 29:ab809198c1ba | 69 | // Flag Declarations |
| Muglug | 27:c4b2ce6fa5b8 | 70 | uint8_t ReadIMUDone_Flag = 0; |
| Muglug | 28:c7e977a19564 | 71 | uint8_t CheckCommandDone_Flag = 0; |
| Muglug | 27:c4b2ce6fa5b8 | 72 | |
| Muglug | 29:ab809198c1ba | 73 | // Battery Voltage & Power Consumption Declaration |
| Muglug | 29:ab809198c1ba | 74 | float Battery_Status = 0; |
| Muglug | 29:ab809198c1ba | 75 | float Power_Consumption = 0; |
| Muglug | 29:ab809198c1ba | 76 | |
| Muglug | 29:ab809198c1ba | 77 | // Time Buffer Declaration |
| Muglug | 29:ab809198c1ba | 78 | char Time_Buffer[2]; |
| Muglug | 29:ab809198c1ba | 79 | uint16_t Time_Data = 0; |
| Muglug | 26:4bc56ce08d15 | 80 | uint8_t Requested_Time = 0; |
| Muglug | 29:ab809198c1ba | 81 | |
| Muglug | 29:ab809198c1ba | 82 | // Data Storage Declaration |
| Muglug | 29:ab809198c1ba | 83 | char Data_Buffer[1024]; |
| Muglug | 29:ab809198c1ba | 84 | const char DeviceNr[6] = "DEV01"; // Device specific ID |
| Muglug | 26:4bc56ce08d15 | 85 | int16_t Data_Storage[BufferSize]; // BufferSize defined in "event.h" |
| Muglug | 26:4bc56ce08d15 | 86 | uint16_t Data_Storage_MIC[BufferSize_MIC]; // BufferSize_MIC defined in "event.h" |
| Muglug | 23:aad5fd1b3ef9 | 87 | |
| gusteibolt | 1:a6dc717fb060 | 88 | //----------------------------------------------------------------- |
| gusteibolt | 1:a6dc717fb060 | 89 | |
| gusteibolt | 1:a6dc717fb060 | 90 | //----------------------------------------------------------------- |
| Muglug | 18:7f9c2b8541e1 | 91 | void Setup() |
| Muglug | 18:7f9c2b8541e1 | 92 | { |
| Muglug | 29:ab809198c1ba | 93 | LED_Blue1 = 1; // Turn OFF all LEDs |
| Muglug | 29:ab809198c1ba | 94 | LED_Blue2 = 1; |
| Muglug | 29:ab809198c1ba | 95 | LED_Red1 = 1; |
| Muglug | 29:ab809198c1ba | 96 | LED_Red2 = 1; |
| Muglug | 29:ab809198c1ba | 97 | |
| Muglug | 26:4bc56ce08d15 | 98 | PC.baud(230400); // Initialize PC Serial Connection |
| Muglug | 24:eed68c95160c | 99 | PC.printf("\r\n------------- Booting! -------------\r\n"); |
| Muglug | 29:ab809198c1ba | 100 | PC.printf("CPU SystemCoreClock is %d Hz", SystemCoreClock); // Show SystemCoreClock Speed |
| Muglug | 28:c7e977a19564 | 101 | |
| Muglug | 28:c7e977a19564 | 102 | PC.printf("\nConnecting to %s with %s...\n", WiFi_SSID, WiFi_Pass); |
| Muglug | 29:ab809198c1ba | 103 | int ret = WiFi.connect(WiFi_SSID, WiFi_Pass, NSAPI_SECURITY_WPA_WPA2); // Connect WiFi |
| Muglug | 29:ab809198c1ba | 104 | |
| Muglug | 29:ab809198c1ba | 105 | while (ret != 0) { // WiFi Connection Not Successful |
| Muglug | 29:ab809198c1ba | 106 | PC.printf("\nConnecting to %s with %s...\n", WiFi_SSID, WiFi_Pass); |
| Muglug | 29:ab809198c1ba | 107 | ret = WiFi.connect(WiFi_SSID, WiFi_Pass, NSAPI_SECURITY_WPA_WPA2); |
| Muglug | 29:ab809198c1ba | 108 | wait(0.5); |
| Muglug | 28:c7e977a19564 | 109 | } |
| Muglug | 28:c7e977a19564 | 110 | |
| Muglug | 29:ab809198c1ba | 111 | printf("Connection Done! - IP: %s\r\n", WiFi.get_ip_address()); // Show IP Address |
| Muglug | 29:ab809198c1ba | 112 | Socket_TCP.open(&WiFi); // Open TCP_Socket on WiFi |
| Muglug | 29:ab809198c1ba | 113 | Socket_TCP.set_blocking(false); // Set Non-Blocking Mode |
| Muglug | 18:7f9c2b8541e1 | 114 | |
| Muglug | 29:ab809198c1ba | 115 | // Initialize IMU-SPI Connection |
| Muglug | 26:4bc56ce08d15 | 116 | if(imu.init(1, BITS_DLPF_CFG_188HZ)) // Initialize the MPU9250 |
| Muglug | 24:eed68c95160c | 117 | PC.printf("\nCouldn't initialize MPU9250 via SPI!"); |
| Muglug | 26:4bc56ce08d15 | 118 | PC.printf("\nWHOAMI = 0x%2x", imu.whoami()); // Output I2C Address to check SPI (correct: 104 - 0x68) |
| Muglug | 25:86137c182a17 | 119 | PC.printf("\nAcc_Scale = %u\n", imu.set_acc_scale(BITS_FS_16G)); // Set Full Range for Acc. |
| Muglug | 26:4bc56ce08d15 | 120 | imu.calib_acc(); // Calibrate Acceleration Sensor |
| Muglug | 24:eed68c95160c | 121 | |
| Muglug | 29:ab809198c1ba | 122 | ReadBattery(); // Read Battery Level |
| Muglug | 29:ab809198c1ba | 123 | TimeStamp.reset(); // Reset Timer TimeStamp |
| Muglug | 28:c7e977a19564 | 124 | Thread_ReceiveCommand.start(callback(&queue, &EventQueue::dispatch_forever)); // Start Command-Receiving Thread |
| Muglug | 29:ab809198c1ba | 125 | Ticker_ReceiveCommand.attach(queue.event(&ReceiveCommand), 0.500); // Attach 500ms Ticker to "ReceiveCommand" |
| Muglug | 28:c7e977a19564 | 126 | |
| Muglug | 29:ab809198c1ba | 127 | Thread_ReadBattery.start(callback(&queue, &EventQueue::dispatch_forever)); // Start Battery-Reading Thread |
| Muglug | 29:ab809198c1ba | 128 | Ticker_ReadBattery.attach(queue.event(&ReadBattery), 30); // Attach 30s Ticker to "ReadBattery" |
| Muglug | 29:ab809198c1ba | 129 | |
| Muglug | 29:ab809198c1ba | 130 | Buzzer = 0; // Disable Buzzer |
| Muglug | 29:ab809198c1ba | 131 | Buzzer.period(0.001); // 1kHz Buzzer Frequency |
| Muglug | 29:ab809198c1ba | 132 | |
| Muglug | 29:ab809198c1ba | 133 | LED_Blue1 = 0; // Turn ON LED to display 'Booting Done!' |
| Muglug | 26:4bc56ce08d15 | 134 | PC.printf("\r\n------------- Ready! ---------------\r\n"); |
| Muglug | 28:c7e977a19564 | 135 | } |
| Muglug | 24:eed68c95160c | 136 | |
| Muglug | 23:aad5fd1b3ef9 | 137 | //----------------------------------------------------------------- |
| Muglug | 18:7f9c2b8541e1 | 138 | |
| Mister_Lopez | 4:56e903769e94 | 139 | //----------------------------------------------------------------- |
| Muglug | 27:c4b2ce6fa5b8 | 140 | void Reset() // Reset All Variables |
| Muglug | 27:c4b2ce6fa5b8 | 141 | { |
| Muglug | 29:ab809198c1ba | 142 | Line_Size = 0; |
| Muglug | 29:ab809198c1ba | 143 | Data_Size = 0; |
| Muglug | 29:ab809198c1ba | 144 | LineCount = 0; |
| Muglug | 29:ab809198c1ba | 145 | Time_Data = 0; |
| Muglug | 29:ab809198c1ba | 146 | Requested_Time = 0; |
| Muglug | 29:ab809198c1ba | 147 | Current_Position = 0; |
| Muglug | 27:c4b2ce6fa5b8 | 148 | |
| Muglug | 29:ab809198c1ba | 149 | readPointer = 0; |
| Muglug | 29:ab809198c1ba | 150 | readPointer_MIC = 0; |
| Muglug | 29:ab809198c1ba | 151 | writePointer = 0; |
| Muglug | 29:ab809198c1ba | 152 | writePointer_MIC = 0; |
| Muglug | 29:ab809198c1ba | 153 | |
| Muglug | 29:ab809198c1ba | 154 | ReadIMUDone_Flag = 0; |
| Muglug | 29:ab809198c1ba | 155 | CheckCommandDone_Flag = 0; |
| Muglug | 27:c4b2ce6fa5b8 | 156 | |
| Muglug | 27:c4b2ce6fa5b8 | 157 | memset(Data_Storage, 0, sizeof(Data_Storage)); |
| Muglug | 27:c4b2ce6fa5b8 | 158 | memset(Data_Storage_MIC, 0, sizeof(Data_Storage_MIC)); |
| Muglug | 27:c4b2ce6fa5b8 | 159 | } |
| Muglug | 28:c7e977a19564 | 160 | |
| Muglug | 27:c4b2ce6fa5b8 | 161 | //----------------------------------------------------------------- |
| Muglug | 27:c4b2ce6fa5b8 | 162 | |
| Muglug | 27:c4b2ce6fa5b8 | 163 | //----------------------------------------------------------------- |
| gusteibolt | 0:73cd0cb02330 | 164 | int main() |
| gusteibolt | 0:73cd0cb02330 | 165 | { |
| Muglug | 18:7f9c2b8541e1 | 166 | Setup(); // Initial Setups |
| Muglug | 18:7f9c2b8541e1 | 167 | |
| Muglug | 26:4bc56ce08d15 | 168 | while (true) { |
| Muglug | 29:ab809198c1ba | 169 | if ((Requested_Time != 0) && (CheckCommandDone_Flag == 1)) { // Check Flag & Requested Time |
| Muglug | 29:ab809198c1ba | 170 | CheckCommandDone_Flag = 0; // Reset Flag |
| Muglug | 29:ab809198c1ba | 171 | memset(Data_Buffer, 0, sizeof(Data_Buffer)); // Clear Data_Buffer |
| Muglug | 27:c4b2ce6fa5b8 | 172 | |
| Muglug | 29:ab809198c1ba | 173 | TimeStamp.start(); // Start Timer TimeStamp |
| Muglug | 29:ab809198c1ba | 174 | Thread_IMU.start(callback(&queue, &EventQueue::dispatch_forever)); // Start "ReadIMU" Thread |
| Muglug | 29:ab809198c1ba | 175 | Ticker_IMU.attach_us(queue.event(&ReadIMU), 2000); // Attach 2ms Ticker to "ReadIMU" |
| Muglug | 26:4bc56ce08d15 | 176 | } |
| Muglug | 26:4bc56ce08d15 | 177 | |
| Muglug | 29:ab809198c1ba | 178 | while ((writePointer != readPointer) && (writePointer_MIC != readPointer_MIC) && (ReadIMUDone_Flag == 1)) { // Check Flag & Pointer Position |
| Muglug | 29:ab809198c1ba | 179 | while ((Data_Size + Line_Size) < 1024) { // Check Maximum Package Size |
| Muglug | 28:c7e977a19564 | 180 | if ((writePointer != readPointer) && (writePointer_MIC != readPointer_MIC)) { |
| Muglug | 28:c7e977a19564 | 181 | Data_Size += sprintf(&Data_Buffer[Data_Size], "%d;%d;%d;%d;%d\n", Data_Storage[readPointer++], Data_Storage_MIC[readPointer_MIC++], Data_Storage[readPointer++], Data_Storage[readPointer++], Data_Storage[readPointer++]); |
| Muglug | 29:ab809198c1ba | 182 | Line_Size = snprintf(NULL, 0, "%d;%d;%d;%d;%d\n", Data_Storage[readPointer], Data_Storage_MIC[readPointer_MIC], Data_Storage[readPointer], Data_Storage[readPointer], Data_Storage[readPointer]); |
| Muglug | 28:c7e977a19564 | 183 | } else |
| Muglug | 28:c7e977a19564 | 184 | break; |
| Muglug | 28:c7e977a19564 | 185 | } |
| Muglug | 28:c7e977a19564 | 186 | |
| Muglug | 29:ab809198c1ba | 187 | response = Socket_TCP.send(Data_Buffer, Data_Size); // Send Data via TCP_Socket |
| Muglug | 29:ab809198c1ba | 188 | while (response != Data_Size) // Sending Not Successful |
| Muglug | 29:ab809198c1ba | 189 | response = Socket_TCP.send(Data_Buffer, Data_Size); // Resend Data via TCP_Socket |
| Muglug | 29:ab809198c1ba | 190 | |
| Muglug | 29:ab809198c1ba | 191 | Data_Size = 0; // Reset Data_Size |
| Muglug | 29:ab809198c1ba | 192 | memset(Data_Buffer, 0, sizeof(Data_Buffer)); // Clear Data_Buffer |
| Muglug | 29:ab809198c1ba | 193 | wait(0.1); // Wait 100ms between Packages for ESP8266 Module |
| Muglug | 25:86137c182a17 | 194 | |
| Muglug | 29:ab809198c1ba | 195 | if ((readPointer == writePointer) && (writePointer_MIC == readPointer_MIC)) { // Check if Readpointer reached Writepointer Position |
| Muglug | 29:ab809198c1ba | 196 | ReadIMUDone_Flag = 0; // Reset Flag for Sending |
| Muglug | 29:ab809198c1ba | 197 | PC.printf("Sending Done! - Time Taken: %d ms\n\n", TimeStamp.read_ms()); // Show Time used for Data Sending |
| Muglug | 29:ab809198c1ba | 198 | TimeStamp.stop(); // Stop Timer TimeStamp |
| Muglug | 29:ab809198c1ba | 199 | TimeStamp.reset(); // Reset Timer TimeStamp |
| Muglug | 26:4bc56ce08d15 | 200 | |
| Muglug | 29:ab809198c1ba | 201 | Reset(); // Reset All Variables |
| Muglug | 29:ab809198c1ba | 202 | Thread_ReceiveCommand.start(callback(&queue, &EventQueue::dispatch_forever)); // Start "ReceiveCommand" Thread |
| Muglug | 29:ab809198c1ba | 203 | Ticker_ReceiveCommand.attach(queue.event(&ReceiveCommand), 0.500); // Attach 500ms Ticker to "ReceiveCommand" |
| Muglug | 28:c7e977a19564 | 204 | |
| Muglug | 29:ab809198c1ba | 205 | Thread_ReadBattery.start(callback(&queue, &EventQueue::dispatch_forever)); // Start "ReadBattery" |
| Muglug | 29:ab809198c1ba | 206 | Ticker_ReadBattery.attach(queue.event(&ReadBattery), 30); // Attach 30s Ticker to "ReadBattery" |
| Muglug | 28:c7e977a19564 | 207 | } |
| Muglug | 26:4bc56ce08d15 | 208 | } |
| Muglug | 19:0a3ae902722e | 209 | } |
| gusteibolt | 0:73cd0cb02330 | 210 | } |
| Muglug | 28:c7e977a19564 | 211 | |
| Muglug | 28:c7e977a19564 | 212 | //----------------------------------------------------------------- |
| Muglug | 28:c7e977a19564 | 213 | |
| Muglug | 18:7f9c2b8541e1 | 214 | //----------------------------------------------------------------- |
