Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: X_NUCLEO_IKS01A1-f255a2c75ecb mbed-rtos mbed
main.cpp@12:33728f2a7068, 2016-05-16 (annotated)
- 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?
| 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 | 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 | } |
