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