trabalho final

Dependencies:   X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed

Committer:
Jacinta
Date:
Tue May 17 18:35:34 2016 +0000
Revision:
20:014a808b3ea2
Parent:
15:a72b66e1f473
Child:
21:849e5636076e
Child:
22:23d5bb18d6a0
....

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