Francesco Beraldini / Mbed 2 deprecated Project

Dependencies:   mbed Project

Dependents:   Project

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?

UserRevisionLine numberNew 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