Los Putacos / Mbed OS WearableDevice_Nucleo_New

Dependencies:   MPU9250_SPI

Fork of WearableDevice_Nucleo by Los Putacos

Files at this revision

API Documentation at this revision

Comitter:
Muglug
Date:
Fri Feb 16 18:30:19 2018 +0000
Parent:
28:c7e977a19564
Commit message:
Final Version

Changed in this revision

configuration.h Show annotated file Show diff for this revision Revisions of this file
esp8266-driver.lib Show annotated file Show diff for this revision Revisions of this file
event.cpp Show annotated file Show diff for this revision Revisions of this file
event.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
--- a/configuration.h	Tue Dec 19 10:15:19 2017 +0000
+++ b/configuration.h	Fri Feb 16 18:30:19 2018 +0000
@@ -13,7 +13,6 @@
 #define CONFIGURATION_H_
 
 // Microcontroller definition - Comment the Version not used
-// #define STM32F401RET6 1
 #define STM32F446RET6 1
 
 // Debug mode
@@ -22,44 +21,37 @@
 
 //-----------------------------------------------------------------
 // PIN Defines
-#ifdef STM32F401RET6
-    #define RADIO_TX PA_11
-    #define RADIO_RX PA_12
-    #define RADIO_RESET NC
-    
-    #define SD_CLK PC_10
-    #define SD_MISO PC_11
-    #define SD_MOSI PC_12
-    #define SD_CS PD_2
-    
-    //Analog Input
-    AnalogIn   micro(A0);
-    //Digital Input
-    DigitalOut led1(LED1);
-#endif
-
 #ifdef STM32F446RET6
+    // Wifi SSID & Password
     #define WiFi_SSID "OnePlus3"
     #define WiFi_Pass "mahandi00"
 
+    // ESP8266 Communication Variables
     #define ESP_TX PC_6
     #define ESP_RX PC_7
-    
-    // #define SD_CLK PC_10
-    // #define SD_MISO PC_11
-    // #define SD_MOSI PC_12
-    // #define SD_CS PD_2
-    // #define SD_CD PC_0
         
+    // IMU Variables
     #define IMU_SCK PB_13
     #define IMU_MISO PB_14      // SDO - Serial Data Output - MISO
     #define IMU_MOSI PB_15      // SDI - Serial Data Input - MOSI
     #define IMU_CS PB_1
     
+    // Buzzer PWM Output
+    PwmOut Buzzer(PB_4);
+    
+    // Voltage & Current Sensor
+    AnalogIn VSense(PA_5);
+    AnalogIn ISense(PA_6);
+    
     //Analog Input
-    AnalogIn micro(PC_4);
-    //Digital Input
-    DigitalOut led1(LED1);
+    AnalogIn Micro_1(PC_4);
+    AnalogIn Micro_2(PC_0);
+    
+    //Digital Output
+    DigitalOut LED_Blue1(PC_10);
+    DigitalOut LED_Blue2(PC_11);
+    DigitalOut LED_Red1(PC_12);
+    DigitalOut LED_Red2(PD_2);
 #endif
 
 #endif // CONFIGURATION_H_
--- a/esp8266-driver.lib	Tue Dec 19 10:15:19 2017 +0000
+++ b/esp8266-driver.lib	Fri Feb 16 18:30:19 2018 +0000
@@ -1,1 +1,1 @@
-https://github.com/armmbed/esp8266-driver/#a7245780485c4743f4905dfeacf01749fa398617
+https://github.com/armmbed/esp8266-driver/#b93fee9e6cb1659b074ae2283d52dd623cbb4e56
--- a/event.cpp	Tue Dec 19 10:15:19 2017 +0000
+++ b/event.cpp	Fri Feb 16 18:30:19 2018 +0000
@@ -12,25 +12,52 @@
 //-----------------------------------------------------------------
 // Includes
 #include "event.h"
