trabalho final
Dependencies: X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed
main.cpp@20:014a808b3ea2, 2016-05-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |