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
Diff: main.cpp
- Revision:
- 27:c4b2ce6fa5b8
- Parent:
- 26:4bc56ce08d15
- Child:
- 28:c7e977a19564
--- a/main.cpp Wed Nov 08 10:59:01 2017 +0000
+++ b/main.cpp Sun Nov 12 14:54:49 2017 +0000
@@ -50,19 +50,22 @@
// Global Variables
uint16_t Time_Data = 0;
-uint32_t File_Size = 0;
+uint32_t Data_Size = 0;
+uint16_t LineCount = 0;
volatile uint16_t readPointer = 0;
volatile uint16_t readPointer_MIC = 0;
volatile uint16_t writePointer = 0;
volatile uint16_t writePointer_MIC = 0;
-uint8_t ReadIMU_Flag = 0;
-uint8_t WriteSD_Flag = 0;
+uint8_t ReadIMUDone_Flag = 0;
+uint8_t WriteSDDone_Flag = 0;
+uint8_t SendXBeeDone_Flag = 0;
+
uint8_t Requested_Time = 0;
uint8_t Current_Position = 0;
char Time_Buffer[2];
-char Data_Buffer[500];
+char Data_Buffer[255];
const char DeviceNr[6] = "DEV01";
int16_t Data_Storage[BufferSize]; // BufferSize defined in "event.h"
uint16_t Data_Storage_MIC[BufferSize_MIC]; // BufferSize_MIC defined in "event.h"
@@ -73,8 +76,6 @@
/* Callback function, invoked at packet reception */
static void receive_cb(const XBeeLib::RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
{
- memset(Data_Buffer, 0, sizeof(Data_Buffer)); // Clear Data_Buffer
- memset(Time_Buffer, 0, sizeof(Time_Buffer)); // Clear Time_Buffer
PC.printf("Package Length: %i \r\n", len); // Display Package Length
for (int i = 0; i < len; i++) {
Data_Buffer[i] = char(data[i]);
@@ -87,14 +88,13 @@
if (strstr(Data_Buffer, DeviceNr) != NULL) { // Check for valid DeviceNr in Package
PC.printf("Correct Package ID!");
- fp = fopen("/sd/Log/Data_Log.txt", "w"); // Create & Open "Data_Log.txt" File
- setvbuf(fp, NULL, _IONBF, 0);
- fprintf(fp, "Time; Mic; AccX; AccY; AccZ\n"); // Write Header into File
Current_Position = (uint8_t)(strchr(Data_Buffer, ',') - Data_Buffer);
Time_Buffer[0] = Data_Buffer[Current_Position + 1];
Time_Buffer[1] = Data_Buffer[Current_Position + 2];
Requested_Time = atoi(Time_Buffer); // Requested Time by received Package
+ memset(Data_Buffer, 0, sizeof(Data_Buffer)); // Clear Data_Buffer
+
PC.printf(" - Time: %d\n", Requested_Time); // Display Requested Time
PC.printf("------------------------------------\r\n");
Ticker_ReceiveXBee.detach();
@@ -172,61 +172,91 @@
//-----------------------------------------------------------------
//-----------------------------------------------------------------
+void Reset() // Reset All Variables
+{
+ Time_Data = 0;
+ Data_Size = 0;
+ LineCount = 0;
+
+ readPointer = 0;
+ readPointer_MIC = 0;
+ writePointer = 0;
+ writePointer_MIC = 0;
+
+ ReadIMUDone_Flag = 0;
+ WriteSDDone_Flag = 0;
+ SendXBeeDone_Flag = 0;
+
+ Requested_Time = 0;
+ Current_Position = 0;
+
+ memset(Time_Buffer, 0, sizeof(Time_Buffer));
+ memset(Data_Buffer, 0, sizeof(Data_Buffer));
+ memset(Data_Storage, 0, sizeof(Data_Storage));
+ memset(Data_Storage_MIC, 0, sizeof(Data_Storage_MIC));
+}
+//-----------------------------------------------------------------
+
+//-----------------------------------------------------------------
int main()
{
Setup(); // Initial Setups
while (true) {
- while ((writePointer != readPointer) && (writePointer_MIC != readPointer_MIC) && (ReadIMU_Flag == 1)) {
- fprintf(fp, "%d;%d;%d;%d;%d\n", Data_Storage[readPointer++], Data_Storage_MIC[readPointer_MIC++], Data_Storage[readPointer++], Data_Storage[readPointer++], Data_Storage[readPointer++]);
- WriteSD_Flag = 1;
+ while ((writePointer != readPointer) && (writePointer_MIC != readPointer_MIC) && (ReadIMUDone_Flag == 1)) {
+ if (((Requested_Time * 1000) - LineCount) >= 8) {
+ for (int i = 0; i < 8; i++) {
+ 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++]);
+ LineCount++;
+ }
+
+ txStatus = XBee.send_data_to_coordinator((const uint8_t *) Data_Buffer, Data_Size);
+ if (txStatus != XBeeLib::TxStatusSuccess)
+ PC.printf("send_data_to_coordinator() failed with error %d\n", (int) txStatus);
+ } else {
+ for (int i = 0; i < ((Requested_Time * 1000) - LineCount); i++) {
+ 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++]);
+ LineCount++;
+ }
+
+ txStatus = XBee.send_data_to_coordinator((const uint8_t *) Data_Buffer, Data_Size);
+ if (txStatus != XBeeLib::TxStatusSuccess)
+ PC.printf("send_data_to_coordinator() failed with error %d\n", (int) txStatus);
+ }
+
+ Data_Size = 0;
+ memset(Data_Buffer, 0, sizeof(Data_Buffer)); // Clear Data_Buffer
}
- if ((readPointer == writePointer) && (writePointer_MIC == readPointer_MIC) && (WriteSD_Flag == 1)) {
- fclose(fp);
- PC.printf(" Done!\nWP: %d - RP: %d\n", writePointer + writePointer_MIC, readPointer + readPointer_MIC);
+ if ((LineCount >= (Requested_Time * 1000)) && (ReadIMUDone_Flag == 1)) {
+ PC.printf(" Done! - Time taken: %d ms\n", TimeStamp.read_ms());
+ TimeStamp.stop();
readPointer = 0;
readPointer_MIC = 0;
- writePointer = 0;
- writePointer_MIC = 0;
+ SendXBeeDone_Flag = 1;
- ReadIMU_Flag = 0;
- WriteSD_Flag = 0;
- memset(Data_Storage, 0, sizeof(Data_Storage));
- memset(Data_Storage_MIC, 0, sizeof(Data_Storage_MIC));
- memset(Data_Buffer, 0, sizeof(Data_Buffer));
-
- fp = fopen("/sd/Log/Data_Log.txt", "r");
- fseek(fp, 0, SEEK_END); // Go to End-Of-File
- File_Size = ftell(fp); // Read File Size
- PC.printf("Sending Data ...");
- rewind(fp);
+ PC.printf("Writing SD-Card ...");
+ fp = fopen("/sd/Log/Data_Log.txt", "w"); // Create & Open "Data_Log.txt" File
+ setvbuf(fp, NULL, _IONBF, 0); // Set SD-Buffer to "0"
+ fprintf(fp, "Time; Mic; AccX; AccY; AccZ#\n"); // Write Header into File
+ TimeStamp.reset();
TimeStamp.start();
}
- while (File_Size) {
- if (File_Size >= 250) {
- fread(Data_Buffer, 250, 1, fp); // Read Data into Buffer
-
- txStatus = XBee.send_data_to_coordinator((const uint8_t *) Data_Buffer, 250);
- if (txStatus != XBeeLib::TxStatusSuccess)
- PC.printf("send_data_to_coordinator() failed with error %d\n", (int) txStatus);
- File_Size = File_Size - 250;
- } else {
- fread(Data_Buffer, File_Size, 1, fp); // Read Data into Buffer
+ while ((writePointer != readPointer) && (writePointer_MIC != readPointer_MIC) && (SendXBeeDone_Flag == 1)) {
+ fprintf(fp, "%d;%d;%d;%d;%d#\n", Data_Storage[readPointer++], Data_Storage_MIC[readPointer_MIC++], Data_Storage[readPointer++], Data_Storage[readPointer++], Data_Storage[readPointer++]);
+ WriteSDDone_Flag = 1;
+ }
- txStatus = XBee.send_data_to_coordinator((const uint8_t *) Data_Buffer, File_Size);
- if (txStatus != XBeeLib::TxStatusSuccess)
- PC.printf("send_data_to_coordinator() failed with error %d\n", (int) txStatus);
- File_Size = 0;
-
- PC.printf(" Done!\n");
- PC.printf("------------------------------------\r\n");
- Ticker_ReceiveXBee.attach(queue.event(&ReceiveXBee), 0.5);
- PC.printf("Time taken: %d", TimeStamp.read_ms());
- TimeStamp.stop();
- }
+ if ((readPointer == writePointer) && (writePointer_MIC == readPointer_MIC) && (WriteSDDone_Flag == 1)) {
+ fclose(fp);
+ PC.printf(" Done! - Time taken: %d ms\n", TimeStamp.read_ms());
+ PC.printf("------------------------------------\r\n");
+ TimeStamp.stop();
+
+ Reset(); // Reset All Variables
+ Ticker_ReceiveXBee.attach(queue.event(&ReceiveXBee), 0.5);
}
}
}
