Francesco Beraldini / Mbed 2 deprecated Project

Dependencies:   mbed Project

Dependents:   Project

Committer:
berajay
Date:
Wed Nov 03 16:47:27 2021 +0000
Revision:
19:c765e311adbd
Parent:
18:91a38b13d21d
Child:
20:2d02441d1876
save data 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 18:91a38b13d21d 10 Serial pc(USBTX, USBRX);
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() {
berajay 19:c765e311adbd 27 pc.baud(115200);
cparata 0:69566eea0fba 28 uint8_t id;
berajay 19:c765e311adbd 29 int32_t x_axes[3];
berajay 19:c765e311adbd 30 int32_t g_axes[3];
berajay 19:c765e311adbd 31 float x_freq[2];
berajay 19:c765e311adbd 32 float g_freq[2];
berajay 19:c765e311adbd 33 float x_sens[2];
berajay 19:c765e311adbd 34 float x_fs[2];
berajay 19:c765e311adbd 35 // Take time (https://unixtime.org/)
berajay 19:c765e311adbd 36 set_time(1635956827);
berajay 19:c765e311adbd 37
berajay 19:c765e311adbd 38 // DATE
berajay 19:c765e311adbd 39 char s[100];
berajay 19:c765e311adbd 40 time_t t_l = time (NULL);
berajay 19:c765e311adbd 41 struct tm *tp = localtime (&t_l);
berajay 19:c765e311adbd 42 strftime (s,100, "\n\t %d %B %Y %H:%M:%S\r\n", tp);
berajay 19:c765e311adbd 43 printf ("%s", s);
cparata 0:69566eea0fba 44
cparata 0:69566eea0fba 45 /* Enable all sensors */
berajay 19:c765e311adbd 46 accelerometer->enable(); //Data from LSM303AGR
berajay 19:c765e311adbd 47 acc_gyro->enable_x(); //Data from LSM6DSL
berajay 19:c765e311adbd 48 acc_gyro->enable_g(); //Data from LSM6DSL
cparata 0:69566eea0fba 49
cparata 0:69566eea0fba 50 printf("\r\n--- Starting new run ---\r\n");
cparata 0:69566eea0fba 51
davide.aliprandi@st.com 13:fc873da5b445 52 accelerometer->read_id(&id);
cparata 0:69566eea0fba 53 printf("LSM303AGR accelerometer = 0x%X\r\n", id);
davide.aliprandi@st.com 13:fc873da5b445 54 acc_gyro->read_id(&id);
cparata 0:69566eea0fba 55 printf("LSM6DSL accelerometer & gyroscope = 0x%X\r\n", id);
berajay 19:c765e311adbd 56
berajay 18:91a38b13d21d 57 int n=0;
berajay 19:c765e311adbd 58 int arr_lenght = 500;
berajay 19:c765e311adbd 59 Timer t;
berajay 19:c765e311adbd 60 Timer t_down;
berajay 19:c765e311adbd 61 float time[arr_lenght];
berajay 19:c765e311adbd 62 int acc_x[arr_lenght];
berajay 19:c765e311adbd 63 int acc_y[arr_lenght];
berajay 19:c765e311adbd 64 int acc_z[arr_lenght];
berajay 19:c765e311adbd 65 int gyro_x[arr_lenght];
berajay 19:c765e311adbd 66 int gyro_y[arr_lenght];
berajay 19:c765e311adbd 67 int gyro_z[arr_lenght];
berajay 19:c765e311adbd 68 float frequency = 1000.0;
berajay 19:c765e311adbd 69 float range = 8.0;
berajay 19:c765e311adbd 70 //SET
berajay 19:c765e311adbd 71 acc_gyro->set_x_odr(frequency);
berajay 19:c765e311adbd 72 acc_gyro->set_g_odr(frequency);
berajay 19:c765e311adbd 73 acc_gyro->set_x_fs(range);
berajay 19:c765e311adbd 74 //GET
berajay 19:c765e311adbd 75 acc_gyro->get_x_odr(x_freq);
berajay 19:c765e311adbd 76 printf("Accelerometer frequency: %.1f, %.1f\r\n", x_freq[0],x_freq[1]);
berajay 19:c765e311adbd 77 acc_gyro->get_g_odr(g_freq);
berajay 19:c765e311adbd 78 printf("Gryroscope frequency: %.1f, %.1f\r\n", g_freq[0],g_freq[1]);
berajay 19:c765e311adbd 79 acc_gyro->get_x_sensitivity(x_sens);
berajay 19:c765e311adbd 80 printf("Accelerometer sensitivity: %.3f, %.1f\r\n", x_sens[0],x_sens[1]);
berajay 19:c765e311adbd 81 acc_gyro->get_x_fs(x_fs);
berajay 19:c765e311adbd 82 printf("Accelerometer meas. range: %.1f, %.1f\r\n", x_fs[0],x_fs[1]);
cparata 0:69566eea0fba 83
cparata 0:69566eea0fba 84
berajay 19:c765e311adbd 85 printf("\r\n");
berajay 19:c765e311adbd 86 /* Start the cycle*/
berajay 19:c765e311adbd 87 while(true){ //run forever
berajay 19:c765e311adbd 88 if (!userButton) { // button is pressed
berajay 19:c765e311adbd 89 if (live_writing==false) {
berajay 19:c765e311adbd 90 live_writing = true;
berajay 19:c765e311adbd 91 n = 0;
berajay 19:c765e311adbd 92 //Initialize SD CARD
berajay 19:c765e311adbd 93 char filename[64];
berajay 19:c765e311adbd 94 char date[64];
berajay 19:c765e311adbd 95 pc.printf("Check SD\r\n");
berajay 19:c765e311adbd 96 mkdir("/sd/ISK01A2", 0777);
berajay 19:c765e311adbd 97 int name = 0;
berajay 19:c765e311adbd 98 // Save name with next name test_001,test_002, ecc...
berajay 19:c765e311adbd 99 while(1) {
berajay 19:c765e311adbd 100 sprintf(filename, "/sd/ISK01A2/test_%03d.txt", name);
berajay 19:c765e311adbd 101 FILE *fp = fopen(filename, "r");
berajay 19:c765e311adbd 102 if(fp == NULL) {
berajay 19:c765e311adbd 103 break;
berajay 19:c765e311adbd 104 }
berajay 19:c765e311adbd 105 fclose(fp);
berajay 19:c765e311adbd 106 name++;
berajay 19:c765e311adbd 107 }
berajay 19:c765e311adbd 108
berajay 19:c765e311adbd 109 fp = fopen(filename, "w");
berajay 19:c765e311adbd 110 if (fp == NULL) {
berajay 19:c765e311adbd 111 error("Unable to write the file\r\n");
berajay 19:c765e311adbd 112 }
berajay 19:c765e311adbd 113
berajay 19:c765e311adbd 114 // Name file on monitor
berajay 19:c765e311adbd 115 printf("\n\t test_%03d \r\n", name);
berajay 19:c765e311adbd 116
berajay 19:c765e311adbd 117 fprintf(fp, " DATA of STM32F401RE with ISK01A2\r\n");
berajay 19:c765e311adbd 118 strftime (date,64, "%d %B %Y %H:%M", tp);
berajay 19:c765e311adbd 119 fprintf(fp, "\t %s \n", date); //DATE
berajay 19:c765e311adbd 120 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 121
berajay 19:c765e311adbd 122 printf("\r\n START NEW RUNNING \r\n");
berajay 19:c765e311adbd 123 t.start();
berajay 19:c765e311adbd 124 } else { // button is pressed but live_writing is true
berajay 19:c765e311adbd 125
berajay 19:c765e311adbd 126 // Now we write into sd card all data storaged
berajay 19:c765e311adbd 127 t.stop();
berajay 19:c765e311adbd 128 int i;
berajay 19:c765e311adbd 129 //int elementi = sizeof(acc_x)/sizeof(int);
berajay 19:c765e311adbd 130
berajay 19:c765e311adbd 131 for (i=0; i<=n; i++){
berajay 19:c765e311adbd 132 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 19:c765e311adbd 133 //pc.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 134 }
berajay 19:c765e311adbd 135 t.reset();
berajay 19:c765e311adbd 136 fclose(fp);
berajay 19:c765e311adbd 137 pc.printf("File successfully written!\r\n");
berajay 19:c765e311adbd 138 live_writing = false;
berajay 19:c765e311adbd 139 wait(2);
berajay 19:c765e311adbd 140 }//end else
berajay 19:c765e311adbd 141 } //end if userbutton
berajay 19:c765e311adbd 142 if (live_writing==true){
berajay 19:c765e311adbd 143 acc_gyro->get_x_axes(x_axes); //Read data from LSM6DSL accelerometer
berajay 19:c765e311adbd 144 acc_x[n] = x_axes[0];
berajay 19:c765e311adbd 145 acc_y[n] = x_axes[1];
berajay 19:c765e311adbd 146 acc_z[n] = x_axes[2];
berajay 19:c765e311adbd 147
berajay 19:c765e311adbd 148 acc_gyro->get_g_axes(g_axes); //Read data from LSM6DSL gyroscope
berajay 19:c765e311adbd 149 gyro_x[n] = g_axes[0];
berajay 19:c765e311adbd 150 gyro_y[n] = g_axes[1];
berajay 19:c765e311adbd 151 gyro_z[n] = g_axes[2];
berajay 19:c765e311adbd 152
berajay 19:c765e311adbd 153 time[n] = t.read();
berajay 19:c765e311adbd 154 n+=1;
berajay 19:c765e311adbd 155
berajay 19:c765e311adbd 156 if (n==arr_lenght){
berajay 19:c765e311adbd 157 t.stop();
berajay 19:c765e311adbd 158 int i;
berajay 19:c765e311adbd 159
berajay 19:c765e311adbd 160 for (i=0; i<=n; i++){
berajay 19:c765e311adbd 161 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 19:c765e311adbd 162 //pc.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 163 }
berajay 19:c765e311adbd 164 t.reset();
berajay 19:c765e311adbd 165 fclose(fp);
berajay 19:c765e311adbd 166 pc.printf("File successfully written!\r\n");
berajay 19:c765e311adbd 167 live_writing = false;
berajay 19:c765e311adbd 168 wait(2);
berajay 19:c765e311adbd 169 }
berajay 19:c765e311adbd 170 }//end while writing
berajay 19:c765e311adbd 171 }//end while
berajay 19:c765e311adbd 172 }//end main
cparata 0:69566eea0fba 173