Nelson Santos / Mbed 2 deprecated trabalho

Dependencies:   X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed

Committer:
nlsantos
Date:
Mon May 16 23:11:34 2016 +0000
Revision:
12:33728f2a7068
Parent:
11:f80f5c4a2db9
Child:
15:a72b66e1f473
Child:
16:89ff2d66f894
comeca a trabalhar a partir de aqui

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 2:0b8065489409 5 * @version V0.0.3
Jacinta 0:1eaebb55408a 6 * @brief Simple Example application for using the X_NUCLEO_IKS01A1
Jacinta 0:1eaebb55408a 7 * MEMS Inertial & Environmental Sensor Nucleo expansion board.
Jacinta 0:1eaebb55408a 8 ******************************************************************************
Jacinta 0:1eaebb55408a 9 */
Jacinta 0:1eaebb55408a 10
Jacinta 0:1eaebb55408a 11 #include "mbed.h"
Jacinta 0:1eaebb55408a 12 #include "x_nucleo_iks01a1.h"
Jacinta 2:0b8065489409 13 #include "rtos.h"
Jacinta 0:1eaebb55408a 14 #include <cstring>
Jacinta 0:1eaebb55408a 15 #include <stdexcept>
Jacinta 2:0b8065489409 16 #include <vector>
Jacinta 0:1eaebb55408a 17 #include "sensor.h"
Jacinta 0:1eaebb55408a 18 #include "userMethods.h"
Jacinta 0:1eaebb55408a 19
Jacinta 2:0b8065489409 20 struct tm t = {t.tm_hour = 0};
Jacinta 0:1eaebb55408a 21
Jacinta 2:0b8065489409 22 std::vector<log_data> v;
Jacinta 2:0b8065489409 23 int n = 0;
Jacinta 7:ed4a10ebe720 24 UserMethods u(v, n);
Jacinta 7:ed4a10ebe720 25 ExpansionBoard e(v, n);
Jacinta 2:0b8065489409 26
nlsantos 11:f80f5c4a2db9 27 //Thread *logThread;
nlsantos 11:f80f5c4a2db9 28 //Thread *getThread;
nlsantos 6:d388428956b2 29
nlsantos 6:d388428956b2 30
nlsantos 6:d388428956b2 31 int main()
nlsantos 6:d388428956b2 32 {
Jacinta 2:0b8065489409 33
Jacinta 2:0b8065489409 34 printf("Sampling started...\n");
nlsantos 6:d388428956b2 35
nlsantos 10:2f9585ff5a7b 36 printf("\n\rWelcome! Type one of the following commands and press space or enter");
nlsantos 9:ce395d75c0df 37 printf("\n\ Don't forget to use only capitals when typing the commands!");
Jacinta 2:0b8065489409 38 printf("\n\r READ ALL\n\r READ <n>\n\r DELETE ALL\n\r DELETE <n>");
Jacinta 2:0b8065489409 39 printf("\n\r SETDATE dd mm yyyy\n\r SETTIME hh mm ss");
Jacinta 2:0b8065489409 40 printf("\n\r SETT <T>\n\r STATE <x>\n\r LOGGING <x>\n\r EXIT\n\n\r");
nlsantos 6:d388428956b2 41
Jacinta 2:0b8065489409 42 //Initialise time
nlsantos 6:d388428956b2 43 set_time(0);
nlsantos 9:ce395d75c0df 44
nlsantos 9:ce395d75c0df 45 //ISR to sample data
Jacinta 2:0b8065489409 46 Ticker ticker;
Jacinta 2:0b8065489409 47 ticker.attach(e.sampleData, e.T);
nlsantos 6:d388428956b2 48
nlsantos 6:d388428956b2 49
Jacinta 0:1eaebb55408a 50 char command[20];
Jacinta 0:1eaebb55408a 51 char arg[10];
nlsantos 6:d388428956b2 52
nlsantos 9:ce395d75c0df 53 //User commands
nlsantos 9:ce395d75c0df 54
Jacinta 2:0b8065489409 55 while(1) {
Jacinta 2:0b8065489409 56 scanf("%s", command);
nlsantos 6:d388428956b2 57
Jacinta 2:0b8065489409 58 if (strcmp("READ", command)==0) {
Jacinta 2:0b8065489409 59 scanf("%s", arg);
Jacinta 2:0b8065489409 60 printf("\n");
Jacinta 2:0b8065489409 61 if(strcmp("ALL", arg)==0)
nlsantos 12:33728f2a7068 62 Thread readAllThread(u.readAllData, NULL, osPriorityNormal, DEFAULT_STACK_SIZE);
nlsantos 12:33728f2a7068 63
Jacinta 2:0b8065489409 64 else if (atoi(arg)!= 0) {
Jacinta 2:0b8065489409 65 n = atoi(arg); //A bit hacky, but it works
nlsantos 6:d388428956b2 66 Thread readThread(u.readNData, NULL,osPriorityBelowNormal, DEFAULT_STACK_SIZE);
nlsantos 6:d388428956b2 67 }
nlsantos 6:d388428956b2 68
nlsantos 10:2f9585ff5a7b 69 else perror("The argument is invalid\n\r");
Jacinta 2:0b8065489409 70 }
nlsantos 9:ce395d75c0df 71 ///////////////////////////////////////////////////////////////////////////////////////////////////////
Jacinta 2:0b8065489409 72 else if (strcmp("DELETE", command)==0) {
Jacinta 2:0b8065489409 73 scanf("%s", arg);
Jacinta 2:0b8065489409 74 printf("\n");
Jacinta 2:0b8065489409 75 if (strcmp("ALL", arg)==0) {
Jacinta 2:0b8065489409 76 int n = v.size();
Jacinta 2:0b8065489409 77 v.clear();
Jacinta 2:0b8065489409 78 printf("DELETED %d RECORDS", n);
nlsantos 6:d388428956b2 79 } else if (atoi(arg)!= 0) {
Jacinta 2:0b8065489409 80 int n = v.size();
Jacinta 2:0b8065489409 81 v.erase(v.begin(), v.end());
Jacinta 2:0b8065489409 82 if(n < atoi(arg))
Jacinta 2:0b8065489409 83 printf("DELETED %d RECORDS", n);
Jacinta 2:0b8065489409 84 else printf("DELETED %d RECORDS", atoi(arg));
Jacinta 2:0b8065489409 85 }
nlsantos 6:d388428956b2 86
nlsantos 10:2f9585ff5a7b 87 else perror("The argument is invalid\n\r");
Jacinta 2:0b8065489409 88 }
nlsantos 9:ce395d75c0df 89 ////////////////////////////////////////////////////////////////////////////////////
Jacinta 2:0b8065489409 90 else if (strcmp("SETDATE", command)==0) {
Jacinta 2:0b8065489409 91 char day[2], month[2], year[4];
Jacinta 2:0b8065489409 92 //Read day
Jacinta 2:0b8065489409 93 scanf("%s", day);
Jacinta 2:0b8065489409 94 if (atoi(day)!=0)
Jacinta 2:0b8065489409 95 atoi(day)<31 ? t.tm_mday=atoi(day) : printf("Invalid day\n");
Jacinta 2:0b8065489409 96 // Read month
Jacinta 2:0b8065489409 97 scanf("%s", month);
Jacinta 2:0b8065489409 98 if (atoi(month)!=0)
Jacinta 2:0b8065489409 99 atoi(month)<=12 ? t.tm_mon=atoi(month)-1 : printf("Invalid month\n");
Jacinta 2:0b8065489409 100 //Read year
Jacinta 2:0b8065489409 101 scanf("%s", year);
Jacinta 2:0b8065489409 102 printf("\n");
Jacinta 2:0b8065489409 103 if (atoi(year)!=0)
Jacinta 2:0b8065489409 104 atoi(year)>=70 ? t.tm_year=atoi(year)-1900 : printf("Invalid year\n");
nlsantos 6:d388428956b2 105
Jacinta 2:0b8065489409 106 // Check whether date is correct
Jacinta 2:0b8065489409 107 if (mktime(&t)>0) {
Jacinta 2:0b8065489409 108 printf("DATE UPDATED TO %d %d %d", t.tm_mday,
Jacinta 2:0b8065489409 109 t.tm_mon+1, t.tm_year+1900);
Jacinta 2:0b8065489409 110 set_time(mktime(&t));
nlsantos 9:ce395d75c0df 111 } else perror("Date inserted is invalid\n\r");
Jacinta 0:1eaebb55408a 112 }
nlsantos 6:d388428956b2 113
Jacinta 2:0b8065489409 114 else if (strcmp("SETTIME", command)==0) {
Jacinta 2:0b8065489409 115 char hour[2], min[2], sec[2];
nlsantos 6:d388428956b2 116
Jacinta 2:0b8065489409 117 scanf("%s", hour);
Jacinta 2:0b8065489409 118 if (atoi(hour)!=0)
Jacinta 2:0b8065489409 119 t.tm_hour = atoi(hour);
Jacinta 2:0b8065489409 120 scanf("%s", min);
Jacinta 2:0b8065489409 121 if (atoi(min)!=0)
Jacinta 2:0b8065489409 122 t.tm_min = atoi(min);
Jacinta 2:0b8065489409 123 scanf("%s", sec);
Jacinta 2:0b8065489409 124 if (atoi(sec)!=0)
Jacinta 2:0b8065489409 125 t.tm_sec = atoi(sec);
Jacinta 2:0b8065489409 126 printf("\n");
Jacinta 0:1eaebb55408a 127
Jacinta 2:0b8065489409 128 //If the user sets this before without DATE, it's gonna be garbage
nlsantos 6:d388428956b2 129
Jacinta 2:0b8065489409 130 // Check whether time is correct
Jacinta 2:0b8065489409 131 if (mktime(&t)>0) {
Jacinta 2:0b8065489409 132 set_time(mktime(&t));
Jacinta 2:0b8065489409 133 printf("TIME UPDATED TO %d %d %d", t.tm_hour, t.tm_min, t.tm_sec);
nlsantos 9:ce395d75c0df 134 } else perror("Time inserted is invalid\n\r");
Jacinta 2:0b8065489409 135 }
nlsantos 6:d388428956b2 136
nlsantos 9:ce395d75c0df 137 // Set sampling period
Jacinta 2:0b8065489409 138 else if (strcmp("SETT", command)==0) {
Jacinta 2:0b8065489409 139 scanf("%s", arg);
Jacinta 2:0b8065489409 140 printf("\n");
Jacinta 2:0b8065489409 141 if (atof(arg) >= 0.1 && atof(arg) <= 60.0 ) {
Jacinta 2:0b8065489409 142 e.T = atof(arg);
nlsantos 9:ce395d75c0df 143 ticker.attach(e.sampleData,e.T);
Jacinta 2:0b8065489409 144 printf("T UPDATED TO %.1f", e.T);
nlsantos 9:ce395d75c0df 145 } else perror ("Value must be between 1 and 60");
nlsantos 9:ce395d75c0df 146
nlsantos 9:ce395d75c0df 147 //Toggle sampling on and off
nlsantos 6:d388428956b2 148
Jacinta 2:0b8065489409 149 } else if (strcmp("STATE", command)==0) {
Jacinta 2:0b8065489409 150 scanf("%s", arg);
nlsantos 6:d388428956b2 151 printf("\n");
Jacinta 2:0b8065489409 152 if (strcmp("ON", arg)==0) {
Jacinta 2:0b8065489409 153 ticker.attach(e.sampleData, e.T);
Jacinta 2:0b8065489409 154 printf("SAMPLING ON");
nlsantos 6:d388428956b2 155 } else if (strcmp("OFF", arg)==0) {
Jacinta 2:0b8065489409 156 ticker.detach();
Jacinta 2:0b8065489409 157 printf("SAMPLIG OFF");
Jacinta 2:0b8065489409 158 }
nlsantos 6:d388428956b2 159
nlsantos 9:ce395d75c0df 160 else perror("The argument is invalid\n\r");
Jacinta 2:0b8065489409 161 }
nlsantos 9:ce395d75c0df 162
nlsantos 10:2f9585ff5a7b 163 //Toggle debug messages on and off
Jacinta 2:0b8065489409 164 else if(strcmp("LOGGING", command)==0) {
Jacinta 2:0b8065489409 165 scanf("%s", arg);
Jacinta 2:0b8065489409 166 printf("\n");
Jacinta 2:0b8065489409 167 if (strcmp("ON", arg)==0)
nlsantos 10:2f9585ff5a7b 168 e.flag= true;
Jacinta 2:0b8065489409 169 else if (strcmp("OFF", arg)==0)
nlsantos 10:2f9585ff5a7b 170 e.flag= false;
nlsantos 9:ce395d75c0df 171 else perror ("The argument is invalid\n\r");
Jacinta 2:0b8065489409 172 }
nlsantos 10:2f9585ff5a7b 173
nlsantos 6:d388428956b2 174
nlsantos 6:d388428956b2 175 else if(strcmp("EXIT", command) == 0) {
nlsantos 6:d388428956b2 176 break;
nlsantos 6:d388428956b2 177 }
nlsantos 6:d388428956b2 178
nlsantos 9:ce395d75c0df 179 else perror("\nThere is no command matching. Try again");
Jacinta 0:1eaebb55408a 180
Jacinta 2:0b8065489409 181 // Clear the input to avoid it to being reused in the next cycle
Jacinta 2:0b8065489409 182 command[0] = arg[0] = 0;
Jacinta 2:0b8065489409 183 printf("\n\r");
Jacinta 0:1eaebb55408a 184 }
nlsantos 6:d388428956b2 185
nlsantos 6:d388428956b2 186
nlsantos 10:2f9585ff5a7b 187 printf ("Thank you for using our system \n");
nlsantos 10:2f9585ff5a7b 188 printf ("\n Press the reset button to start again \n");
nlsantos 10:2f9585ff5a7b 189
Jacinta 2:0b8065489409 190 return 0;
Jacinta 0:1eaebb55408a 191 }