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@38:87b7b3de6e88, 2021-09-10 (annotated)
- Committer:
- tnanbu
- Date:
- Fri Sep 10 06:41:37 2021 +0000
- Revision:
- 38:87b7b3de6e88
- Parent:
- 37:1b459e0ef847
- Child:
- 39:75f7b67a5747
program end for button
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 | 28:8bda44be0dd0 | 3 | #include <errno.h> |
tnanbu | 37:1b459e0ef847 | 4 | #include <stdio.h> |
tnanbu | 37:1b459e0ef847 | 5 | #include <FileHandle.h> |
tnanbu | 37:1b459e0ef847 | 6 | #include <mbed_poll.h> |
tnanbu | 8:7f80139df48d | 7 | |
hakusan270 | 0:b76e4ba14765 | 8 | /* |
hakusan270 | 0:b76e4ba14765 | 9 | This basic example just shows how to read the ADC internal channels raw values. |
hakusan270 | 0:b76e4ba14765 | 10 | Please look in the corresponding device reference manual for a complete |
hakusan270 | 0:b76e4ba14765 | 11 | description of how to make a temperature sensor, VBat or Vref measurement. |
hakusan270 | 0:b76e4ba14765 | 12 | */ |
hakusan270 | 0:b76e4ba14765 | 13 | |
hakusan270 | 0:b76e4ba14765 | 14 | AnalogIn adc_temp(ADC_TEMP); |
hakusan270 | 0:b76e4ba14765 | 15 | AnalogIn adc_vref(ADC_VREF); |
tnanbu | 11:2d5fcf102778 | 16 | /* UD-GS2 H/W define |
tnanbu | 11:2d5fcf102778 | 17 | PIO_SWin PB_4 |
tnanbu | 11:2d5fcf102778 | 18 | PIO_wkup PA_4 |
hakusan270 | 0:b76e4ba14765 | 19 | PIO_enable PB_0 |
hakusan270 | 0:b76e4ba14765 | 20 | PIO_intout1 PB_2 |
hakusan270 | 0:b76e4ba14765 | 21 | PIO_led PB_5 |
hakusan270 | 0:b76e4ba14765 | 22 | PIO_v20v PC_13 |
hakusan270 | 0:b76e4ba14765 | 23 | PIO_v18v PH_0 |
hakusan270 | 0:b76e4ba14765 | 24 | PIO_intout2 PH_1 |
hakusan270 | 0:b76e4ba14765 | 25 | PIO_spics PB_12 |
hakusan270 | 0:b76e4ba14765 | 26 | PIO_battryMonEn PA_5 |
hakusan270 | 5:fbeb85ebd47b | 27 | PB_7 SDA |
hakusan270 | 5:fbeb85ebd47b | 28 | PB_6 SCL |
tnanbu | 11:2d5fcf102778 | 29 | |
hakusan270 | 0:b76e4ba14765 | 30 | */ |
hakusan270 | 5:fbeb85ebd47b | 31 | //DigitalOut hx_clk(PB_7); |
hakusan270 | 5:fbeb85ebd47b | 32 | //DigitalIn hx_dt(PB_6); |
hakusan270 | 5:fbeb85ebd47b | 33 | //I2C i2cacc(p_sda, p_scl) |
hakusan270 | 5:fbeb85ebd47b | 34 | |
tnanbu | 13:df67ca499051 | 35 | //#include "H3LIS331DL.h" |
tnanbu | 13:df67ca499051 | 36 | |
tnanbu | 13:df67ca499051 | 37 | //#define TIMEINTERVAL |
hakusan270 | 5:fbeb85ebd47b | 38 | |
tnanbu | 13:df67ca499051 | 39 | //キャリブレーション 仮値 |
tnanbu | 31:4ac70aa71542 | 40 | //No.1 |
tnanbu | 34:6bffe97ae35d | 41 | #define OFFSET_X 220 |
tnanbu | 34:6bffe97ae35d | 42 | #define OFFSET_Y 220 |
tnanbu | 34:6bffe97ae35d | 43 | #define OFFSET_Z -40 |
tnanbu | 31:4ac70aa71542 | 44 | //No.2 |
tnanbu | 31:4ac70aa71542 | 45 | //#define OFFSET_X 375 |
tnanbu | 31:4ac70aa71542 | 46 | //#define OFFSET_Y 340 |
tnanbu | 31:4ac70aa71542 | 47 | //#define OFFSET_Z -200 |
tnanbu | 34:6bffe97ae35d | 48 | //#define OFFSET_X 0 |
tnanbu | 34:6bffe97ae35d | 49 | //#define OFFSET_Y 0 |
tnanbu | 34:6bffe97ae35d | 50 | //#define OFFSET_Z 0 |
tnanbu | 33:3369e5fe46aa | 51 | |
tnanbu | 33:3369e5fe46aa | 52 | #define DATA_SIZE 512 |
tnanbu | 33:3369e5fe46aa | 53 | //#define MBED_BUFF 512 |
tnanbu | 31:4ac70aa71542 | 54 | |
tnanbu | 11:2d5fcf102778 | 55 | |
tnanbu | 13:df67ca499051 | 56 | HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data); |
tnanbu | 13:df67ca499051 | 57 | uint8_t readEEPROMByte(uint32_t address); |
tnanbu | 13:df67ca499051 | 58 | |
tnanbu | 13:df67ca499051 | 59 | |
tnanbu | 13:df67ca499051 | 60 | //H3LIS331DL h3dacc(PB_7,PB_6); |
tnanbu | 13:df67ca499051 | 61 | I2C i2c(PB_7,PB_6); //NUCLEO pin assign |
hakusan270 | 5:fbeb85ebd47b | 62 | |
hakusan270 | 0:b76e4ba14765 | 63 | RawSerial pc(PA_9, PA_10,115200); //console UART |
tnanbu | 13:df67ca499051 | 64 | //LowPowerTicker interrupt; |
tnanbu | 18:2a42f4052139 | 65 | //Ticker interrupt; |
hakusan270 | 0:b76e4ba14765 | 66 | SPI STSPI(PB_15, PB_14, PB_13); //mosi,miso,clk |
hakusan270 | 0:b76e4ba14765 | 67 | DigitalOut STSPICS(PB_12); |
rgoto | 6:bf4321ef0330 | 68 | |
rgoto | 6:bf4321ef0330 | 69 | SDFileSystem *sd = new SDFileSystem(PA_12, PA_11, PB_3, PA_15, "sd"); // mosi, miso, sclk, cs, name |
rgoto | 6:bf4321ef0330 | 70 | |
tnanbu | 38:87b7b3de6e88 | 71 | DigitalOut myled(PB_5); |
tnanbu | 37:1b459e0ef847 | 72 | DigitalIn button(PB_4); |
tnanbu | 37:1b459e0ef847 | 73 | int btn_flag = 0; |
tnanbu | 37:1b459e0ef847 | 74 | |
hakusan270 | 1:025596ffc973 | 75 | int initLIS3DH(); |
hakusan270 | 1:025596ffc973 | 76 | int read3axes(short *tx,short *ty,short *tz); |
tnanbu | 13:df67ca499051 | 77 | int initLIS331(); |
tnanbu | 13:df67ca499051 | 78 | int read3axes331(short *tx,short *ty,short *tz); |
tnanbu | 13:df67ca499051 | 79 | int int_sqrt(unsigned int x); |
tnanbu | 7:b69fa9bb320d | 80 | //int readTemp(short *tmp); |
tnanbu | 11:2d5fcf102778 | 81 | FILE *fp1,*fp2;//fp1:H3LIS331DL, fp2:LIS3DH |
tnanbu | 13:df67ca499051 | 82 | unsigned long timecount = 0; |
tnanbu | 33:3369e5fe46aa | 83 | short oldcount = 0; |
tnanbu | 33:3369e5fe46aa | 84 | short newcount = 0; |
tnanbu | 28:8bda44be0dd0 | 85 | long max_g=0; |
tnanbu | 33:3369e5fe46aa | 86 | long tmp_max=0; |
tnanbu | 35:69e2bc347f0c | 87 | long tmp_max2=0; |
tnanbu | 33:3369e5fe46aa | 88 | short update=0; |
tnanbu | 33:3369e5fe46aa | 89 | char buffer1[DATA_SIZE] = {}; |
tnanbu | 33:3369e5fe46aa | 90 | char buffer2[DATA_SIZE] = {}; |
tnanbu | 31:4ac70aa71542 | 91 | char stracc1[32] = {}, stracc2[32] = {}; |
tnanbu | 13:df67ca499051 | 92 | int lognum1 = 0, lognum2 = 0; |
tnanbu | 33:3369e5fe46aa | 93 | char filename1[16]= {}; |
tnanbu | 33:3369e5fe46aa | 94 | char filename2[16]= {}; |
tnanbu | 19:2475d32bd93f | 95 | int ret = 0,init=1; |
tnanbu | 38:87b7b3de6e88 | 96 | short end_flag = 0; |
tnanbu | 11:2d5fcf102778 | 97 | |
tnanbu | 18:2a42f4052139 | 98 | /* |
tnanbu | 13:df67ca499051 | 99 | void timer(){ |
tnanbu | 15:12d0699ad423 | 100 | } |
tnanbu | 18:2a42f4052139 | 101 | */ |
tnanbu | 15:12d0699ad423 | 102 | |
tnanbu | 15:12d0699ad423 | 103 | void sub(){ |
tnanbu | 33:3369e5fe46aa | 104 | static short tx=0,ty=0,tz=0; |
tnanbu | 36:709c6fae0b2e | 105 | static short tx2=0,ty2=0,tz2=0; |
tnanbu | 33:3369e5fe46aa | 106 | static long scr = 0; |
tnanbu | 36:709c6fae0b2e | 107 | static long scr2 = 0; |
tnanbu | 33:3369e5fe46aa | 108 | static long ax,ay,az,as; |
tnanbu | 35:69e2bc347f0c | 109 | static long ax2,ay2,az2,as2; |
tnanbu | 13:df67ca499051 | 110 | |
tnanbu | 13:df67ca499051 | 111 | read3axes331(&tx,&ty,&tz); |
tnanbu | 13:df67ca499051 | 112 | //キャリブレーションの補正 |
tnanbu | 13:df67ca499051 | 113 | tx += OFFSET_X; |
tnanbu | 13:df67ca499051 | 114 | ty += OFFSET_Y; |
tnanbu | 13:df67ca499051 | 115 | tz += OFFSET_Z; |
tnanbu | 13:df67ca499051 | 116 | |
tnanbu | 13:df67ca499051 | 117 | //スカラー値変換 |
tnanbu | 18:2a42f4052139 | 118 | scr = int_sqrt( tx*tx + ty*ty + tz*tz);// 195mg/digit |
tnanbu | 33:3369e5fe46aa | 119 | //now_g = scr; |
tnanbu | 13:df67ca499051 | 120 | |
tnanbu | 33:3369e5fe46aa | 121 | ax+= tx; |
tnanbu | 33:3369e5fe46aa | 122 | ay+= ty; |
tnanbu | 33:3369e5fe46aa | 123 | az+= tz; |
tnanbu | 33:3369e5fe46aa | 124 | as+= scr; |
tnanbu | 35:69e2bc347f0c | 125 | //newcount++; |
tnanbu | 36:709c6fae0b2e | 126 | //pc.printf("%d,%d,x:%2.2f y:%2.2f,z:%2.2f scaler = %2.2f \r\n",timecount,time(NULL),(float)tx*0.005,(float)ty*0.005,(float)tz*0.005,(float)scr*0.005); |
tnanbu | 19:2475d32bd93f | 127 | //pc.printf("new x:%d y:%d,z:%d scaler = %d \r\n",tx,ty,tz,scr); |
tnanbu | 18:2a42f4052139 | 128 | |
tnanbu | 33:3369e5fe46aa | 129 | //Total Max G |
tnanbu | 13:df67ca499051 | 130 | if ( max_g < scr) { |
tnanbu | 13:df67ca499051 | 131 | max_g = scr; |
tnanbu | 38:87b7b3de6e88 | 132 | //update=1; |
tnanbu | 33:3369e5fe46aa | 133 | //pc.printf("%max g=%d \r\n",max_g); |
tnanbu | 13:df67ca499051 | 134 | //Save EEPROM |
tnanbu | 28:8bda44be0dd0 | 135 | for(int i = 0; i < 4; i++){ |
tnanbu | 38:87b7b3de6e88 | 136 | //pc.printf("writerom 0x%x\r\n",(max_g >> 8*i) & 0xFF); |
tnanbu | 28:8bda44be0dd0 | 137 | writeEEPROMByte(i, (max_g >> 8*i) & 0xFF); |
tnanbu | 28:8bda44be0dd0 | 138 | } |
tnanbu | 8:7f80139df48d | 139 | } |
tnanbu | 13:df67ca499051 | 140 | |
tnanbu | 36:709c6fae0b2e | 141 | //MAX G per cycle |
tnanbu | 33:3369e5fe46aa | 142 | if(tmp_max < scr){ |
tnanbu | 33:3369e5fe46aa | 143 | tmp_max = scr; |
tnanbu | 33:3369e5fe46aa | 144 | } |
tnanbu | 33:3369e5fe46aa | 145 | |
tnanbu | 36:709c6fae0b2e | 146 | //平均(/s) |
tnanbu | 36:709c6fae0b2e | 147 | if (newcount == 500) { |
tnanbu | 36:709c6fae0b2e | 148 | float asc = (float)as / 500.0f; |
tnanbu | 37:1b459e0ef847 | 149 | pc.printf("avarage(new) x:%2.2f,y:%2.2f,z:%2.2f,scaler=%2.2f,max:%2.2f\r\n", |
tnanbu | 37:1b459e0ef847 | 150 | (float)ax/500.0f*0.005,(float)ay/500.0f*0.005,(float)az/500.0f*0.005,(float)as/500.0f*0.005, (float)tmp_max*0.005); |
tnanbu | 36:709c6fae0b2e | 151 | sprintf(stracc1,"%d,%d,%2.2f,%2.2f\r\n",timecount,time(NULL),asc*0.005,(float)tmp_max*0.005); |
tnanbu | 33:3369e5fe46aa | 152 | |
tnanbu | 36:709c6fae0b2e | 153 | if((strlen(buffer1)+strlen(stracc1)) > DATA_SIZE) { |
tnanbu | 36:709c6fae0b2e | 154 | pc.printf("try write fp1:%d,%d\r\n",strlen(buffer1),strlen(stracc1)); |
tnanbu | 33:3369e5fe46aa | 155 | //ret = fprintf(fp1,"%s",buffer1); |
tnanbu | 33:3369e5fe46aa | 156 | ret = fwrite(buffer1,sizeof(char),strlen(buffer1),fp1); |
tnanbu | 33:3369e5fe46aa | 157 | if(ret < strlen(buffer1)){ |
tnanbu | 28:8bda44be0dd0 | 158 | pc.printf("fp1 write failed:%d. errno:%d. Reboot!!!\r\n",ret,errno); |
tnanbu | 13:df67ca499051 | 159 | NVIC_SystemReset(); |
tnanbu | 38:87b7b3de6e88 | 160 | } |
tnanbu | 8:7f80139df48d | 161 | memset(buffer1,0,sizeof(buffer1)); |
tnanbu | 8:7f80139df48d | 162 | sprintf(buffer1,"%s",stracc1); |
tnanbu | 35:69e2bc347f0c | 163 | } else { |
tnanbu | 11:2d5fcf102778 | 164 | sprintf(buffer1,"%s%s",buffer1,stracc1); |
tnanbu | 7:b69fa9bb320d | 165 | } |
tnanbu | 13:df67ca499051 | 166 | |
tnanbu | 33:3369e5fe46aa | 167 | as=ax=ay=az=0; |
tnanbu | 33:3369e5fe46aa | 168 | newcount = 0; |
tnanbu | 33:3369e5fe46aa | 169 | tmp_max = 0; |
tnanbu | 33:3369e5fe46aa | 170 | } |
tnanbu | 33:3369e5fe46aa | 171 | |
tnanbu | 35:69e2bc347f0c | 172 | if( (oldcount % 10) == 0){ |
tnanbu | 11:2d5fcf102778 | 173 | //LIS3DH |
tnanbu | 36:709c6fae0b2e | 174 | read3axes(&tx2,&ty2,&tz2); |
tnanbu | 36:709c6fae0b2e | 175 | scr2 = int_sqrt( tx2*tx2 + ty2*ty2 + tz2*tz2); |
tnanbu | 36:709c6fae0b2e | 176 | ax2+= tx2; |
tnanbu | 36:709c6fae0b2e | 177 | ay2+= ty2; |
tnanbu | 36:709c6fae0b2e | 178 | az2+= tz2; |
tnanbu | 36:709c6fae0b2e | 179 | as2+= scr2; |
tnanbu | 36:709c6fae0b2e | 180 | if(tmp_max2 < scr2){ |
tnanbu | 36:709c6fae0b2e | 181 | tmp_max2 = scr2; |
tnanbu | 35:69e2bc347f0c | 182 | } |
tnanbu | 36:709c6fae0b2e | 183 | //pc.printf("old %d,%d,x:%2.2f y:%2.2f,z:%2.2f scaler = %2.2f \r\n",timecount,time(NULL),(float)tx2*0.005,(float)ty2*0.005,(float)tz2*0.005,(float)scr2*0.005); |
tnanbu | 36:709c6fae0b2e | 184 | //pc.printf("%d,%d,old x:%d,y:%d,z:%d scaler = %d\r\n",timecount,time(NULL),tx,ty,tz,scr); |
tnanbu | 33:3369e5fe46aa | 185 | //sprintf(stracc2,"%d,%d,%d\r\n",timecount,time(NULL),scr); |
tnanbu | 11:2d5fcf102778 | 186 | //pc.printf("lis3dh:%s",stracc2); |
tnanbu | 36:709c6fae0b2e | 187 | if(oldcount == 5000){ |
tnanbu | 36:709c6fae0b2e | 188 | float asc2 = (float)as2 / 500.0f; |
tnanbu | 38:87b7b3de6e88 | 189 | //pc.printf("avarage(old) x:%2.2f,y:%2.2f,z:%2.2f,scaler=%2.2f,max:%2.2f\r\n", |
tnanbu | 38:87b7b3de6e88 | 190 | //(float)ax2/500.0f*0.005,(float)ay2/500.0f*0.005,(float)az2/500.0f*0.005,(float)as2/500.0f*0.005, (float)tmp_max2*0.005); |
tnanbu | 36:709c6fae0b2e | 191 | sprintf(stracc2,"%d,%d,%2.2f,%2.2f\r\n",timecount,time(NULL),asc2*0.005,(float)tmp_max2*0.005); |
tnanbu | 35:69e2bc347f0c | 192 | |
tnanbu | 36:709c6fae0b2e | 193 | if( (strlen(buffer2)+ strlen(stracc2)) > DATA_SIZE) { |
tnanbu | 36:709c6fae0b2e | 194 | pc.printf("try write fp2:%d,%d\r\n",strlen(buffer2),strlen(stracc2)); |
tnanbu | 35:69e2bc347f0c | 195 | ret = fwrite(buffer2,sizeof(char),strlen(buffer2),fp2); |
tnanbu | 35:69e2bc347f0c | 196 | if(ret < strlen(buffer2)){ |
tnanbu | 35:69e2bc347f0c | 197 | pc.printf("fp2 write failed:%d. errno:%d. Reboot!!!\r\n",ret,errno); |
tnanbu | 35:69e2bc347f0c | 198 | NVIC_SystemReset(); |
tnanbu | 35:69e2bc347f0c | 199 | } |
tnanbu | 38:87b7b3de6e88 | 200 | |
tnanbu | 35:69e2bc347f0c | 201 | memset(buffer2,0,sizeof(buffer2)); |
tnanbu | 35:69e2bc347f0c | 202 | sprintf(buffer2,"%s",stracc2); |
tnanbu | 35:69e2bc347f0c | 203 | } else { |
tnanbu | 35:69e2bc347f0c | 204 | sprintf(buffer2,"%s%s",buffer2,stracc2); |
tnanbu | 13:df67ca499051 | 205 | } |
tnanbu | 35:69e2bc347f0c | 206 | |
tnanbu | 35:69e2bc347f0c | 207 | oldcount = 0; |
tnanbu | 35:69e2bc347f0c | 208 | as2=ax2=ay2=az2=0; |
tnanbu | 35:69e2bc347f0c | 209 | tmp_max2 = 0; |
tnanbu | 7:b69fa9bb320d | 210 | } |
tnanbu | 11:2d5fcf102778 | 211 | } |
tnanbu | 38:87b7b3de6e88 | 212 | |
tnanbu | 38:87b7b3de6e88 | 213 | if((time(NULL) % 300) == 0){ |
tnanbu | 38:87b7b3de6e88 | 214 | //5 minutes passed. Save File. |
tnanbu | 38:87b7b3de6e88 | 215 | if(fp1){ |
tnanbu | 38:87b7b3de6e88 | 216 | fclose(fp1); |
tnanbu | 38:87b7b3de6e88 | 217 | fp1 = NULL; |
tnanbu | 38:87b7b3de6e88 | 218 | } |
tnanbu | 38:87b7b3de6e88 | 219 | if(fp2){ |
tnanbu | 38:87b7b3de6e88 | 220 | fclose(fp2); |
tnanbu | 38:87b7b3de6e88 | 221 | fp2 = NULL; |
tnanbu | 38:87b7b3de6e88 | 222 | } |
tnanbu | 38:87b7b3de6e88 | 223 | fp1 = fopen(filename1,"ab"); |
tnanbu | 38:87b7b3de6e88 | 224 | if(!fp1){ |
tnanbu | 38:87b7b3de6e88 | 225 | pc.printf("fp1 create file failed:%d\r\n",errno); |
tnanbu | 38:87b7b3de6e88 | 226 | NVIC_SystemReset(); |
tnanbu | 38:87b7b3de6e88 | 227 | } |
tnanbu | 38:87b7b3de6e88 | 228 | fp2 = fopen(filename2,"ab"); |
tnanbu | 38:87b7b3de6e88 | 229 | if(!fp2){ |
tnanbu | 38:87b7b3de6e88 | 230 | pc.printf("fp2 create file failed:%d\r\n",errno); |
tnanbu | 38:87b7b3de6e88 | 231 | NVIC_SystemReset(); |
tnanbu | 38:87b7b3de6e88 | 232 | } |
tnanbu | 38:87b7b3de6e88 | 233 | } |
tnanbu | 19:2475d32bd93f | 234 | |
tnanbu | 13:df67ca499051 | 235 | if(time(NULL) > 86400){ |
tnanbu | 8:7f80139df48d | 236 | //Create New File |
tnanbu | 8:7f80139df48d | 237 | set_time(NULL); |
tnanbu | 11:2d5fcf102778 | 238 | timecount = 0; |
tnanbu | 36:709c6fae0b2e | 239 | if(fp1){ |
tnanbu | 36:709c6fae0b2e | 240 | fclose(fp1); |
tnanbu | 36:709c6fae0b2e | 241 | //free(fp1); |
tnanbu | 36:709c6fae0b2e | 242 | fp1 = NULL; |
tnanbu | 36:709c6fae0b2e | 243 | } |
tnanbu | 36:709c6fae0b2e | 244 | if(fp2){ |
tnanbu | 36:709c6fae0b2e | 245 | fclose(fp2); |
tnanbu | 36:709c6fae0b2e | 246 | //free(fp2); |
tnanbu | 36:709c6fae0b2e | 247 | fp2 = NULL; |
tnanbu | 36:709c6fae0b2e | 248 | } |
tnanbu | 8:7f80139df48d | 249 | lognum1++; |
tnanbu | 8:7f80139df48d | 250 | lognum2++; |
tnanbu | 13:df67ca499051 | 251 | sprintf(filename1,"/sd/new_%d",lognum1); |
tnanbu | 13:df67ca499051 | 252 | sprintf(filename2,"/sd/old_%d",lognum2); |
tnanbu | 33:3369e5fe46aa | 253 | fp1 = fopen(filename1,"ab"); |
tnanbu | 8:7f80139df48d | 254 | if(!fp1){ |
tnanbu | 28:8bda44be0dd0 | 255 | pc.printf("fp1 create file failed:%d\r\n",errno); |
tnanbu | 13:df67ca499051 | 256 | NVIC_SystemReset(); |
tnanbu | 8:7f80139df48d | 257 | } |
tnanbu | 33:3369e5fe46aa | 258 | fp2 = fopen(filename2,"ab"); |
tnanbu | 11:2d5fcf102778 | 259 | if(!fp2){ |
tnanbu | 28:8bda44be0dd0 | 260 | pc.printf("fp2 create file failed:%d\r\n",errno); |
tnanbu | 13:df67ca499051 | 261 | NVIC_SystemReset(); |
tnanbu | 11:2d5fcf102778 | 262 | } |
tnanbu | 31:4ac70aa71542 | 263 | pc.printf("Create New File:%d,%d",timecount,time(NULL)); |
tnanbu | 7:b69fa9bb320d | 264 | } |
tnanbu | 37:1b459e0ef847 | 265 | |
tnanbu | 37:1b459e0ef847 | 266 | //Button Check |
tnanbu | 37:1b459e0ef847 | 267 | if(button.read() == 1){ |
tnanbu | 37:1b459e0ef847 | 268 | btn_flag++; |
tnanbu | 37:1b459e0ef847 | 269 | //pc.printf("Button pressed:%d\r\n",btn_flag); |
tnanbu | 37:1b459e0ef847 | 270 | } |
tnanbu | 37:1b459e0ef847 | 271 | else{ |
tnanbu | 37:1b459e0ef847 | 272 | btn_flag = 0; |
tnanbu | 37:1b459e0ef847 | 273 | } |
tnanbu | 37:1b459e0ef847 | 274 | |
tnanbu | 37:1b459e0ef847 | 275 | if(btn_flag > 200){ |
tnanbu | 37:1b459e0ef847 | 276 | //pc.printf("Button Pressed. Close fp\r\n"); |
tnanbu | 37:1b459e0ef847 | 277 | if(fp1){ |
tnanbu | 37:1b459e0ef847 | 278 | fclose(fp1); |
tnanbu | 37:1b459e0ef847 | 279 | fp1 = NULL; |
tnanbu | 37:1b459e0ef847 | 280 | } |
tnanbu | 37:1b459e0ef847 | 281 | if(fp2){ |
tnanbu | 37:1b459e0ef847 | 282 | fclose(fp2); |
tnanbu | 37:1b459e0ef847 | 283 | fp2 = NULL; |
tnanbu | 37:1b459e0ef847 | 284 | } |
tnanbu | 38:87b7b3de6e88 | 285 | btn_flag = 0; |
tnanbu | 38:87b7b3de6e88 | 286 | myled = 0; |
tnanbu | 38:87b7b3de6e88 | 287 | end_flag = 1; |
tnanbu | 38:87b7b3de6e88 | 288 | wait(1); |
tnanbu | 37:1b459e0ef847 | 289 | } |
tnanbu | 13:df67ca499051 | 290 | } |
tnanbu | 13:df67ca499051 | 291 | |
tnanbu | 13:df67ca499051 | 292 | int main() |
tnanbu | 13:df67ca499051 | 293 | { |
tnanbu | 36:709c6fae0b2e | 294 | i2c.frequency(400000); |
tnanbu | 33:3369e5fe46aa | 295 | short retry = 0; |
tnanbu | 13:df67ca499051 | 296 | sprintf(filename1,"/sd/new_%d",lognum1); |
tnanbu | 13:df67ca499051 | 297 | sprintf(filename2,"/sd/old_%d",lognum2); |
tnanbu | 13:df67ca499051 | 298 | |
tnanbu | 33:3369e5fe46aa | 299 | while(!fp1 && retry < 5){ |
tnanbu | 33:3369e5fe46aa | 300 | fp1 = fopen(filename1,"ab"); |
tnanbu | 33:3369e5fe46aa | 301 | if(!fp1) { |
tnanbu | 33:3369e5fe46aa | 302 | pc.printf("fp1(%s) open failed errno:%d\r\n",filename1,errno); |
tnanbu | 33:3369e5fe46aa | 303 | //NVIC_SystemReset(); |
tnanbu | 33:3369e5fe46aa | 304 | } |
tnanbu | 33:3369e5fe46aa | 305 | retry++; |
tnanbu | 33:3369e5fe46aa | 306 | wait_ms(100); |
tnanbu | 19:2475d32bd93f | 307 | } |
tnanbu | 33:3369e5fe46aa | 308 | retry = 0; |
tnanbu | 33:3369e5fe46aa | 309 | while(!fp2 && retry < 5){ |
tnanbu | 33:3369e5fe46aa | 310 | fp2 = fopen(filename2,"ab"); |
tnanbu | 33:3369e5fe46aa | 311 | if(!fp2) { |
tnanbu | 33:3369e5fe46aa | 312 | pc.printf("fp2(%s) open failed errno:%d\r\n",filename2,errno); |
tnanbu | 33:3369e5fe46aa | 313 | //NVIC_SystemReset(); |
tnanbu | 33:3369e5fe46aa | 314 | } |
tnanbu | 36:709c6fae0b2e | 315 | retry++; |
tnanbu | 33:3369e5fe46aa | 316 | wait_ms(100); |
tnanbu | 13:df67ca499051 | 317 | } |
tnanbu | 28:8bda44be0dd0 | 318 | |
tnanbu | 28:8bda44be0dd0 | 319 | //Read Max G |
tnanbu | 28:8bda44be0dd0 | 320 | for(int i = 0; i < 4; i++){ |
tnanbu | 28:8bda44be0dd0 | 321 | //pc.printf("readEEPROM:0x%x\r\n",readEEPROMByte(i)); |
tnanbu | 28:8bda44be0dd0 | 322 | max_g |= readEEPROMByte(i) << 8*i; |
tnanbu | 28:8bda44be0dd0 | 323 | } |
tnanbu | 28:8bda44be0dd0 | 324 | pc.printf("read max_g from eeprom:%d\r\n",max_g); |
tnanbu | 13:df67ca499051 | 325 | |
tnanbu | 19:2475d32bd93f | 326 | while(init) { |
tnanbu | 19:2475d32bd93f | 327 | init = initLIS331(); |
tnanbu | 19:2475d32bd93f | 328 | initLIS3DH(); |
tnanbu | 19:2475d32bd93f | 329 | pc.printf(" init acc sensor %d\r\n",ret); |
tnanbu | 19:2475d32bd93f | 330 | wait_ms(100); |
tnanbu | 13:df67ca499051 | 331 | } |
tnanbu | 18:2a42f4052139 | 332 | //interrupt.attach_us(&timer,20000);//20ms |
tnanbu | 38:87b7b3de6e88 | 333 | while(!end_flag) |
tnanbu | 13:df67ca499051 | 334 | { |
tnanbu | 35:69e2bc347f0c | 335 | timecount++; |
tnanbu | 35:69e2bc347f0c | 336 | oldcount++; |
tnanbu | 35:69e2bc347f0c | 337 | newcount++; |
tnanbu | 28:8bda44be0dd0 | 338 | sub(); |
tnanbu | 36:709c6fae0b2e | 339 | //wait_ms(20); |
tnanbu | 36:709c6fae0b2e | 340 | //wait_ms(1); |
hakusan270 | 0:b76e4ba14765 | 341 | } |
tnanbu | 38:87b7b3de6e88 | 342 | pc.printf("Program End.\r\n"); |
tnanbu | 38:87b7b3de6e88 | 343 | return 0; |
hakusan270 | 0:b76e4ba14765 | 344 | } |
tnanbu | 11:2d5fcf102778 | 345 | /*********** porting **************/ |
tnanbu | 11:2d5fcf102778 | 346 | void spiFormat(int b,int m) |
tnanbu | 11:2d5fcf102778 | 347 | { |
tnanbu | 11:2d5fcf102778 | 348 | STSPI.format(b,m); /* 8bit */ |
hakusan270 | 1:025596ffc973 | 349 | } |
tnanbu | 11:2d5fcf102778 | 350 | void spiFrequency(int f) |
tnanbu | 11:2d5fcf102778 | 351 | { |
hakusan270 | 1:025596ffc973 | 352 | STSPI.frequency(f); /* 1Mbps */ |
hakusan270 | 1:025596ffc973 | 353 | } |
tnanbu | 11:2d5fcf102778 | 354 | void spiWriteCS(int cs) |
tnanbu | 11:2d5fcf102778 | 355 | { |
hakusan270 | 1:025596ffc973 | 356 | STSPICS=cs; |
hakusan270 | 1:025596ffc973 | 357 | } |
tnanbu | 11:2d5fcf102778 | 358 | int spiWrite(int wd) |
tnanbu | 11:2d5fcf102778 | 359 | { |
tnanbu | 11:2d5fcf102778 | 360 | return ( STSPI.write(wd)); |
tnanbu | 11:2d5fcf102778 | 361 | } |
tnanbu | 7:b69fa9bb320d | 362 | |
tnanbu | 13:df67ca499051 | 363 | /******************************************************* |
tnanbu | 13:df67ca499051 | 364 | EEPROM WRITE |
tnanbu | 13:df67ca499051 | 365 | ********************************************************/ |
tnanbu | 13:df67ca499051 | 366 | HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data) |
tnanbu | 13:df67ca499051 | 367 | { |
tnanbu | 13:df67ca499051 | 368 | HAL_StatusTypeDef status; |
tnanbu | 13:df67ca499051 | 369 | address = address + 0x08080000; |
tnanbu | 13:df67ca499051 | 370 | HAL_FLASHEx_DATAEEPROM_Unlock(); //Unprotect the EEPROM to allow writing |
tnanbu | 13:df67ca499051 | 371 | status = HAL_FLASHEx_DATAEEPROM_Program(TYPEPROGRAMDATA_BYTE, address, data); |
tnanbu | 13:df67ca499051 | 372 | HAL_FLASHEx_DATAEEPROM_Lock(); // Reprotect the EEPROM |
tnanbu | 13:df67ca499051 | 373 | return status; |
tnanbu | 13:df67ca499051 | 374 | } |
tnanbu | 13:df67ca499051 | 375 | |
tnanbu | 13:df67ca499051 | 376 | /******************************************************* |
tnanbu | 13:df67ca499051 | 377 | EEPROM READ |
tnanbu | 13:df67ca499051 | 378 | ********************************************************/ |
tnanbu | 13:df67ca499051 | 379 | uint8_t readEEPROMByte(uint32_t address) { |
tnanbu | 13:df67ca499051 | 380 | volatile uint8_t tmp ; |
tnanbu | 13:df67ca499051 | 381 | address = address + 0x08080000; |
tnanbu | 13:df67ca499051 | 382 | tmp = *(__IO uint8_t*)address; |
tnanbu | 13:df67ca499051 | 383 | return tmp; |
tnanbu | 13:df67ca499051 | 384 | } |
tnanbu | 13:df67ca499051 | 385 | |
tnanbu | 13:df67ca499051 | 386 | /*************************** |
tnanbu | 13:df67ca499051 | 387 | integer sqrt |
tnanbu | 13:df67ca499051 | 388 | 整数 sqrt √演算を整数で ライブラリより速い |
tnanbu | 13:df67ca499051 | 389 | ****************************/ |
tnanbu | 13:df67ca499051 | 390 | int int_sqrt(unsigned int x) |
tnanbu | 11:2d5fcf102778 | 391 | { |
tnanbu | 13:df67ca499051 | 392 | register int a = 0, c = 0, y = 0, i = 0, t = x; |
tnanbu | 13:df67ca499051 | 393 | while(t >>= 1){ |
tnanbu | 13:df67ca499051 | 394 | ++i; |
tnanbu | 13:df67ca499051 | 395 | } |
tnanbu | 13:df67ca499051 | 396 | for(i += i & 1; i >= 0; i -= 2){ |
tnanbu | 13:df67ca499051 | 397 | c = (y << 1 | 1) <= x >> i; |
tnanbu | 13:df67ca499051 | 398 | a = a << 1 | c; |
tnanbu | 13:df67ca499051 | 399 | y = y << 1 | c; |
tnanbu | 13:df67ca499051 | 400 | x -= c * y << i; |
tnanbu | 13:df67ca499051 | 401 | y += c; |
tnanbu | 13:df67ca499051 | 402 | } |
tnanbu | 13:df67ca499051 | 403 | return a; |
tnanbu | 7:b69fa9bb320d | 404 | } |