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: mbed SDFileSystem_
main.cpp@8:7f80139df48d, 2021-08-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |