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@7:b69fa9bb320d, 2021-08-19 (annotated)
- Committer:
- tnanbu
- Date:
- Thu Aug 19 08:38:59 2021 +0000
- Revision:
- 7:b69fa9bb320d
- Parent:
- 6:bf4321ef0330
- Child:
- 8:7f80139df48d
Output acceleration test
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 | 7:b69fa9bb320d | 3 | #include "time.h" |
hakusan270 | 0:b76e4ba14765 | 4 | /* |
hakusan270 | 0:b76e4ba14765 | 5 | This basic example just shows how to read the ADC internal channels raw values. |
hakusan270 | 0:b76e4ba14765 | 6 | Please look in the corresponding device reference manual for a complete |
hakusan270 | 0:b76e4ba14765 | 7 | description of how to make a temperature sensor, VBat or Vref measurement. |
hakusan270 | 0:b76e4ba14765 | 8 | */ |
hakusan270 | 0:b76e4ba14765 | 9 | |
hakusan270 | 0:b76e4ba14765 | 10 | AnalogIn adc_temp(ADC_TEMP); |
hakusan270 | 0:b76e4ba14765 | 11 | AnalogIn adc_vref(ADC_VREF); |
hakusan270 | 0:b76e4ba14765 | 12 | /* UD-GS2 H/W define |
hakusan270 | 0:b76e4ba14765 | 13 | PIO_SWin PB_4 |
hakusan270 | 0:b76e4ba14765 | 14 | PIO_wkup PA_4 |
hakusan270 | 0:b76e4ba14765 | 15 | PIO_enable PB_0 |
hakusan270 | 0:b76e4ba14765 | 16 | PIO_intout1 PB_2 |
hakusan270 | 0:b76e4ba14765 | 17 | PIO_led PB_5 |
hakusan270 | 0:b76e4ba14765 | 18 | PIO_v20v PC_13 |
hakusan270 | 0:b76e4ba14765 | 19 | PIO_v18v PH_0 |
hakusan270 | 0:b76e4ba14765 | 20 | PIO_intout2 PH_1 |
hakusan270 | 0:b76e4ba14765 | 21 | PIO_spics PB_12 |
hakusan270 | 0:b76e4ba14765 | 22 | PIO_battryMonEn PA_5 |
hakusan270 | 5:fbeb85ebd47b | 23 | PB_7 SDA |
hakusan270 | 5:fbeb85ebd47b | 24 | PB_6 SCL |
hakusan270 | 5:fbeb85ebd47b | 25 | |
hakusan270 | 0:b76e4ba14765 | 26 | */ |
hakusan270 | 5:fbeb85ebd47b | 27 | //DigitalOut hx_clk(PB_7); |
hakusan270 | 5:fbeb85ebd47b | 28 | //DigitalIn hx_dt(PB_6); |
hakusan270 | 5:fbeb85ebd47b | 29 | //I2C i2cacc(p_sda, p_scl) |
hakusan270 | 5:fbeb85ebd47b | 30 | |
hakusan270 | 5:fbeb85ebd47b | 31 | #include "H3LIS331DL.h" |
hakusan270 | 5:fbeb85ebd47b | 32 | |
hakusan270 | 5:fbeb85ebd47b | 33 | H3LIS331DL h3dacc(PB_7,PB_6); |
hakusan270 | 5:fbeb85ebd47b | 34 | |
hakusan270 | 0:b76e4ba14765 | 35 | |
hakusan270 | 0:b76e4ba14765 | 36 | RawSerial pc(PA_9, PA_10,115200); //console UART |
hakusan270 | 0:b76e4ba14765 | 37 | LowPowerTicker interrput; |
hakusan270 | 0:b76e4ba14765 | 38 | SPI STSPI(PB_15, PB_14, PB_13); //mosi,miso,clk |
hakusan270 | 0:b76e4ba14765 | 39 | DigitalOut STSPICS(PB_12); |
rgoto | 6:bf4321ef0330 | 40 | |
rgoto | 6:bf4321ef0330 | 41 | SDFileSystem *sd = new SDFileSystem(PA_12, PA_11, PB_3, PA_15, "sd"); // mosi, miso, sclk, cs, name |
rgoto | 6:bf4321ef0330 | 42 | |
hakusan270 | 0:b76e4ba14765 | 43 | DigitalOut led(PB_5); |
hakusan270 | 1:025596ffc973 | 44 | int initLIS3DH(); |
hakusan270 | 1:025596ffc973 | 45 | int read3axes(short *tx,short *ty,short *tz); |
tnanbu | 7:b69fa9bb320d | 46 | //int readTemp(short *tmp); |
rgoto | 6:bf4321ef0330 | 47 | FILE *fp; |
hakusan270 | 0:b76e4ba14765 | 48 | |
hakusan270 | 0:b76e4ba14765 | 49 | int main() |
hakusan270 | 0:b76e4ba14765 | 50 | { |
tnanbu | 7:b69fa9bb320d | 51 | short x,y,z,count=0; |
tnanbu | 7:b69fa9bb320d | 52 | float ox,oy,oz,oldacc = 0; |
tnanbu | 7:b69fa9bb320d | 53 | double xyz[3],newacc=0; |
tnanbu | 7:b69fa9bb320d | 54 | //int ret = 0; |
tnanbu | 7:b69fa9bb320d | 55 | char buf[512]; |
tnanbu | 7:b69fa9bb320d | 56 | //char *retchar = NULL; |
tnanbu | 7:b69fa9bb320d | 57 | //time_t t;//24H = 86400s |
hakusan270 | 2:42900b8c9a14 | 58 | |
hakusan270 | 1:025596ffc973 | 59 | initLIS3DH(); |
hakusan270 | 1:025596ffc973 | 60 | |
tnanbu | 7:b69fa9bb320d | 61 | h3dacc.init(H3LIS331DL_ODR_100Hz, H3LIS331DL_NORMAL,H3LIS331DL_FULLSCALE_8);//これで初期化している FULLSCALE_8=400G |
tnanbu | 7:b69fa9bb320d | 62 | h3dacc.setHPFMode(H3LIS331DL_HPM_NORMAL_MODE_RES);//High Pass Filter ON |
hakusan270 | 5:fbeb85ebd47b | 63 | |
tnanbu | 7:b69fa9bb320d | 64 | //pc.printf("\nSTM32 ADC internal channels reading example\r\n"); |
tnanbu | 7:b69fa9bb320d | 65 | //pc.printf("\nSTM32 3D acc sensor example\r\n"); |
rgoto | 6:bf4321ef0330 | 66 | |
rgoto | 6:bf4321ef0330 | 67 | fp = fopen("/sd/testlog.txt", "a"); |
rgoto | 6:bf4321ef0330 | 68 | |
rgoto | 6:bf4321ef0330 | 69 | if (fp == NULL) |
rgoto | 6:bf4321ef0330 | 70 | { |
tnanbu | 7:b69fa9bb320d | 71 | //pc.printf("open error!!\r\n"); |
rgoto | 6:bf4321ef0330 | 72 | |
rgoto | 6:bf4321ef0330 | 73 | } |
rgoto | 6:bf4321ef0330 | 74 | else |
rgoto | 6:bf4321ef0330 | 75 | { |
tnanbu | 7:b69fa9bb320d | 76 | //pc.printf("SD opened\r\n"); |
tnanbu | 7:b69fa9bb320d | 77 | //fclose(fp); |
rgoto | 6:bf4321ef0330 | 78 | wait_ms(10); |
rgoto | 6:bf4321ef0330 | 79 | } |
rgoto | 6:bf4321ef0330 | 80 | |
hakusan270 | 0:b76e4ba14765 | 81 | while(1) { |
hakusan270 | 5:fbeb85ebd47b | 82 | //On board ACC sensor |
hakusan270 | 5:fbeb85ebd47b | 83 | x=y=z=0; |
hakusan270 | 1:025596ffc973 | 84 | read3axes(&x,&y,&z); |
tnanbu | 7:b69fa9bb320d | 85 | //readTemp(&tmp); |
tnanbu | 7:b69fa9bb320d | 86 | //pc.printf("x=%d y=%d z=%d tmperature=%d\r\n", x,y,z,tmp); |
tnanbu | 7:b69fa9bb320d | 87 | //t = time(NULL); |
tnanbu | 7:b69fa9bb320d | 88 | if(count == 5){ |
tnanbu | 7:b69fa9bb320d | 89 | ox = (float)x/1024.0f; |
tnanbu | 7:b69fa9bb320d | 90 | oy = (float)y/1024.0f; |
tnanbu | 7:b69fa9bb320d | 91 | oz = (float)z/1024.0f; |
tnanbu | 7:b69fa9bb320d | 92 | ox = ox * ox; |
tnanbu | 7:b69fa9bb320d | 93 | oy = oy * oy; |
tnanbu | 7:b69fa9bb320d | 94 | oz = oz * oz; |
tnanbu | 7:b69fa9bb320d | 95 | oldacc = sqrt(ox + oy + oz); |
tnanbu | 7:b69fa9bb320d | 96 | |
tnanbu | 7:b69fa9bb320d | 97 | //pc.printf("oldacc %ld %f",time(NULL),sqrt(powf((float)x/1024.0f,2) + powf((float)y/1024.0f,2) + powf((float)z/1024.0f,2))); |
tnanbu | 7:b69fa9bb320d | 98 | pc.printf("oldacc %ld, %f\r\n", time(NULL), oldacc); |
tnanbu | 7:b69fa9bb320d | 99 | //pc.printf("oldacc %ld x=%f y=%f z=%f\r\n", time(NULL), (float)x/1024.0f,(float)y/1024.0f,(float)z/1024.0f); |
tnanbu | 7:b69fa9bb320d | 100 | count = 0; |
tnanbu | 7:b69fa9bb320d | 101 | } |
hakusan270 | 5:fbeb85ebd47b | 102 | // Extra ACC sensor |
tnanbu | 7:b69fa9bb320d | 103 | //x=y=z=0; |
tnanbu | 7:b69fa9bb320d | 104 | //h3dacc.readXYZ(&x, &y, &z); |
tnanbu | 7:b69fa9bb320d | 105 | h3dacc.getAcceleration(xyz); |
tnanbu | 7:b69fa9bb320d | 106 | //t = time(NULL); |
tnanbu | 7:b69fa9bb320d | 107 | xyz[0] = xyz[0] * xyz[0]; |
tnanbu | 7:b69fa9bb320d | 108 | xyz[1] = xyz[1] * xyz[1]; |
tnanbu | 7:b69fa9bb320d | 109 | xyz[2] = xyz[2] * xyz[2]; |
tnanbu | 7:b69fa9bb320d | 110 | newacc = xyz[0] + xyz[1] + xyz[2]; |
tnanbu | 7:b69fa9bb320d | 111 | newacc = sqrt(newacc); |
tnanbu | 7:b69fa9bb320d | 112 | //pc.printf("newacc %ld x=%lf, y=%lf, z=%lf \r\n", time(NULL), xyz[0], xyz[1], xyz[2]); |
tnanbu | 7:b69fa9bb320d | 113 | pc.printf("newacc %ld, %lf\r\n", time(NULL), newacc); |
tnanbu | 7:b69fa9bb320d | 114 | //ret = fprintf(fp, "x=%lf, y=%lf, z=%lf \r\n", xyz[0], xyz[1], xyz[2]); |
tnanbu | 7:b69fa9bb320d | 115 | //pc.printf("fprintf ret:%d\r\n", ret); |
tnanbu | 7:b69fa9bb320d | 116 | /* |
tnanbu | 7:b69fa9bb320d | 117 | retchar = fgets(buf,64,fp); |
tnanbu | 7:b69fa9bb320d | 118 | if(!retchar){ |
tnanbu | 7:b69fa9bb320d | 119 | if(fp){ |
tnanbu | 7:b69fa9bb320d | 120 | fclose(fp); |
tnanbu | 7:b69fa9bb320d | 121 | fp = NULL; |
tnanbu | 7:b69fa9bb320d | 122 | } |
tnanbu | 7:b69fa9bb320d | 123 | } |
tnanbu | 7:b69fa9bb320d | 124 | else{ |
tnanbu | 7:b69fa9bb320d | 125 | pc.printf("%s\r\n",buf); |
tnanbu | 7:b69fa9bb320d | 126 | } |
tnanbu | 7:b69fa9bb320d | 127 | */ |
tnanbu | 7:b69fa9bb320d | 128 | |
tnanbu | 7:b69fa9bb320d | 129 | //pc.printf("High x=%d y=%d z=%d \r\n", x,y,z); |
hakusan270 | 5:fbeb85ebd47b | 130 | |
hakusan270 | 0:b76e4ba14765 | 131 | led = !led; |
tnanbu | 7:b69fa9bb320d | 132 | count++; |
tnanbu | 7:b69fa9bb320d | 133 | if(time(NULL) > 86400){ |
tnanbu | 7:b69fa9bb320d | 134 | //Create New File |
tnanbu | 7:b69fa9bb320d | 135 | fclose(fp); |
tnanbu | 7:b69fa9bb320d | 136 | //fp = fopen(); |
tnanbu | 7:b69fa9bb320d | 137 | } |
tnanbu | 7:b69fa9bb320d | 138 | wait(0.2); |
hakusan270 | 0:b76e4ba14765 | 139 | } |
hakusan270 | 0:b76e4ba14765 | 140 | } |
hakusan270 | 1:025596ffc973 | 141 | /*********** porting **************/ |
tnanbu | 7:b69fa9bb320d | 142 | |
hakusan270 | 1:025596ffc973 | 143 | void spiFormat(int b,int m) { |
hakusan270 | 1:025596ffc973 | 144 | STSPI.format(b,m); /* 8bit */ |
hakusan270 | 1:025596ffc973 | 145 | } |
hakusan270 | 1:025596ffc973 | 146 | void spiFrequency(int f){ |
hakusan270 | 1:025596ffc973 | 147 | STSPI.frequency(f); /* 1Mbps */ |
hakusan270 | 1:025596ffc973 | 148 | } |
hakusan270 | 1:025596ffc973 | 149 | void spiWriteCS(int cs) { |
hakusan270 | 1:025596ffc973 | 150 | STSPICS=cs; |
hakusan270 | 1:025596ffc973 | 151 | } |
hakusan270 | 1:025596ffc973 | 152 | int spiWrite(int wd) { |
hakusan270 | 1:025596ffc973 | 153 | return ( STSPI.write(wd)); |
hakusan270 | 1:025596ffc973 | 154 | } |
tnanbu | 7:b69fa9bb320d | 155 | |
tnanbu | 7:b69fa9bb320d | 156 | void error(const char* format, ...) { |
tnanbu | 7:b69fa9bb320d | 157 | } |