Los Putacos / Mbed OS WearableDevice_Nucleo_New

Dependencies:   MPU9250_SPI

Fork of WearableDevice_Nucleo by Los Putacos

Revision:
29:ab809198c1ba
Parent:
28:c7e977a19564
diff -r c7e977a19564 -r ab809198c1ba main.cpp
--- a/main.cpp	Tue Dec 19 10:15:19 2017 +0000
+++ b/main.cpp	Fri Feb 16 18:30:19 2018 +0000
@@ -28,47 +28,60 @@
 //-----------------------------------------------------------------
 
 //-----------------------------------------------------------------
-// Declarations
-Timer Testing;
-Timer TimeStamp;                            // Timer µS time-stamp
-Serial PC(USBTX, USBRX);                    // Create an Serial PC Object - USBTX, USBRX
+// General Declarations
+Timer TimeStamp;                // Timer µS time-stamp
+Serial PC(USBTX, USBRX);        // Create an Serial PC Object - USBTX, USBRX
 
-SPI spi(IMU_MOSI, IMU_MISO,IMU_SCK);       // Create an SPI Object for MPU9250 - MOSI, MISO, SCK
+// IMU-SPI Declaration
+SPI spi(IMU_MOSI, IMU_MISO,IMU_SCK);        // Create an SPI Object for MPU9250 - MOSI, MISO, SCK
 mpu9250_spi imu(spi, IMU_CS);               // Create an MPU9250 Object - SPI Object, CS
 
+// WiFi & TCP Socket Declaration
 ESP8266Interface WiFi(ESP_TX, ESP_RX);      // ESP8266 WiFi Interface
 TCPSocket Socket_TCP;                       // TCP Socket
+nsapi_error_t response;                     // TCP Socket Response
 
-// Events
+// EventQueue Declarations
 EventQueue queue(32 * EVENTS_EVENT_SIZE);   // Event Setup
 
-// Tickers
+// Ticker Declarations
 Ticker Ticker_IMU;
+Ticker Ticker_ReadBattery;
 Ticker Ticker_ReceiveCommand;
 
-// Threads
+// Thread Declarations
 Thread Thread_IMU(osPriorityRealtime);
-Thread Thread_ReceiveCommand(osPriorityNormal);
+Thread Thread_ReadBattery(osPriorityRealtime);
+Thread Thread_ReceiveCommand(osPriorityRealtime);
 
 // Global Variables
-uint32_t len = 0;
-uint16_t Time_Data = 0;
+uint16_t LineCount = 0;
+uint32_t Line_Size = 0;
 uint32_t Data_Size = 0;
-uint16_t LineCount = 0;
+
+// Read & Writepointer Declarations
+uint8_t Current_Position = 0;
 volatile uint16_t readPointer = 0;
 volatile uint16_t readPointer_MIC = 0;
 volatile uint16_t writePointer = 0;
 volatile uint16_t writePointer_MIC = 0;
 
+// Flag Declarations
 uint8_t ReadIMUDone_Flag = 0;
 uint8_t CheckCommandDone_Flag = 0;
 
+// Battery Voltage & Power Consumption Declaration
+float Battery_Status = 0;
+float Power_Consumption = 0;
+
+// Time Buffer Declaration
+char Time_Buffer[2];
+uint16_t Time_Data = 0;
 uint8_t Requested_Time = 0;
-uint8_t Current_Position = 0;
-    
-char Time_Buffer[2];
-char Data_Buffer[2048];
-const char DeviceNr[6] = "DEV01";
+
+// Data Storage Declaration
+char Data_Buffer[1024];
+const char DeviceNr[6] = "DEV01";       // Device specific ID
 int16_t Data_Storage[BufferSize];               // BufferSize defined in "event.h"
 uint16_t Data_Storage_MIC[BufferSize_MIC];      // BufferSize_MIC defined in "event.h"
 
