I-O DATA DEV2 / Mbed 2 deprecated ud-gs4-R_400G_SD_Log_No2

Dependencies:   mbed SDFileSystem_

Committer:
tnanbu
Date:
Thu Aug 26 00:43:06 2021 +0000
Revision:
8:7f80139df48d
Parent:
7:b69fa9bb320d
Child:
11:2d5fcf102778
Accelerometer cannot be read in timer interrupt processing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hakusan270 0:b76e4ba14765 1 #include "mbed.h"
rgoto 6:bf4321ef0330 2 #include "SDFileSystem.h"
tnanbu 8:7f80139df48d 3 #include <time.h>
tnanbu 8:7f80139df48d 4 //#include "mbed_rtc_time.h"
tnanbu 8:7f80139df48d 5
hakusan270 0:b76e4ba14765 6 /*
hakusan270 0:b76e4ba14765 7 This basic example just shows how to read the ADC internal channels raw values.
hakusan270 0:b76e4ba14765 8 Please look in the corresponding device reference manual for a complete
hakusan270 0:b76e4ba14765 9 description of how to make a temperature sensor, VBat or Vref measurement.
hakusan270 0:b76e4ba14765 10 */
hakusan270 0:b76e4ba14765 11
hakusan270 0:b76e4ba14765 12 AnalogIn adc_temp(ADC_TEMP);
hakusan270 0:b76e4ba14765 13 AnalogIn adc_vref(ADC_VREF);
hakusan270 0:b76e4ba14765 14 /* UD-GS2 H/W define
hakusan270 0:b76e4ba14765 15 PIO_SWin PB_4
hakusan270 0:b76e4ba14765 16 PIO_wkup PA_4
hakusan270 0:b76e4ba14765 17 PIO_enable PB_0
hakusan270 0:b76e4ba14765 18 PIO_intout1 PB_2
hakusan270 0:b76e4ba14765 19 PIO_led PB_5
hakusan270 0:b76e4ba14765 20 PIO_v20v PC_13
hakusan270 0:b76e4ba14765 21 PIO_v18v PH_0
hakusan270 0:b76e4ba14765 22 PIO_intout2 PH_1
hakusan270 0:b76e4ba14765 23 PIO_spics PB_12
hakusan270 0:b76e4ba14765 24 PIO_battryMonEn PA_5
hakusan270 5:fbeb85ebd47b 25 PB_7 SDA
hakusan270 5:fbeb85ebd47b 26 PB_6 SCL
hakusan270 5:fbeb85ebd47b 27
hakusan270 0:b76e4ba14765 28 */
hakusan270 5:fbeb85ebd47b 29 //DigitalOut hx_clk(PB_7);
hakusan270 5:fbeb85ebd47b 30 //DigitalIn hx_dt(PB_6);
hakusan270 5:fbeb85ebd47b 31 //I2C i2cacc(p_sda, p_scl)
hakusan270 5:fbeb85ebd47b 32
hakusan270 5:fbeb85ebd47b 33 #include "H3LIS331DL.h"
hakusan270 5:fbeb85ebd47b 34
hakusan270 5:fbeb85ebd47b 35 H3LIS331DL h3dacc(PB_7,PB_6);
hakusan270 5:fbeb85ebd47b 36
hakusan270 0:b76e4ba14765 37 RawSerial pc(PA_9, PA_10,115200); //console UART
tnanbu 8:7f80139df48d 38 //LowPowerTicker interrput;
tnanbu 8:7f80139df48d 39 Ticker interrupt;
hakusan270 0:b76e4ba14765 40 SPI STSPI(PB_15, PB_14, PB_13); //mosi,miso,clk
hakusan270 0:b76e4ba14765 41 DigitalOut STSPICS(PB_12);
rgoto 6:bf4321ef0330 42
rgoto 6:bf4321ef0330 43 SDFileSystem *sd = new SDFileSystem(PA_12, PA_11, PB_3, PA_15, "sd"); // mosi, miso, sclk, cs, name
rgoto 6:bf4321ef0330 44
hakusan270 0:b76e4ba14765 45 DigitalOut led(PB_5);
tnanbu 8:7f80139df48d 46 //int gettimeofday(struct timeval *tv, void *tz);
hakusan270 1:025596ffc973 47 int initLIS3DH();
hakusan270 1:025596ffc973 48 int read3axes(short *tx,short *ty,short *tz);
tnanbu 7:b69fa9bb320d 49 //int readTemp(short *tmp);
tnanbu 8:7f80139df48d 50 FILE *fp1,*fp2,*fp;//fp1:LIS3DH, fp2:H3LIS331DL
tnanbu 8:7f80139df48d 51 int timecount = 0;
tnanbu 8:7f80139df48d 52 //static uint8_t buffer[512] = {};
tnanbu 8:7f80139df48d 53 char buffer1[512] = {};
tnanbu 8:7f80139df48d 54 char buffer2[512] = {};
tnanbu 8:7f80139df48d 55 char buffer[512] = {};
tnanbu 8:7f80139df48d 56 char stracc[32] = {};
tnanbu 8:7f80139df48d 57 char stracc1[32] = {};
tnanbu 8:7f80139df48d 58 char stracc2[32] = {};
tnanbu 8:7f80139df48d 59 bool write1 = false,write2 = false,writeflag = false;
tnanbu 8:7f80139df48d 60
tnanbu 8:7f80139df48d 61 void timer()
tnanbu 8:7f80139df48d 62 {
tnanbu 8:7f80139df48d 63 short x=0,y=0,z=0;
tnanbu 8:7f80139df48d 64 float lis3dh_acc = 0;
tnanbu 8:7f80139df48d 65 double xyz[3]={},h3lis331dl_acc=0;
tnanbu 8:7f80139df48d 66 //char stracc[32] = {};
tnanbu 8:7f80139df48d 67
tnanbu 8:7f80139df48d 68 //H3LIS331DL
tnanbu 8:7f80139df48d 69 h3dacc.getAcceleration(xyz);
tnanbu 8:7f80139df48d 70 pc.printf("x:%lf,y:%lf,z:%lf\r\n",xyz[0],xyz[1],xyz[2]); //!!!If you read here, you cannot get acceleration!!!
tnanbu 8:7f80139df48d 71 //h3lis331dl_acc = sqrt(xyz[0]*xyz[0] + xyz[1]*xyz[1] + xyz[2]*xyz[2]);
tnanbu 8:7f80139df48d 72 //sprintf(stracc2,"%ld,%lf\r\n",time(NULL),h3lis331dl_acc);
tnanbu 8:7f80139df48d 73 //pc.printf("%s",stracc2);
tnanbu 8:7f80139df48d 74 //if(strlen(buffer)+strlen(stracc2) > 512){
tnanbu 8:7f80139df48d 75 //pc.printf("buffer over. write file2\r\n");
tnanbu 8:7f80139df48d 76 //writeflag = true;
tnanbu 8:7f80139df48d 77 //}
tnanbu 8:7f80139df48d 78 //else{
tnanbu 8:7f80139df48d 79 //sprintf(buffer,"%s%s",buffer,stracc2);
tnanbu 8:7f80139df48d 80 //}
tnanbu 8:7f80139df48d 81
tnanbu 8:7f80139df48d 82
tnanbu 8:7f80139df48d 83 //if(timecount == 10){
tnanbu 8:7f80139df48d 84 //pc.printf("calc lis3dh acc\r\n");
tnanbu 8:7f80139df48d 85 //LIS3DH
tnanbu 8:7f80139df48d 86 /*
tnanbu 8:7f80139df48d 87 read3axes(&x,&y,&z);
tnanbu 8:7f80139df48d 88 lis3dh_acc = sqrt( (float)x/1024.0f * (float)x/1024 + (float)y/1024.0f * (float)y/1024 + (float)z/1024.0f * (float)z/1024);
tnanbu 8:7f80139df48d 89 sprintf(stracc1,"%ld,%lf\r\n",time(NULL),lis3dh_acc);
tnanbu 8:7f80139df48d 90 pc.printf("lis3dh:%s",stracc1);
tnanbu 8:7f80139df48d 91 //if(strlen(buffer1)+ strlen(stracc1)> 512){
tnanbu 8:7f80139df48d 92 if(strlen(buffer)+ strlen(stracc1)> 512){
tnanbu 8:7f80139df48d 93 //pc.printf("buffer1 over. write file1\r\n");
tnanbu 8:7f80139df48d 94 //write1 = true;
tnanbu 8:7f80139df48d 95 writeflag = true;
tnanbu 8:7f80139df48d 96 }
tnanbu 8:7f80139df48d 97 else{
tnanbu 8:7f80139df48d 98 sprintf(buffer1,"%s%s",buffer1,stracc1);
tnanbu 8:7f80139df48d 99 }
tnanbu 8:7f80139df48d 100 */
tnanbu 8:7f80139df48d 101 //timecount = 0;
tnanbu 8:7f80139df48d 102 //}
tnanbu 8:7f80139df48d 103
tnanbu 8:7f80139df48d 104 //timecount++;
tnanbu 8:7f80139df48d 105 }
hakusan270 0:b76e4ba14765 106
hakusan270 0:b76e4ba14765 107 int main()
hakusan270 0:b76e4ba14765 108 {
tnanbu 8:7f80139df48d 109
tnanbu 8:7f80139df48d 110 int lognum1 = 0, lognum2 = 0,lognum=0;
tnanbu 8:7f80139df48d 111 char filename[20] = {};
tnanbu 8:7f80139df48d 112 //char filename1[20]={};
tnanbu 8:7f80139df48d 113 //char filename2[20]={};
tnanbu 8:7f80139df48d 114 int ret = 0;
tnanbu 8:7f80139df48d 115 double abc[3]={};
hakusan270 2:42900b8c9a14 116
hakusan270 1:025596ffc973 117 initLIS3DH();
hakusan270 1:025596ffc973 118
tnanbu 7:b69fa9bb320d 119 h3dacc.init(H3LIS331DL_ODR_100Hz, H3LIS331DL_NORMAL,H3LIS331DL_FULLSCALE_8);//これで初期化している FULLSCALE_8=400G
tnanbu 7:b69fa9bb320d 120 h3dacc.setHPFMode(H3LIS331DL_HPM_NORMAL_MODE_RES);//High Pass Filter ON
tnanbu 8:7f80139df48d 121 //h3dacc.setHPFCutOFF(H3LIS331DL_HPFCF_1);
hakusan270 5:fbeb85ebd47b 122
tnanbu 7:b69fa9bb320d 123 //pc.printf("\nSTM32 ADC internal channels reading example\r\n");
tnanbu 7:b69fa9bb320d 124 //pc.printf("\nSTM32 3D acc sensor example\r\n");
rgoto 6:bf4321ef0330 125
tnanbu 8:7f80139df48d 126 //sprintf(filename,"/sd/acclog_%d",lognum);
tnanbu 8:7f80139df48d 127 //sprintf(filename1,"/sd/lis3dh_%d",lognum1);
tnanbu 8:7f80139df48d 128 //sprintf(filename2,"/sd/h3lis331dl_%d",lognum2);
tnanbu 8:7f80139df48d 129 //sprintf(filename2,"/sd/h3lis_%d",lognum2);
tnanbu 8:7f80139df48d 130
tnanbu 8:7f80139df48d 131 /*
tnanbu 8:7f80139df48d 132 fp = fopen(filename,"a");
tnanbu 8:7f80139df48d 133 if(!fp){
tnanbu 8:7f80139df48d 134 pc.printf("fp open failed:%s\r\n",filename);
rgoto 6:bf4321ef0330 135 }
tnanbu 8:7f80139df48d 136 */
tnanbu 8:7f80139df48d 137
tnanbu 8:7f80139df48d 138 /*
tnanbu 8:7f80139df48d 139 fp1 = fopen(filename1,"a");
tnanbu 8:7f80139df48d 140 if(!fp1){
tnanbu 8:7f80139df48d 141 pc.printf("fp1(%s) open failed\r\n",filename1);
tnanbu 8:7f80139df48d 142 }
tnanbu 8:7f80139df48d 143 fp2 = fopen(filename2,"a");
tnanbu 8:7f80139df48d 144 if(!fp2){
tnanbu 8:7f80139df48d 145 pc.printf("fp2(%s) open failed\r\n",filename2);
tnanbu 8:7f80139df48d 146 }
tnanbu 8:7f80139df48d 147 */
tnanbu 8:7f80139df48d 148
tnanbu 8:7f80139df48d 149 interrupt.attach_us(&timer,200000);//200ms
rgoto 6:bf4321ef0330 150
hakusan270 0:b76e4ba14765 151 while(1) {
hakusan270 5:fbeb85ebd47b 152 //On board ACC sensor
tnanbu 8:7f80139df48d 153 //pc.printf("write1:%d,write2:%d\r\n",write1,write2);
tnanbu 8:7f80139df48d 154 /*
tnanbu 8:7f80139df48d 155 if(write1){
tnanbu 8:7f80139df48d 156 pc.printf("write1\r\n");
tnanbu 8:7f80139df48d 157 ret = fprintf(fp1,"%s",buffer1);
tnanbu 8:7f80139df48d 158 //pc.printf("fp1 %d outputed\r\n",ret);
tnanbu 8:7f80139df48d 159 pc.printf("write buffer1:%d\r\n",ret);
tnanbu 8:7f80139df48d 160 memset(buffer1,0,sizeof(buffer1));
tnanbu 8:7f80139df48d 161 sprintf(buffer1,"%s",stracc1);
tnanbu 8:7f80139df48d 162 write1 = false;
tnanbu 7:b69fa9bb320d 163 }
tnanbu 8:7f80139df48d 164 //else{
tnanbu 8:7f80139df48d 165 //pc.printf("%d,%d\r\n",strlen(buffer1),timecount);
tnanbu 8:7f80139df48d 166 //}
tnanbu 8:7f80139df48d 167 */
tnanbu 8:7f80139df48d 168
tnanbu 8:7f80139df48d 169 // Extra ACC sensor
tnanbu 8:7f80139df48d 170 //h3dacc.getAcceleration(abc); //If you read here, you can get acceleration
tnanbu 8:7f80139df48d 171 //pc.printf("new x:%lf,y:%lf,z:%lf\r\n",abc[0],abc[1],abc[2]);
tnanbu 8:7f80139df48d 172 /*
tnanbu 8:7f80139df48d 173 if(writeflag){
tnanbu 8:7f80139df48d 174 ret = fprintf(fp,"%s",buffer);
tnanbu 8:7f80139df48d 175 pc.printf("write buffer:%d\r\n",ret);
tnanbu 8:7f80139df48d 176 memset(buffer,0,sizeof(buffer));
tnanbu 8:7f80139df48d 177 sprintf(buffer,"%s",stracc2);
tnanbu 8:7f80139df48d 178 writeflag = false;
tnanbu 7:b69fa9bb320d 179 }
tnanbu 7:b69fa9bb320d 180 else{
tnanbu 8:7f80139df48d 181 pc.printf("%d,%d\r\n",strlen(buffer),timecount);
tnanbu 8:7f80139df48d 182 }
tnanbu 8:7f80139df48d 183 */
tnanbu 8:7f80139df48d 184 led = !led;
tnanbu 8:7f80139df48d 185 /*
tnanbu 8:7f80139df48d 186 if(time(NULL) > 86400){
tnanbu 8:7f80139df48d 187 //Create New File
tnanbu 8:7f80139df48d 188 set_time(NULL);
tnanbu 8:7f80139df48d 189 fclose(fp1);
tnanbu 8:7f80139df48d 190 fclose(fp2);
tnanbu 8:7f80139df48d 191 lognum1++;
tnanbu 8:7f80139df48d 192 lognum2++;
tnanbu 8:7f80139df48d 193 sprintf(filename1,"/sd/lis3dh_%d",lognum1);
tnanbu 8:7f80139df48d 194 sprintf(filename2,"/sd/h3lis331dl_%d",lognum2);
tnanbu 8:7f80139df48d 195 fp1 = fopen(filename1,"a");
tnanbu 8:7f80139df48d 196 if(!fp1){
tnanbu 8:7f80139df48d 197 pc.printf("fp1")
tnanbu 8:7f80139df48d 198 }
tnanbu 8:7f80139df48d 199 fp2 = fopen(filename2,"a");
tnanbu 7:b69fa9bb320d 200 }
tnanbu 7:b69fa9bb320d 201 */
tnanbu 8:7f80139df48d 202 wait_ms(200);
tnanbu 8:7f80139df48d 203 //wait(1);
hakusan270 0:b76e4ba14765 204 }
hakusan270 0:b76e4ba14765 205 }
hakusan270 1:025596ffc973 206 /*********** porting **************/
tnanbu 7:b69fa9bb320d 207
hakusan270 1:025596ffc973 208 void spiFormat(int b,int m) {
hakusan270 1:025596ffc973 209 STSPI.format(b,m); /* 8bit */
hakusan270 1:025596ffc973 210 }
hakusan270 1:025596ffc973 211 void spiFrequency(int f){
hakusan270 1:025596ffc973 212 STSPI.frequency(f); /* 1Mbps */
hakusan270 1:025596ffc973 213 }
hakusan270 1:025596ffc973 214 void spiWriteCS(int cs) {
hakusan270 1:025596ffc973 215 STSPICS=cs;
hakusan270 1:025596ffc973 216 }
hakusan270 1:025596ffc973 217 int spiWrite(int wd) {
hakusan270 1:025596ffc973 218 return ( STSPI.write(wd));
hakusan270 1:025596ffc973 219 }
tnanbu 7:b69fa9bb320d 220
tnanbu 7:b69fa9bb320d 221 void error(const char* format, ...) {
tnanbu 8:7f80139df48d 222 return;
tnanbu 7:b69fa9bb320d 223 }