+
+//-----------------------------------------------------------------
+
+//-----------------------------------------------------------------
+void ReadBattery(void)
+{
+    Battery_Status = VSense.read()/0.21 - 3;        // Read Voltage Level above Critial Value (> 3V)
+    Power_Consumption = ISense.read() * 3.3;        // Read Current Level and calculate Power_Consumption
+    PC.printf("Battery_Status = %.3fV - %.3fmW\n", Battery_Status + 3, Power_Consumption);      // Show Total Voltage Level
+
+    if (Battery_Status > 1) {   // More than 1V Voltage Difference
+        LED_Red1 = 0;           // Turn ON both Red LEDs
+        LED_Red2 = 0;
+    } else if ((Battery_Status > 0.25) && (Battery_Status < 1)) {       // Between 0.25V and 1V Voltage Difference
+        LED_Red1 = 0;       // Turn ON one Red LEDs
+        LED_Red2 = 1;
+    } else {
+        LED_Red1 = 1;       // Turn off both Red LEDs
+        LED_Red2 = 1;
+    }
+}
 //-----------------------------------------------------------------
 
 //-----------------------------------------------------------------
 void ReceiveCommand(void)
 {
-    if (Socket_TCP.recv(Data_Buffer, sizeof Data_Buffer) > 0) {
-        PC.printf("Socket Data Received! - %s\n", Data_Buffer);
+    response = Socket_TCP.connect("192.168.43.96", 8080);       // Connect to TCP Server at 192.168.43.96/8080
 
-        if (strlen(Data_Buffer) == 9) {         // Check Package Length (correct: len = 9)
-            if ((Data_Buffer[0] == '#') && (Data_Buffer[6] == ',')) {       // Check for "#" and "," at specific Positions
-                if (strstr(Data_Buffer, DeviceNr) != NULL) {                // Check for valid DeviceNr in Package
-                    Time_Buffer[0] = Data_Buffer[7];
-                    Time_Buffer[1] = Data_Buffer[8];
-                    Requested_Time = atoi(Time_Buffer);                     // Requested Time by received Package
-
-                    CheckCommandDone_Flag = 1;
-                    PC.printf("Requested Time: %d\n", Requested_Time);
-                    memset(Data_Buffer, 0, sizeof(Data_Buffer));            // Clear Data_Buffer
-                    Ticker_ReceiveCommand.detach();
+    if (0 == response) {            // Server Available & Connection Successful
+        if (Socket_TCP.recv(Data_Buffer, sizeof Data_Buffer) > 0) {         // TCP Socket Data Available
+            if (strlen(Data_Buffer) == 9) {                                 // Check Package Length (correct: len = 9)
+                if ((Data_Buffer[0] == '#') && (Data_Buffer[6] == ',')) {       // Check for "#" and "," at specific Positions
+                    if (strstr(Data_Buffer, DeviceNr) != NULL) {                // Check for valid DeviceNr in Package
+                        Ticker_ReadBattery.detach();            // Stop "ReadBattery" Thread                    
+                        Ticker_ReceiveCommand.detach();         // Stop "ReceiveCommand" Thread
+                        
+                        Time_Buffer[0] = Data_Buffer[7];        // Read 1st Time Byte from Buffer
+                        Time_Buffer[1] = Data_Buffer[8];        // Read 2nd Time Byte from Buffer
+                        Requested_Time = atoi(Time_Buffer);     // Requested Time by Command
+                        
+                        PC.printf("\nCommand Received - Requested Time: %d\n", Requested_Time);
+                        Buzzer = 0.5;       // Enable Buzzer at 50% DutyCycle
+                        wait(0.5);          // Pause for Buzzing
+                        Buzzer = 0;         // Disable Buzzer
+                        CheckCommandDone_Flag = 1;              // Set Flag for Measurement Start
+                    }
                 }
             }
         }
@@ -44,21 +71,20 @@
     Time_Data = TimeStamp.read_ms();        // Read TimeStamp Data
 
     if (Time_Data <= Requested_Time * 1000) {       // Check Time Elapsed
-        imu.read_acc();
+        imu.read_acc();         // Read Accelerometer Data
 
-        Data_Storage_MIC[writePointer_MIC++] = micro.read_u16();    // Store Microphone Data
-        Data_Storage[writePointer++] = imu.accelerometer_data[2];   // Store Z-Axis Accelerometer Data
-        Data_Storage[writePointer++] = imu.accelerometer_data[1];   // Store Y-Axis Accelerometer Data
-        Data_Storage[writePointer++] = imu.accelerometer_data[0];   // Store X-Axis Accelerometer Data
-        Data_Storage[writePointer++] = Time_Data;                   // Store Time Data
+        Data_Storage_MIC[writePointer_MIC++] = Micro_1.read_u16();      // Store Microphone Data
+        Data_Storage[writePointer++] = imu.accelerometer_data[2];       // Store Z-Axis Accelerometer Data
+        Data_Storage[writePointer++] = imu.accelerometer_data[1];       // Store Y-Axis Accelerometer Data
+        Data_Storage[writePointer++] = imu.accelerometer_data[0];       // Store X-Axis Accelerometer Data
+        Data_Storage[writePointer++] = Time_Data;                       // Store Time Data
     } else {
-        Ticker_IMU.detach();        // Detach Timer to Stop "ReadIMU"
+        Ticker_IMU.detach();        // Stop "ReadIMU" Thread
         TimeStamp.stop();           // Stop TimeStamp
         TimeStamp.reset();          // Reset TimeStamp
 
-        TimeStamp.start();
-        ReadIMUDone_Flag = 1;
-        PC.printf("Measurement Done!\n");
+        TimeStamp.start();          // Start TimeStamp
+        ReadIMUDone_Flag = 1;       // Set Flag for Sending Start
     }
 }
 //-----------------------------------------------------------------
--- a/event.h	Tue Dec 19 10:15:19 2017 +0000
+++ b/event.h	Fri Feb 16 18:30:19 2018 +0000
@@ -17,24 +17,43 @@
 //-----------------------------------------------------------------
 #ifndef EVENT_H_
 #define EVENT_H_
-#define BufferSize 40000
-#define BufferSize_MIC 10000
-#define SampleRate 1000             // Define Sample Rate in Hz
+#define BufferSize 20000
+#define BufferSize_MIC 5000
+#define SampleRate 500             // Define Sample Rate in Hz
 
 // Declarations
-extern TCPSocket Socket_TCP;
+extern Serial PC;
 extern Timer TimeStamp;
 extern mpu9250_spi imu;
-extern AnalogIn micro;
-extern Serial PC;
+extern TCPSocket Socket_TCP;
+extern nsapi_error_t response;
+
+// Battery Voltage & Power Consumption Declaration
+extern float Battery_Status;
+extern float Power_Consumption;
 
-// Read & Writepointers
+// Analog Microphone/Current/Voltage Inputs
+extern AnalogIn VSense;
+extern AnalogIn ISense;
+extern AnalogIn Micro_1;
+extern AnalogIn Micro_2;
+
+// Buzzer PWM Output
+extern PwmOut Buzzer;
+
+// Digital LED Outputs
+extern DigitalOut LED_Blue1;
+extern DigitalOut LED_Blue2;
+extern DigitalOut LED_Red1;
+extern DigitalOut LED_Red2;
+
+// Writepointers
 extern volatile uint16_t writePointer;
 extern volatile uint16_t writePointer_MIC;
 
 // Data Storage Buffers
 extern char Time_Buffer[2];
-extern char Data_Buffer[2048];
+extern char Data_Buffer[1024];
 extern const char DeviceNr[6];
 extern int16_t Data_Storage[BufferSize];
 extern uint16_t Data_Storage_MIC[BufferSize_MIC];
@@ -47,14 +66,22 @@
 extern uint16_t Time_Data;
 extern uint8_t Requested_Time;
 
-// Ticker Declaration
+// EventQueue Declaration
+extern EventQueue queue;
+
+// Thread Declaration
 extern Thread Thread_IMU;
-extern EventQueue queue;
+extern Thread Thread_ReadBattery;
+extern Thread Thread_ReceiveCommand;
+
+// Ticker Declaration
 extern Ticker Ticker_IMU;
+extern Ticker Ticker_ReadBattery;
 extern Ticker Ticker_ReceiveCommand;
 
 // Function Declarations
 void ReadIMU(void);
+void ReadBattery(void);
 void ReceiveCommand(void);
 
 #endif // EVENT_H_
--- 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));*/
-
     }
 }
 
--- a/mbed-os.lib	Tue Dec 19 10:15:19 2017 +0000
+++ b/mbed-os.lib	Fri Feb 16 18:30:19 2018 +0000
@@ -1,1 +1,1 @@
-https://github.com/ARMmbed/mbed-os/#182bbd51bc8d1b6217477c2b5de3f1d0c5e6249f
+https://github.com/ARMmbed/mbed-os/#eca67ca7dafab4ef70c21e2463b541132d0dd691