Nelson Santos / Mbed 2 deprecated trabalho

Dependencies:   X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed

Committer:
Jacinta
Date:
Fri May 13 18:03:08 2016 +0000
Revision:
0:1eaebb55408a
Child:
2:0b8065489409
.....

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jacinta 0:1eaebb55408a 1 /**
Jacinta 0:1eaebb55408a 2 ******************************************************************************
Jacinta 0:1eaebb55408a 3 * @file main.cpp
Jacinta 0:1eaebb55408a 4 * @author ANG Group (Nelson Santos; Irina Baptista; Pierluigi Urru)
Jacinta 0:1eaebb55408a 5 * @version V0.0.1
Jacinta 0:1eaebb55408a 6 * @date 05-May-2016
Jacinta 0:1eaebb55408a 7 * @brief Simple Example application for using the X_NUCLEO_IKS01A1
Jacinta 0:1eaebb55408a 8 * MEMS Inertial & Environmental Sensor Nucleo expansion board.
Jacinta 0:1eaebb55408a 9 ******************************************************************************
Jacinta 0:1eaebb55408a 10 */
Jacinta 0:1eaebb55408a 11
Jacinta 0:1eaebb55408a 12 #include "mbed.h"
Jacinta 0:1eaebb55408a 13 #include "x_nucleo_iks01a1.h"
Jacinta 0:1eaebb55408a 14 #include <cstring>
Jacinta 0:1eaebb55408a 15 #include <ctime>
Jacinta 0:1eaebb55408a 16 #include <stdexcept>
Jacinta 0:1eaebb55408a 17 #include "sensor.h"
Jacinta 0:1eaebb55408a 18 #include "userMethods.h"
Jacinta 0:1eaebb55408a 19
Jacinta 0:1eaebb55408a 20 Serial pc(USBTX, USBRX);
Jacinta 0:1eaebb55408a 21
Jacinta 0:1eaebb55408a 22 ExpansionBoard e;
Jacinta 0:1eaebb55408a 23 UserMethods u;
Jacinta 0:1eaebb55408a 24 struct tm dt;
Jacinta 0:1eaebb55408a 25 char command[20];
Jacinta 0:1eaebb55408a 26 char arg[10];
Jacinta 0:1eaebb55408a 27
Jacinta 0:1eaebb55408a 28 void sensorReadings(void const *args){
Jacinta 0:1eaebb55408a 29 e.readData();
Jacinta 0:1eaebb55408a 30 wait(e.T);
Jacinta 0:1eaebb55408a 31 }
Jacinta 0:1eaebb55408a 32
Jacinta 0:1eaebb55408a 33 void userInteraction(void const *args)
Jacinta 0:1eaebb55408a 34 {
Jacinta 0:1eaebb55408a 35 pc.printf("\n\rWelcome! Type one of the following commands");
Jacinta 0:1eaebb55408a 36 pc.printf("\n\r READ ALL\n\r READ <n>\n\r DELETE ALL\n\r DELETE <n>");
Jacinta 0:1eaebb55408a 37 pc.printf("\n\r SETDATE dd mm yyyy\n\r SETTIME hh mm ss");
Jacinta 0:1eaebb55408a 38 pc.printf("\n\r SETT <T>\n\r STATE <x>\n\r LOGGING <x>");
Jacinta 0:1eaebb55408a 39
Jacinta 0:1eaebb55408a 40 scanf("%s", command);
Jacinta 0:1eaebb55408a 41
Jacinta 0:1eaebb55408a 42 if (strcmp("READ", command)==0) {
Jacinta 0:1eaebb55408a 43 scanf("%s", arg);
Jacinta 0:1eaebb55408a 44 if(strcmp("ALL", arg)==0)
Jacinta 0:1eaebb55408a 45 //readAllSamples()
Jacinta 0:1eaebb55408a 46 printf("You ended up in READ ALL");
Jacinta 0:1eaebb55408a 47 else if (atoi(arg)!= 0)
Jacinta 0:1eaebb55408a 48 //readSample(atoi(arg));
Jacinta 0:1eaebb55408a 49 printf("You ended up in READ <n>");
Jacinta 0:1eaebb55408a 50 else printf("The argument is invalid");
Jacinta 0:1eaebb55408a 51 } else if (strcmp("DELETE", command)==0) {
Jacinta 0:1eaebb55408a 52 scanf("%s", arg);
Jacinta 0:1eaebb55408a 53 if (strcmp("ALL", arg)==0)
Jacinta 0:1eaebb55408a 54 //deleteAllSamplesOrSomething()
Jacinta 0:1eaebb55408a 55 printf("You ended up in READ ALL");
Jacinta 0:1eaebb55408a 56 else if (atoi(arg)!= 0)
Jacinta 0:1eaebb55408a 57 //deleteSample(atoi(arg));
Jacinta 0:1eaebb55408a 58 printf("You ended up in DELETE <n>");
Jacinta 0:1eaebb55408a 59 else printf("The argument is invalid");
Jacinta 0:1eaebb55408a 60 } else if (strcmp("SETDATE", command)==0) {
Jacinta 0:1eaebb55408a 61 bool isUpdate;
Jacinta 0:1eaebb55408a 62 isUpdate = u.setDate();
Jacinta 0:1eaebb55408a 63
Jacinta 0:1eaebb55408a 64 printf("Date Updated: %s\n", isUpdate?"true":"false");
Jacinta 0:1eaebb55408a 65 } else if (strcmp("SETTIME", command)==0) {
Jacinta 0:1eaebb55408a 66 bool isUpdate;
Jacinta 0:1eaebb55408a 67 isUpdate = u.setTime();
Jacinta 0:1eaebb55408a 68
Jacinta 0:1eaebb55408a 69 printf("Time Updated: %s\n", isUpdate?"true":"false");
Jacinta 0:1eaebb55408a 70 } else if (strcmp("SETT", command)==0) {
Jacinta 0:1eaebb55408a 71 scanf("%s", arg);
Jacinta 0:1eaebb55408a 72 if (atof(arg) >= 0.1 && atof(arg) <= 60.0 ) {
Jacinta 0:1eaebb55408a 73 e.T = atof(arg);
Jacinta 0:1eaebb55408a 74 printf("T UPDATED TO %.1f", e.T);
Jacinta 0:1eaebb55408a 75 }
Jacinta 0:1eaebb55408a 76 //else throw std::out_of_range ("T MUST BE WITHIN 0.1 AND 60.0");
Jacinta 0:1eaebb55408a 77 } else if (strcmp("STATE", command)==0) {
Jacinta 0:1eaebb55408a 78 scanf("%s", arg);
Jacinta 0:1eaebb55408a 79 if (strcmp("ON", arg)==0)
Jacinta 0:1eaebb55408a 80 //TODO For now it just reads data and prints it out, FIFO needed
Jacinta 0:1eaebb55408a 81 e.startSampling();
Jacinta 0:1eaebb55408a 82 else if (strcmp("OFF", arg)==0)
Jacinta 0:1eaebb55408a 83 e.stopSampling();
Jacinta 0:1eaebb55408a 84 else printf("The argument is invalid");
Jacinta 0:1eaebb55408a 85 } else if(strcmp("LOGGING", command)==0) {
Jacinta 0:1eaebb55408a 86 scanf("%s", arg);
Jacinta 0:1eaebb55408a 87 if (strcmp("ON", arg)==0) {
Jacinta 0:1eaebb55408a 88 //startLogging();
Jacinta 0:1eaebb55408a 89 printf("LOGGING ON");
Jacinta 0:1eaebb55408a 90 } else if (strcmp("OFF", arg)==0) {
Jacinta 0:1eaebb55408a 91 //stopLogging();
Jacinta 0:1eaebb55408a 92 printf("LOGGING OFF");
Jacinta 0:1eaebb55408a 93 } else printf("The argument is invalid");
Jacinta 0:1eaebb55408a 94 } else printf("There is no command matching. Please try again");
Jacinta 0:1eaebb55408a 95
Jacinta 0:1eaebb55408a 96 // Clear the input to avoid it to being reused in the next cycle
Jacinta 0:1eaebb55408a 97 command[0] = arg[0] = 0;
Jacinta 0:1eaebb55408a 98
Jacinta 0:1eaebb55408a 99 }
Jacinta 0:1eaebb55408a 100
Jacinta 0:1eaebb55408a 101 void getData(const void*)
Jacinta 0:1eaebb55408a 102 {
Jacinta 0:1eaebb55408a 103 while(true) {
Jacinta 0:1eaebb55408a 104 //Block on queuefor at most 5s if no data is available
Jacinta 0:1eaebb55408a 105 osEvent event = e.mail_box.get(5000);
Jacinta 0:1eaebb55408a 106
Jacinta 0:1eaebb55408a 107 if(event.status == osEventTimeout) {
Jacinta 0:1eaebb55408a 108 printf("mail_box.get %02x, Timeout error", event.status);
Jacinta 0:1eaebb55408a 109 return;
Jacinta 0:1eaebb55408a 110 } else if (event.status == osEventMail) {
Jacinta 0:1eaebb55408a 111 // Successful, store log_data
Jacinta 0:1eaebb55408a 112 //TODO Store it somewhere
Jacinta 0:1eaebb55408a 113 Log *log_d = (Log*)event.value.p;
Jacinta 0:1eaebb55408a 114 e.mail_box.free(log_d);
Jacinta 0:1eaebb55408a 115 }
Jacinta 0:1eaebb55408a 116 }
Jacinta 0:1eaebb55408a 117 }
Jacinta 0:1eaebb55408a 118
Jacinta 0:1eaebb55408a 119 int main()
Jacinta 0:1eaebb55408a 120 {
Jacinta 0:1eaebb55408a 121 pc.baud(9600);
Jacinta 0:1eaebb55408a 122 Thread userInteraction();
Jacinta 0:1eaebb55408a 123 Thread sensorReadings();
Jacinta 0:1eaebb55408a 124
Jacinta 0:1eaebb55408a 125 return 0;
Jacinta 0:1eaebb55408a 126 }