Los Putacos / Mbed OS WearableDevice_Nucleo_New

Dependencies:   MPU9250_SPI

Fork of WearableDevice_Nucleo by Los Putacos

Committer:
Muglug
Date:
Fri Oct 27 09:59:32 2017 +0000
Revision:
24:eed68c95160c
Parent:
23:aad5fd1b3ef9
Child:
25:86137c182a17
Working IMU + Timer.

Who changed what in which revision?

UserRevisionLine numberNew 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
gusteibolt 1:a6dc717fb060 7 * Date: 11-Oct-2017
gusteibolt 1:a6dc717fb060 8 * Version: V0.1
gusteibolt 1:a6dc717fb060 9 */
Muglug 23:aad5fd1b3ef9 10 //-----------------------------------------------------------------
gusteibolt 1:a6dc717fb060 11
gusteibolt 1:a6dc717fb060 12 //-----------------------------------------------------------------
gusteibolt 1:a6dc717fb060 13 // Board: NUCLEO - F401RE
gusteibolt 1:a6dc717fb060 14 // Version: MR1136 rev C
gusteibolt 1:a6dc717fb060 15 //-----------------------------------------------------------------
gusteibolt 1:a6dc717fb060 16
gusteibolt 1:a6dc717fb060 17 //-----------------------------------------------------------------
gusteibolt 1:a6dc717fb060 18 // Includes
gusteibolt 0:73cd0cb02330 19 #include "mbed.h"
Muglug 24:eed68c95160c 20 // #include "rtos.h"
Muglug 24:eed68c95160c 21 // #include "mbed_events.h"
Muglug 24:eed68c95160c 22
Muglug 23:aad5fd1b3ef9 23 #include "configuration.h"
Muglug 23:aad5fd1b3ef9 24 #include "pin.h"
gusteibolt 3:26aeff25f610 25
Muglug 17:f98597cd2efc 26 #include "XBeeLib.h"
Muglug 19:0a3ae902722e 27 #include "SDFileSystem.h"
Muglug 24:eed68c95160c 28 #include "MPU9250.h"
Muglug 24:eed68c95160c 29
Muglug 24:eed68c95160c 30 #include "event.h"
gusteibolt 1:a6dc717fb060 31 //-----------------------------------------------------------------
gusteibolt 0:73cd0cb02330 32
gusteibolt 1:a6dc717fb060 33 //-----------------------------------------------------------------
gusteibolt 1:a6dc717fb060 34 // Declarations
Muglug 24:eed68c95160c 35 Timer time_stamp; //Timer µS time-stamp
Muglug 18:7f9c2b8541e1 36 EventQueue queue(32 * EVENTS_EVENT_SIZE); //Event
Muglug 23:aad5fd1b3ef9 37 const char DeviceNr[6] = "DEV01";
Muglug 24:eed68c95160c 38 char Data_Buffer[10] = "";
Muglug 24:eed68c95160c 39 // uint16_t data_len;
gusteibolt 3:26aeff25f610 40
Muglug 23:aad5fd1b3ef9 41 // PC Serial (Debug)
Muglug 23:aad5fd1b3ef9 42 Serial PC(USBTX, USBRX);
Muglug 23:aad5fd1b3ef9 43 XBeeLib::XBeeZB XBee = XBeeLib::XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET, NC, NC, 115200);
Muglug 24:eed68c95160c 44
Muglug 23:aad5fd1b3ef9 45 int task1_id = queue.call_every(200, CheckInputBuffer);
Muglug 24:eed68c95160c 46 int task2_id = queue.call_every(100, ReadIMUData);
gusteibolt 3:26aeff25f610 47
Muglug 23:aad5fd1b3ef9 48 // Create an SDFileSystem object
Muglug 24:eed68c95160c 49 SDFileSystem sd(SD_MOSI, SD_MISO, SD_CLK, SD_CS, "sd");
Muglug 24:eed68c95160c 50 // Create an MPU9250 object
Muglug 24:eed68c95160c 51 SPI spi(MPU_MOSI, MPU_MISO, MPU_SCK);
Muglug 24:eed68c95160c 52 mpu9250_spi imu(spi, MPU_CS);
Muglug 23:aad5fd1b3ef9 53
gusteibolt 1:a6dc717fb060 54 //-----------------------------------------------------------------
gusteibolt 1:a6dc717fb060 55
gusteibolt 1:a6dc717fb060 56 //-----------------------------------------------------------------
Muglug 23:aad5fd1b3ef9 57 /* Callback function, invoked at packet reception */
Muglug 23:aad5fd1b3ef9 58 static void receive_cb(const XBeeLib::RemoteXBeeZB& remote, bool broadcast, const uint8_t *const data, uint16_t len)
Muglug 23:aad5fd1b3ef9 59 {
Muglug 23:aad5fd1b3ef9 60 PC.printf("Package Length: %i \r\n", len);
Muglug 23:aad5fd1b3ef9 61 for (int i = 0; i < len; i++) {
Muglug 23:aad5fd1b3ef9 62 Data_Buffer[i] = char(data[i]);
Muglug 23:aad5fd1b3ef9 63 PC.printf("%c", Data_Buffer[i]);
Muglug 23:aad5fd1b3ef9 64 }
Muglug 24:eed68c95160c 65
Muglug 24:eed68c95160c 66 if (len == 9) {
Muglug 24:eed68c95160c 67 if ((char(Data_Buffer[0]) == '#') && (char(Data_Buffer[6]) == ',')) {
Muglug 23:aad5fd1b3ef9 68 PC.printf(" - Command Detected!\r\n");
Muglug 24:eed68c95160c 69
Muglug 23:aad5fd1b3ef9 70 if (strstr(Data_Buffer, DeviceNr) != NULL)
Muglug 23:aad5fd1b3ef9 71 PC.printf("Correct Package ID!\r\n");
Muglug 23:aad5fd1b3ef9 72 else
Muglug 23:aad5fd1b3ef9 73 PC.printf("Wrong Package ID!\r\n");
Muglug 24:eed68c95160c 74 } else
Muglug 23:aad5fd1b3ef9 75 PC.printf(" - Non-valid Command Delimiter!\r\n");
Muglug 24:eed68c95160c 76 } else
Muglug 23:aad5fd1b3ef9 77 PC.printf(" - Non-valid Package Length!\r\n");
gusteibolt 8:ba93a973f967 78 }
gusteibolt 8:ba93a973f967 79 //-----------------------------------------------------------------
gusteibolt 8:ba93a973f967 80
gusteibolt 8:ba93a973f967 81 //-----------------------------------------------------------------
Muglug 18:7f9c2b8541e1 82 void Setup()
Muglug 18:7f9c2b8541e1 83 {
Muglug 18:7f9c2b8541e1 84 PC.baud(9600);
Muglug 24:eed68c95160c 85 PC.printf("\r\n------------- Booting! -------------\r\n");
Muglug 23:aad5fd1b3ef9 86 PC.printf("CPU SystemCoreClock is %d Hz", SystemCoreClock);
Muglug 18:7f9c2b8541e1 87
Muglug 23:aad5fd1b3ef9 88 XBee.init();
Muglug 24:eed68c95160c 89 XBee.register_receive_cb(&receive_cb); // Register Callbacks
Muglug 23:aad5fd1b3ef9 90 // time_stamp.start(); // Start Timer
Muglug 18:7f9c2b8541e1 91
Muglug 24:eed68c95160c 92 if(imu.init(1, BITS_DLPF_CFG_188HZ)){ // Initialize the MPU9250
Muglug 24:eed68c95160c 93 PC.printf("\nCouldn't initialize MPU9250 via SPI!");
Muglug 24:eed68c95160c 94 }
Muglug 24:eed68c95160c 95 PC.printf("\nWHOAMI = 0x%2x", imu.whoami()); // Output I2C address to know if SPI is working, it should be 104
Muglug 24:eed68c95160c 96 PC.printf("\nAcc_Scale = %u\n", imu.set_acc_scale(BITS_FS_16G)); // Set Full Range for Acc.
Muglug 24:eed68c95160c 97
gusteibolt 3:26aeff25f610 98 // Task queue
Muglug 23:aad5fd1b3ef9 99 // int task1_id = queue.call_every(200, CheckInputBuffer);
Muglug 23:aad5fd1b3ef9 100 // int task2_id = queue.call_every(50, ReadIMUData);
Muglug 18:7f9c2b8541e1 101 // int task3_id = queue.call_every(3000, &print_event, (void *)"called every 3 seconds\n", (int) time_stamp.read());
Muglug 18:7f9c2b8541e1 102 // int task4_id = queue.call_every(50, blink_event, led1);
Muglug 18:7f9c2b8541e1 103 // int task5_id = queue.call_every(500, println_event);
Muglug 18:7f9c2b8541e1 104 // int task6_id = queue.call_every(500, readIMU);
Muglug 18:7f9c2b8541e1 105 // int task7_id = queue.call_every(500, gayEvent);
gusteibolt 0:73cd0cb02330 106 }
Mister_Lopez 4:56e903769e94 107
Muglug 23:aad5fd1b3ef9 108 void SDTest()
Muglug 19:0a3ae902722e 109 {
Muglug 23:aad5fd1b3ef9 110 mkdir("/sd/Log", 0777);
Muglug 24:eed68c95160c 111
Muglug 23:aad5fd1b3ef9 112 FILE *fp = fopen("/sd/Log/Data_Log.txt", "w");
Muglug 23:aad5fd1b3ef9 113 if(fp == NULL) {
Muglug 23:aad5fd1b3ef9 114 error("File Writing Failed!\n");
Muglug 23:aad5fd1b3ef9 115 }
Muglug 24:eed68c95160c 116 fprintf(fp, "12345");
Muglug 24:eed68c95160c 117 fclose(fp);
Muglug 24:eed68c95160c 118
Muglug 24:eed68c95160c 119 fp = fopen("/sd/Log/Data_Log.txt", "r"); // open the file in 'read' mode
Muglug 24:eed68c95160c 120
Muglug 24:eed68c95160c 121 PC.printf("\nRead from file: ");
Muglug 24:eed68c95160c 122 while (!feof(fp)) { // While Not End-Of-File
Muglug 24:eed68c95160c 123 fread((char*) Data_Buffer, 1, 100, fp);
Muglug 24:eed68c95160c 124 }
Muglug 24:eed68c95160c 125 PC.printf("\r\n");
Muglug 24:eed68c95160c 126 fclose(fp);
Muglug 24:eed68c95160c 127
Muglug 24:eed68c95160c 128 // data_len = sizeof(Data_Buffer); // / sizeof Data_Buffer[0] - 1;
Muglug 24:eed68c95160c 129
Muglug 24:eed68c95160c 130 XBeeLib::TxStatus txStatus = XBee.send_data_to_coordinator((uint8_t*) Data_Buffer, sizeof(Data_Buffer));
Muglug 24:eed68c95160c 131 if (txStatus != XBeeLib::TxStatusSuccess)
Muglug 24:eed68c95160c 132 PC.printf("send_data_to_coordinator() failed with error %d\n", (int) txStatus);
Muglug 24:eed68c95160c 133
Muglug 24:eed68c95160c 134 PC.printf("SD Test Successful!\n");
Muglug 23:aad5fd1b3ef9 135 }
Muglug 19:0a3ae902722e 136
Muglug 23:aad5fd1b3ef9 137 //-----------------------------------------------------------------
Muglug 18:7f9c2b8541e1 138
Mister_Lopez 4:56e903769e94 139 //-----------------------------------------------------------------
gusteibolt 0:73cd0cb02330 140 int main()
gusteibolt 0:73cd0cb02330 141 {
Muglug 18:7f9c2b8541e1 142 Setup(); // Initial Setups
Muglug 18:7f9c2b8541e1 143
Muglug 23:aad5fd1b3ef9 144 led1 = 1;
Muglug 24:eed68c95160c 145 PC.printf("\r\n-------------- Ready! --------------\r\n");
Muglug 23:aad5fd1b3ef9 146 SDTest();
Muglug 24:eed68c95160c 147
Muglug 24:eed68c95160c 148 time_stamp.reset();
Muglug 24:eed68c95160c 149 time_stamp.start();
Muglug 24:eed68c95160c 150 queue.dispatch();
Muglug 23:aad5fd1b3ef9 151 while (true) {
Muglug 24:eed68c95160c 152
Muglug 24:eed68c95160c 153
Muglug 19:0a3ae902722e 154 }
gusteibolt 0:73cd0cb02330 155 }
Muglug 18:7f9c2b8541e1 156 //-----------------------------------------------------------------