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.
main.cpp@22:ea64f19e0268, 2021-11-03 (annotated)
- Committer:
- berajay
- Date:
- Wed Nov 03 17:26:59 2021 +0000
- Revision:
- 22:ea64f19e0268
- Parent:
- 20:2d02441d1876
Save the date of ISK01A2 in external SD
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| cparata | 0:69566eea0fba | 1 | /* Includes */ |
| cparata | 0:69566eea0fba | 2 | #include "mbed.h" |
| davide.aliprandi@st.com | 13:fc873da5b445 | 3 | #include "XNucleoIKS01A2.h" |
| berajay | 18:91a38b13d21d | 4 | #include "SDFileSystem.h" |
| berajay | 18:91a38b13d21d | 5 | #include "FATFileSystem.h" |
| berajay | 18:91a38b13d21d | 6 | #include "iostream" |
| berajay | 19:c765e311adbd | 7 | #include "locale.h" |
| berajay | 19:c765e311adbd | 8 | #include "time.h" |
| berajay | 18:91a38b13d21d | 9 | |
| berajay | 20:2d02441d1876 | 10 | Serial pc(USBTX, USBRX, 115200); |
| berajay | 19:c765e311adbd | 11 | // MOSI, MISO, SCK, CS |
| berajay | 18:91a38b13d21d | 12 | SDFileSystem sd(D11, D12, D13, D10, "sd");// the pinout on the mbed Cool Components workshop board |
| berajay | 18:91a38b13d21d | 13 | FILE *fp; |
| cparata | 0:69566eea0fba | 14 | |
| cparata | 0:69566eea0fba | 15 | /* Instantiate the expansion board */ |
| davide.aliprandi@st.com | 13:fc873da5b445 | 16 | static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5); |
| cparata | 0:69566eea0fba | 17 | |
| cparata | 0:69566eea0fba | 18 | /* Retrieve the composing elements of the expansion board */ |
| cparata | 0:69566eea0fba | 19 | static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro; |
| davide.aliprandi@st.com | 13:fc873da5b445 | 20 | static LSM303AGRAccSensor *accelerometer = mems_expansion_board->accelerometer; |
| cparata | 0:69566eea0fba | 21 | |
| berajay | 19:c765e311adbd | 22 | DigitalIn userButton(PC_13); //USER BUTTON |
| berajay | 19:c765e311adbd | 23 | bool live_writing = false; |
| cparata | 0:69566eea0fba | 24 | |
| cparata | 0:69566eea0fba | 25 | /* Simple main function */ |
| cparata | 0:69566eea0fba | 26 | int main() { |
| cparata | 0:69566eea0fba | 27 | uint8_t id; |
| berajay | 19:c765e311adbd | 28 | int32_t x_axes[3]; |
| berajay | 19:c765e311adbd | 29 | int32_t g_axes[3]; |
| berajay | 19:c765e311adbd | 30 | float x_freq[2]; |
| berajay | 19:c765e311adbd | 31 | float g_freq[2]; |
| berajay | 19:c765e311adbd | 32 | float x_sens[2]; |
| berajay | 19:c765e311adbd | 33 | float x_fs[2]; |
| berajay | 19:c765e311adbd | 34 | // Take time (https://unixtime.org/) |
| berajay | 19:c765e311adbd | 35 | set_time(1635956827); |
| berajay | 19:c765e311adbd | 36 | |
| berajay | 19:c765e311adbd | 37 | // DATE |
| berajay | 19:c765e311adbd | 38 | char s[100]; |
| berajay | 19:c765e311adbd | 39 | time_t t_l = time (NULL); |
| berajay | 19:c765e311adbd | 40 | struct tm *tp = localtime (&t_l); |
| berajay | 19:c765e311adbd | 41 | strftime (s,100, "\n\t %d %B %Y %H:%M:%S\r\n", tp); |
| berajay | 19:c765e311adbd | 42 | printf ("%s", s); |
| cparata | 0:69566eea0fba | 43 | |
| cparata | 0:69566eea0fba | 44 | /* Enable all sensors */ |
| berajay | 19:c765e311adbd | 45 | accelerometer->enable(); //Data from LSM303AGR |
| berajay | 19:c765e311adbd | 46 | acc_gyro->enable_x(); //Data from LSM6DSL |
| berajay | 19:c765e311adbd | 47 | acc_gyro->enable_g(); //Data from LSM6DSL |
| cparata | 0:69566eea0fba | 48 | |
| cparata | 0:69566eea0fba | 49 | printf("\r\n--- Starting new run ---\r\n"); |
| cparata | 0:69566eea0fba | 50 | |
| davide.aliprandi@st.com | 13:fc873da5b445 | 51 | accelerometer->read_id(&id); |
| cparata | 0:69566eea0fba | 52 | printf("LSM303AGR accelerometer = 0x%X\r\n", id); |
| davide.aliprandi@st.com | 13:fc873da5b445 | 53 | acc_gyro->read_id(&id); |
| cparata | 0:69566eea0fba | 54 | printf("LSM6DSL accelerometer & gyroscope = 0x%X\r\n", id); |
| berajay | 19:c765e311adbd | 55 | |
| berajay | 18:91a38b13d21d | 56 | int n=0; |
| berajay | 19:c765e311adbd | 57 | int arr_lenght = 500; |
| berajay | 19:c765e311adbd | 58 | Timer t; |
| berajay | 19:c765e311adbd | 59 | Timer t_down; |
| berajay | 19:c765e311adbd | 60 | float time[arr_lenght]; |
| berajay | 19:c765e311adbd | 61 | int acc_x[arr_lenght]; |
| berajay | 19:c765e311adbd | 62 | int acc_y[arr_lenght]; |
| berajay | 19:c765e311adbd | 63 | int acc_z[arr_lenght]; |
| berajay | 19:c765e311adbd | 64 | int gyro_x[arr_lenght]; |
| berajay | 19:c765e311adbd | 65 | int gyro_y[arr_lenght]; |
| berajay | 19:c765e311adbd | 66 | int gyro_z[arr_lenght]; |
| berajay | 19:c765e311adbd | 67 | float frequency = 1000.0; |
| berajay | 19:c765e311adbd | 68 | float range = 8.0; |
| berajay | 19:c765e311adbd | 69 | //SET |
| berajay | 19:c765e311adbd | 70 | acc_gyro->set_x_odr(frequency); |
| berajay | 19:c765e311adbd | 71 | acc_gyro->set_g_odr(frequency); |
| berajay | 19:c765e311adbd | 72 | acc_gyro->set_x_fs(range); |
| berajay | 19:c765e311adbd | 73 | //GET |
| berajay | 19:c765e311adbd | 74 | acc_gyro->get_x_odr(x_freq); |
| berajay | 19:c765e311adbd | 75 | printf("Accelerometer frequency: %.1f, %.1f\r\n", x_freq[0],x_freq[1]); |
| berajay | 19:c765e311adbd | 76 | acc_gyro->get_g_odr(g_freq); |
| berajay | 19:c765e311adbd | 77 | printf("Gryroscope frequency: %.1f, %.1f\r\n", g_freq[0],g_freq[1]); |
| berajay | 19:c765e311adbd | 78 | acc_gyro->get_x_sensitivity(x_sens); |
| berajay | 19:c765e311adbd | 79 | printf("Accelerometer sensitivity: %.3f, %.1f\r\n", x_sens[0],x_sens[1]); |
| berajay | 19:c765e311adbd | 80 | acc_gyro->get_x_fs(x_fs); |
| berajay | 19:c765e311adbd | 81 | printf("Accelerometer meas. range: %.1f, %.1f\r\n", x_fs[0],x_fs[1]); |
| cparata | 0:69566eea0fba | 82 | |
| cparata | 0:69566eea0fba | 83 | |
| berajay | 19:c765e311adbd | 84 | printf("\r\n"); |
| berajay | 19:c765e311adbd | 85 | /* Start the cycle*/ |
| berajay | 19:c765e311adbd | 86 | while(true){ //run forever |
| berajay | 19:c765e311adbd | 87 | if (!userButton) { // button is pressed |
| berajay | 19:c765e311adbd | 88 | if (live_writing==false) { |
| berajay | 19:c765e311adbd | 89 | live_writing = true; |
| berajay | 19:c765e311adbd | 90 | n = 0; |
| berajay | 19:c765e311adbd | 91 | //Initialize SD CARD |
| berajay | 19:c765e311adbd | 92 | char filename[64]; |
| berajay | 19:c765e311adbd | 93 | char date[64]; |
| berajay | 20:2d02441d1876 | 94 | printf("Check SD\r\n"); |
| berajay | 19:c765e311adbd | 95 | mkdir("/sd/ISK01A2", 0777); |
| berajay | 19:c765e311adbd | 96 | int name = 0; |
| berajay | 19:c765e311adbd | 97 | // Save name with next name test_001,test_002, ecc... |
| berajay | 19:c765e311adbd | 98 | while(1) { |
| berajay | 19:c765e311adbd | 99 | sprintf(filename, "/sd/ISK01A2/test_%03d.txt", name); |
| berajay | 19:c765e311adbd | 100 | FILE *fp = fopen(filename, "r"); |
| berajay | 19:c765e311adbd | 101 | if(fp == NULL) { |
| berajay | 19:c765e311adbd | 102 | break; |
| berajay | 19:c765e311adbd | 103 | } |
| berajay | 19:c765e311adbd | 104 | fclose(fp); |
| berajay | 19:c765e311adbd | 105 | name++; |
| berajay | 19:c765e311adbd | 106 | } |
| berajay | 19:c765e311adbd | 107 | |
| berajay | 19:c765e311adbd | 108 | fp = fopen(filename, "w"); |
| berajay | 19:c765e311adbd | 109 | if (fp == NULL) { |
| berajay | 19:c765e311adbd | 110 | error("Unable to write the file\r\n"); |
| berajay | 19:c765e311adbd | 111 | } |
| berajay | 19:c765e311adbd | 112 | |
| berajay | 19:c765e311adbd | 113 | // Name file on monitor |
| berajay | 19:c765e311adbd | 114 | printf("\n\t test_%03d \r\n", name); |
| berajay | 19:c765e311adbd | 115 | |
| berajay | 19:c765e311adbd | 116 | fprintf(fp, " DATA of STM32F401RE with ISK01A2\r\n"); |
| berajay | 19:c765e311adbd | 117 | strftime (date,64, "%d %B %Y %H:%M", tp); |
| berajay | 19:c765e311adbd | 118 | fprintf(fp, "\t %s \n", date); //DATE |
| berajay | 19:c765e311adbd | 119 | fprintf(fp, "N,Time,Temp[C],Acc_x[mg],Acc_y[mg],Acc_z[mg],Gyro_x[mdps],Gyro_y[mdps],Gyro_z[mdps]\r\n"); //Header in the file text |
| berajay | 19:c765e311adbd | 120 | |
| berajay | 19:c765e311adbd | 121 | printf("\r\n START NEW RUNNING \r\n"); |
| berajay | 19:c765e311adbd | 122 | t.start(); |
| berajay | 19:c765e311adbd | 123 | } else { // button is pressed but live_writing is true |
| berajay | 19:c765e311adbd | 124 | |
| berajay | 19:c765e311adbd | 125 | // Now we write into sd card all data storaged |
| berajay | 19:c765e311adbd | 126 | t.stop(); |
| berajay | 19:c765e311adbd | 127 | int i; |
| berajay | 19:c765e311adbd | 128 | //int elementi = sizeof(acc_x)/sizeof(int); |
| berajay | 19:c765e311adbd | 129 | |
| berajay | 19:c765e311adbd | 130 | for (i=0; i<=n; i++){ |
| berajay | 19:c765e311adbd | 131 | fprintf(fp,"%3d,%3.3f,%6ld,%6ld,%6ld,%6ld,%6ld,%6ld\r\n", i, time[i], acc_x[i], acc_y[i], acc_z[i], gyro_x[i], gyro_y[i], gyro_z[i]); //Save current data into file txt |
| berajay | 20:2d02441d1876 | 132 | //printf("%3d,%3.3f,%6ld,%6ld,%6ld,%6ld,%6ld,%6ld\r\n", i, time[i], acc_x[i], acc_y[i], acc_z[i], gyro_x[i], gyro_y[i], gyro_z[i]); |
| berajay | 19:c765e311adbd | 133 | } |
| berajay | 19:c765e311adbd | 134 | t.reset(); |
| berajay | 19:c765e311adbd | 135 | fclose(fp); |
| berajay | 20:2d02441d1876 | 136 | printf("File successfully written!\r\n"); |
| berajay | 19:c765e311adbd | 137 | live_writing = false; |
| berajay | 19:c765e311adbd | 138 | wait(2); |
| berajay | 19:c765e311adbd | 139 | }//end else |
| berajay | 19:c765e311adbd | 140 | } //end if userbutton |
| berajay | 19:c765e311adbd | 141 | if (live_writing==true){ |
| berajay | 19:c765e311adbd | 142 | acc_gyro->get_x_axes(x_axes); //Read data from LSM6DSL accelerometer |
| berajay | 19:c765e311adbd | 143 | acc_x[n] = x_axes[0]; |
| berajay | 19:c765e311adbd | 144 | acc_y[n] = x_axes[1]; |
| berajay | 19:c765e311adbd | 145 | acc_z[n] = x_axes[2]; |
| berajay | 19:c765e311adbd | 146 | |
| berajay | 19:c765e311adbd | 147 | acc_gyro->get_g_axes(g_axes); //Read data from LSM6DSL gyroscope |
| berajay | 19:c765e311adbd | 148 | gyro_x[n] = g_axes[0]; |
| berajay | 19:c765e311adbd | 149 | gyro_y[n] = g_axes[1]; |
| berajay | 19:c765e311adbd | 150 | gyro_z[n] = g_axes[2]; |
| berajay | 19:c765e311adbd | 151 | |
| berajay | 19:c765e311adbd | 152 | time[n] = t.read(); |
| berajay | 19:c765e311adbd | 153 | n+=1; |
| berajay | 19:c765e311adbd | 154 | |
| berajay | 19:c765e311adbd | 155 | if (n==arr_lenght){ |
| berajay | 19:c765e311adbd | 156 | t.stop(); |
| berajay | 19:c765e311adbd | 157 | int i; |
| berajay | 19:c765e311adbd | 158 | |
| berajay | 19:c765e311adbd | 159 | for (i=0; i<=n; i++){ |
| berajay | 19:c765e311adbd | 160 | fprintf(fp,"%3d,%3.3f,%6ld,%6ld,%6ld,%6ld,%6ld,%6ld\r\n", i, time[i], acc_x[i], acc_y[i], acc_z[i], gyro_x[i], gyro_y[i], gyro_z[i]); //Save current data into file txt |
| berajay | 20:2d02441d1876 | 161 | //printf("%3d,%3.3f,%6ld,%6ld,%6ld,%6ld,%6ld,%6ld\r\n", i, time[i], acc_x[i], acc_y[i], acc_z[i], gyro_x[i], gyro_y[i], gyro_z[i]); |
| berajay | 19:c765e311adbd | 162 | } |
| berajay | 19:c765e311adbd | 163 | t.reset(); |
| berajay | 19:c765e311adbd | 164 | fclose(fp); |
| berajay | 20:2d02441d1876 | 165 | printf("File successfully written!\r\n"); |
| berajay | 19:c765e311adbd | 166 | live_writing = false; |
| berajay | 19:c765e311adbd | 167 | wait(2); |
| berajay | 19:c765e311adbd | 168 | } |
| berajay | 19:c765e311adbd | 169 | }//end while writing |
| berajay | 19:c765e311adbd | 170 | }//end while |
| berajay | 19:c765e311adbd | 171 | }//end main |
| cparata | 0:69566eea0fba | 172 |