@@ -77,40 +90,47 @@
 //-----------------------------------------------------------------
 void Setup()
 {
+    LED_Blue1 = 1;      // Turn OFF all LEDs
+    LED_Blue2 = 1;
+    LED_Red1 = 1;
+    LED_Red2 = 1;
+
     PC.baud(230400);            // Initialize PC Serial Connection
     PC.printf("\r\n------------- Booting! -------------\r\n");
-    PC.printf("CPU SystemCoreClock is %d Hz", SystemCoreClock);
+    PC.printf("CPU SystemCoreClock is %d Hz", SystemCoreClock);     // Show SystemCoreClock Speed
 
     PC.printf("\nConnecting to %s with %s...\n",  WiFi_SSID, WiFi_Pass);
-    int ret = WiFi.connect(WiFi_SSID, WiFi_Pass, NSAPI_SECURITY_WPA_WPA2);
-    if (ret != 0) {
-        printf("\nConnection error\n");
+    int ret = WiFi.connect(WiFi_SSID, WiFi_Pass, NSAPI_SECURITY_WPA_WPA2);      // Connect WiFi
+
+    while (ret != 0) {          // WiFi Connection Not Successful
+        PC.printf("\nConnecting to %s with %s...\n",  WiFi_SSID, WiFi_Pass);
+        ret = WiFi.connect(WiFi_SSID, WiFi_Pass, NSAPI_SECURITY_WPA_WPA2);
+        wait(0.5);
     }
 
-    nsapi_error_t response;
-    Socket_TCP.open(&WiFi);
-    Socket_TCP.set_blocking(false);
-    wait(0.5);
+    printf("Connection Done! - IP: %s\r\n", WiFi.get_ip_address());     // Show IP Address
+    Socket_TCP.open(&WiFi);             // Open TCP_Socket on WiFi
+    Socket_TCP.set_blocking(false);     // Set Non-Blocking Mode
 
-    response = Socket_TCP.connect("192.168.43.96", 8080);
-    while (0 != response) {
-        wait(0.5);
-        response = Socket_TCP.connect("192.168.43.96", 8080);
-    }
-
-
-    // Initialize IMU SPI Connection
+    // Initialize IMU-SPI Connection
     if(imu.init(1, BITS_DLPF_CFG_188HZ))        // Initialize the MPU9250
         PC.printf("\nCouldn't initialize MPU9250 via SPI!");
     PC.printf("\nWHOAMI = 0x%2x", imu.whoami());                        // Output I2C Address to check SPI (correct: 104 - 0x68)
     PC.printf("\nAcc_Scale = %u\n", imu.set_acc_scale(BITS_FS_16G));    // Set Full Range for Acc.
     imu.calib_acc();        // Calibrate Acceleration Sensor
 
-    TimeStamp.reset();  // Reset Timer TimeStamp
+    ReadBattery();          // Read Battery Level
+    TimeStamp.reset();      // Reset Timer TimeStamp
     Thread_ReceiveCommand.start(callback(&queue, &EventQueue::dispatch_forever));       // Start Command-Receiving Thread
-    Ticker_ReceiveCommand.attach(queue.event(&ReceiveCommand), 0.250);                  // Attach 250 ms Ticker to "ReceiveCommand"
+    Ticker_ReceiveCommand.attach(queue.event(&ReceiveCommand), 0.500);                  // Attach 500ms Ticker to "ReceiveCommand"
 
-    led1 = 1;           // Turn ON LED to display 'Ready!'
+    Thread_ReadBattery.start(callback(&queue, &EventQueue::dispatch_forever));          // Start Battery-Reading Thread
+    Ticker_ReadBattery.attach(queue.event(&ReadBattery), 30);                           // Attach 30s Ticker to "ReadBattery"
+    
+    Buzzer = 0;             // Disable Buzzer
+    Buzzer.period(0.001);   // 1kHz Buzzer Frequency
+    
+    LED_Blue1 = 0;          // Turn ON LED to display 'Booting Done!'
     PC.printf("\r\n------------- Ready! ---------------\r\n");
 }
 
@@ -119,8 +139,20 @@
 //-----------------------------------------------------------------
 void Reset()            // Reset All Variables
 {
-    len = 0;
+    Line_Size = 0;
+    Data_Size = 0;
+    LineCount = 0;
+    Time_Data = 0;
+    Requested_Time = 0;
+    Current_Position = 0;
 
+    readPointer = 0;
+    readPointer_MIC = 0;
+    writePointer = 0;
+    writePointer_MIC = 0;
+
+    ReadIMUDone_Flag = 0;
+    CheckCommandDone_Flag = 0;
 
     memset(Data_Storage, 0, sizeof(Data_Storage));
     memset(Data_Storage_MIC, 0, sizeof(Data_Storage_MIC));
@@ -134,53 +166,46 @@
     Setup();    // Initial Setups
 
     while (true) {
-        if ((Requested_Time != 0) && (CheckCommandDone_Flag == 1)) {
-            CheckCommandDone_Flag = 0;
+        if ((Requested_Time != 0) && (CheckCommandDone_Flag == 1)) {        // Check Flag & Requested Time
+            CheckCommandDone_Flag = 0;          // Reset Flag
+            memset(Data_Buffer, 0, sizeof(Data_Buffer));                    // Clear Data_Buffer
 
-            TimeStamp.start();
-            Thread_IMU.start(callback(&queue, &EventQueue::dispatch_forever));      // Start IMU-Reading Thread
-            Ticker_IMU.attach_us(queue.event(&ReadIMU), 1000);                      // Attach 1 ms Ticker to "ReadIMU"
+            TimeStamp.start();                  // Start Timer TimeStamp
+            Thread_IMU.start(callback(&queue, &EventQueue::dispatch_forever));      // Start "ReadIMU" Thread
+            Ticker_IMU.attach_us(queue.event(&ReadIMU), 2000);                      // Attach 2ms Ticker to "ReadIMU"
         }
 
-        while ((writePointer != readPointer) && (writePointer_MIC != readPointer_MIC) && (ReadIMUDone_Flag == 1)) {
-            Testing.start();
-
-            while ((Data_Size + len) < 1024) {
+        while ((writePointer != readPointer) && (writePointer_MIC != readPointer_MIC) && (ReadIMUDone_Flag == 1)) {     // Check Flag & Pointer Position
+            while ((Data_Size + Line_Size) < 1024) {        // Check Maximum Package Size
                 if ((writePointer != readPointer) && (writePointer_MIC != readPointer_MIC)) {
                     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++]);
-                    len = 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]);
+                    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]);
                 } else
                     break;
             }
 
-            PC.printf("Package Size: %d\n", Data_Size);
-            Socket_TCP.send(Data_Buffer, Data_Size);
-
-            memset(Data_Buffer, 0, sizeof(Data_Buffer));
-            PC.printf("Time: %d\n\n\n", Testing.read_ms());
+            response = Socket_TCP.send(Data_Buffer, Data_Size);        // Send Data via TCP_Socket
+            while (response != Data_Size)                              // Sending Not Successful
+                response = Socket_TCP.send(Data_Buffer, Data_Size);    // Resend Data via TCP_Socket
+                
+            Data_Size = 0;      // Reset Data_Size
+            memset(Data_Buffer, 0, sizeof(Data_Buffer));    // Clear Data_Buffer
+            wait(0.1);          // Wait 100ms between Packages for ESP8266 Module
 
-            
-            Data_Size = 0;
-            wait(0.1);
-            Testing.stop();
-            Testing.reset();
+            if ((readPointer == writePointer) && (writePointer_MIC == readPointer_MIC)) {       // Check if Readpointer reached Writepointer Position
+                ReadIMUDone_Flag = 0;           // Reset Flag for Sending
+                PC.printf("Sending Done! - Time Taken: %d ms\n\n", TimeStamp.read_ms());        // Show Time used for Data Sending
+                TimeStamp.stop();           // Stop Timer TimeStamp
+                TimeStamp.reset();          // Reset Timer TimeStamp
 
-            if ((readPointer == writePointer) && (writePointer_MIC == readPointer_MIC)) {
-                ReadIMUDone_Flag = 0;
-                PC.printf("Sending Done! - Time Taken: %d ms", TimeStamp.read_ms());
-                TimeStamp.stop();
-                TimeStamp.reset();
+                Reset();        // Reset All Variables
+                Thread_ReceiveCommand.start(callback(&queue, &EventQueue::dispatch_forever));       // Start "ReceiveCommand" Thread
+                Ticker_ReceiveCommand.attach(queue.event(&ReceiveCommand), 0.500);                  // Attach 500ms Ticker to "ReceiveCommand"
 
-                Reset();
-                Thread_ReceiveCommand.start(callback(&queue, &EventQueue::dispatch_forever));       // Start Command-Receiving Thread
-                Ticker_ReceiveCommand.attach(queue.event(&ReceiveCommand), 0.250);                  // Attach 250 ms Ticker to "ReceiveCommand
+                Thread_ReadBattery.start(callback(&queue, &EventQueue::dispatch_forever));       // Start "ReadBattery"
+                Ticker_ReadBattery.attach(queue.event(&ReadBattery), 30);                        // Attach 30s Ticker to "ReadBattery"
             }
         }
-
-        /*    sprintf(Data_Buffer, "%d;%d;%d;", (int)(1000*imu.accelerometer_data[0]), (int)(1000*imu.accelerometer_data[1]), (int)(1000*imu.accelerometer_data[2]));
-        Socket_TCP.send(Data_Buffer, strlen(Data_Buffer));
-        memset(Data_Buffer, 0, sizeof(Data_Buffer));*/
-
     }
 }