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@43:024421f7474c, 2021-09-15 (annotated)
- Committer:
- tnanbu
- Date:
- Wed Sep 15 05:10:59 2021 +0000
- Revision:
- 43:024421f7474c
- Parent:
- 42:f42b74882970
- Child:
- 44:48fa8beb3b00
Add LED and boot count
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 | 41:43828af3765f | 4 | #include "watchdog.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); |
| tnanbu | 11:2d5fcf102778 | 14 | /* UD-GS2 H/W define |
| tnanbu | 11:2d5fcf102778 | 15 | PIO_SWin PB_4 |
| tnanbu | 11:2d5fcf102778 | 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 |
| tnanbu | 11:2d5fcf102778 | 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 | |
| tnanbu | 13:df67ca499051 | 33 | //#include "H3LIS331DL.h" |
| tnanbu | 13:df67ca499051 | 34 | |
| tnanbu | 13:df67ca499051 | 35 | //#define TIMEINTERVAL |
| hakusan270 | 5:fbeb85ebd47b | 36 | |
| tnanbu | 13:df67ca499051 | 37 | //キャリブレーション 仮値 |
| tnanbu | 31:4ac70aa71542 | 38 | //No.1 |
| tnanbu | 34:6bffe97ae35d | 39 | #define OFFSET_X 220 |
| tnanbu | 34:6bffe97ae35d | 40 | #define OFFSET_Y 220 |
| tnanbu | 34:6bffe97ae35d | 41 | #define OFFSET_Z -40 |
| tnanbu | 31:4ac70aa71542 | 42 | //No.2 |
| tnanbu | 31:4ac70aa71542 | 43 | //#define OFFSET_X 375 |
| tnanbu | 31:4ac70aa71542 | 44 | //#define OFFSET_Y 340 |
| tnanbu | 31:4ac70aa71542 | 45 | //#define OFFSET_Z -200 |
| tnanbu | 34:6bffe97ae35d | 46 | //#define OFFSET_X 0 |
| tnanbu | 34:6bffe97ae35d | 47 | //#define OFFSET_Y 0 |
| tnanbu | 34:6bffe97ae35d | 48 | //#define OFFSET_Z 0 |
| tnanbu | 33:3369e5fe46aa | 49 | |
| tnanbu | 33:3369e5fe46aa | 50 | #define DATA_SIZE 512 |
| tnanbu | 43:024421f7474c | 51 | #define RETRY_COUNT 5 |
| tnanbu | 11:2d5fcf102778 | 52 | |
| tnanbu | 13:df67ca499051 | 53 | HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data); |
| tnanbu | 13:df67ca499051 | 54 | uint8_t readEEPROMByte(uint32_t address); |
| tnanbu | 13:df67ca499051 | 55 | |
| tnanbu | 13:df67ca499051 | 56 | |
| tnanbu | 13:df67ca499051 | 57 | //H3LIS331DL h3dacc(PB_7,PB_6); |
| tnanbu | 13:df67ca499051 | 58 | I2C i2c(PB_7,PB_6); //NUCLEO pin assign |
| hakusan270 | 5:fbeb85ebd47b | 59 | |
| hakusan270 | 0:b76e4ba14765 | 60 | RawSerial pc(PA_9, PA_10,115200); //console UART |
| tnanbu | 13:df67ca499051 | 61 | //LowPowerTicker interrupt; |
| tnanbu | 18:2a42f4052139 | 62 | //Ticker interrupt; |
| hakusan270 | 0:b76e4ba14765 | 63 | SPI STSPI(PB_15, PB_14, PB_13); //mosi,miso,clk |
| hakusan270 | 0:b76e4ba14765 | 64 | DigitalOut STSPICS(PB_12); |
| rgoto | 6:bf4321ef0330 | 65 | |
| rgoto | 6:bf4321ef0330 | 66 | SDFileSystem *sd = new SDFileSystem(PA_12, PA_11, PB_3, PA_15, "sd"); // mosi, miso, sclk, cs, name |
| rgoto | 6:bf4321ef0330 | 67 | |
| tnanbu | 38:87b7b3de6e88 | 68 | DigitalOut myled(PB_5); |
| tnanbu | 37:1b459e0ef847 | 69 | DigitalIn button(PB_4); |
| tnanbu | 37:1b459e0ef847 | 70 | int btn_flag = 0; |
| tnanbu | 37:1b459e0ef847 | 71 | |
| hakusan270 | 1:025596ffc973 | 72 | int initLIS3DH(); |
| hakusan270 | 1:025596ffc973 | 73 | int read3axes(short *tx,short *ty,short *tz); |
| tnanbu | 13:df67ca499051 | 74 | int initLIS331(); |
| tnanbu | 13:df67ca499051 | 75 | int read3axes331(short *tx,short *ty,short *tz); |
| tnanbu | 13:df67ca499051 | 76 | int int_sqrt(unsigned int x); |
| tnanbu | 7:b69fa9bb320d | 77 | //int readTemp(short *tmp); |
| tnanbu | 11:2d5fcf102778 | 78 | FILE *fp1,*fp2;//fp1:H3LIS331DL, fp2:LIS3DH |
| tnanbu | 13:df67ca499051 | 79 | unsigned long timecount = 0; |
| tnanbu | 33:3369e5fe46aa | 80 | short oldcount = 0; |
| tnanbu | 33:3369e5fe46aa | 81 | short newcount = 0; |
| tnanbu | 28:8bda44be0dd0 | 82 | long max_g=0; |
| tnanbu | 43:024421f7474c | 83 | long boot_count = 0; |
| tnanbu | 43:024421f7474c | 84 | long reboot_count = 0; |
| tnanbu | 33:3369e5fe46aa | 85 | char buffer1[DATA_SIZE] = {}; |
| tnanbu | 33:3369e5fe46aa | 86 | char buffer2[DATA_SIZE] = {}; |
| tnanbu | 31:4ac70aa71542 | 87 | char stracc1[32] = {}, stracc2[32] = {}; |
| tnanbu | 13:df67ca499051 | 88 | int lognum1 = 0, lognum2 = 0; |
| tnanbu | 33:3369e5fe46aa | 89 | char filename1[16]= {}; |
| tnanbu | 33:3369e5fe46aa | 90 | char filename2[16]= {}; |
| tnanbu | 43:024421f7474c | 91 | int init=1; |
| tnanbu | 43:024421f7474c | 92 | short clear_flag = 0; |
| tnanbu | 43:024421f7474c | 93 | short writed_flag = 0; |
| tnanbu | 43:024421f7474c | 94 | short error_flag = 0; |
| tnanbu | 43:024421f7474c | 95 | //short reboot_flag = 0; |
| tnanbu | 43:024421f7474c | 96 | short ledcount_write = 0; |
| tnanbu | 43:024421f7474c | 97 | short ledcount_error = 0; |
| tnanbu | 11:2d5fcf102778 | 98 | |
| tnanbu | 41:43828af3765f | 99 | Watchdog wdt; |
| tnanbu | 15:12d0699ad423 | 100 | |
| tnanbu | 43:024421f7474c | 101 | void LED_Control_Write(short cnt){ |
| tnanbu | 43:024421f7474c | 102 | //Blinks every 0.5 seconds. 3 times. |
| tnanbu | 43:024421f7474c | 103 | if(cnt == 0){ |
| tnanbu | 43:024421f7474c | 104 | myled = 0; |
| tnanbu | 43:024421f7474c | 105 | } |
| tnanbu | 43:024421f7474c | 106 | else if((cnt % 200) == 0 ){ |
| tnanbu | 43:024421f7474c | 107 | if(myled == 0){ |
| tnanbu | 43:024421f7474c | 108 | myled = 1; |
| tnanbu | 43:024421f7474c | 109 | } |
| tnanbu | 43:024421f7474c | 110 | else if(myled == 1){ |
| tnanbu | 43:024421f7474c | 111 | myled = 0; |
| tnanbu | 43:024421f7474c | 112 | } |
| tnanbu | 43:024421f7474c | 113 | } |
| tnanbu | 43:024421f7474c | 114 | |
| tnanbu | 43:024421f7474c | 115 | if(cnt > 1000){ |
| tnanbu | 43:024421f7474c | 116 | myled = 1; |
| tnanbu | 43:024421f7474c | 117 | writed_flag = 0; |
| tnanbu | 43:024421f7474c | 118 | } |
| tnanbu | 43:024421f7474c | 119 | } |
| tnanbu | 43:024421f7474c | 120 | |
| tnanbu | 43:024421f7474c | 121 | void LED_Control_Error(){ |
| tnanbu | 43:024421f7474c | 122 | //Blinks every 0.25 seconds. |
| tnanbu | 43:024421f7474c | 123 | short cnt = 0; |
| tnanbu | 43:024421f7474c | 124 | while(cnt < 20){ |
| tnanbu | 43:024421f7474c | 125 | myled = 0; |
| tnanbu | 43:024421f7474c | 126 | wait(0.25); |
| tnanbu | 43:024421f7474c | 127 | myled = 1; |
| tnanbu | 43:024421f7474c | 128 | wait(0.25); |
| tnanbu | 43:024421f7474c | 129 | cnt++; |
| tnanbu | 43:024421f7474c | 130 | } |
| tnanbu | 43:024421f7474c | 131 | myled = 1; |
| tnanbu | 43:024421f7474c | 132 | } |
| tnanbu | 43:024421f7474c | 133 | |
| tnanbu | 15:12d0699ad423 | 134 | void sub(){ |
| tnanbu | 33:3369e5fe46aa | 135 | static short tx=0,ty=0,tz=0; |
| tnanbu | 36:709c6fae0b2e | 136 | static short tx2=0,ty2=0,tz2=0; |
| tnanbu | 33:3369e5fe46aa | 137 | static long scr = 0; |
| tnanbu | 36:709c6fae0b2e | 138 | static long scr2 = 0; |
| tnanbu | 33:3369e5fe46aa | 139 | static long ax,ay,az,as; |
| tnanbu | 35:69e2bc347f0c | 140 | static long ax2,ay2,az2,as2; |
| tnanbu | 42:f42b74882970 | 141 | static long tmp_max = 0, tmp_max2 = 0; |
| tnanbu | 43:024421f7474c | 142 | short retry = 0; |
| tnanbu | 43:024421f7474c | 143 | short ret = 0; |
| tnanbu | 13:df67ca499051 | 144 | |
| tnanbu | 13:df67ca499051 | 145 | read3axes331(&tx,&ty,&tz); |
| tnanbu | 13:df67ca499051 | 146 | //キャリブレーションの補正 |
| tnanbu | 13:df67ca499051 | 147 | tx += OFFSET_X; |
| tnanbu | 13:df67ca499051 | 148 | ty += OFFSET_Y; |
| tnanbu | 13:df67ca499051 | 149 | tz += OFFSET_Z; |
| tnanbu | 13:df67ca499051 | 150 | |
| tnanbu | 13:df67ca499051 | 151 | //スカラー値変換 |
| tnanbu | 18:2a42f4052139 | 152 | scr = int_sqrt( tx*tx + ty*ty + tz*tz);// 195mg/digit |
| tnanbu | 33:3369e5fe46aa | 153 | //now_g = scr; |
| tnanbu | 13:df67ca499051 | 154 | |
| tnanbu | 33:3369e5fe46aa | 155 | ax+= tx; |
| tnanbu | 33:3369e5fe46aa | 156 | ay+= ty; |
| tnanbu | 33:3369e5fe46aa | 157 | az+= tz; |
| tnanbu | 33:3369e5fe46aa | 158 | as+= scr; |
| tnanbu | 35:69e2bc347f0c | 159 | //newcount++; |
| tnanbu | 36:709c6fae0b2e | 160 | //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 | 42:f42b74882970 | 161 | //pc.printf("new x:%d y:%d,z:%d scr=%d, max=%d\r\n",tx,ty,tz,scr,tmp_max); |
| tnanbu | 18:2a42f4052139 | 162 | |
| tnanbu | 33:3369e5fe46aa | 163 | //Total Max G |
| tnanbu | 13:df67ca499051 | 164 | if ( max_g < scr) { |
| tnanbu | 13:df67ca499051 | 165 | max_g = scr; |
| tnanbu | 38:87b7b3de6e88 | 166 | //update=1; |
| tnanbu | 33:3369e5fe46aa | 167 | //pc.printf("%max g=%d \r\n",max_g); |
| tnanbu | 13:df67ca499051 | 168 | //Save EEPROM |
| tnanbu | 28:8bda44be0dd0 | 169 | for(int i = 0; i < 4; i++){ |
| tnanbu | 38:87b7b3de6e88 | 170 | //pc.printf("writerom 0x%x\r\n",(max_g >> 8*i) & 0xFF); |
| tnanbu | 28:8bda44be0dd0 | 171 | writeEEPROMByte(i, (max_g >> 8*i) & 0xFF); |
| tnanbu | 28:8bda44be0dd0 | 172 | } |
| tnanbu | 8:7f80139df48d | 173 | } |
| tnanbu | 13:df67ca499051 | 174 | |
| tnanbu | 36:709c6fae0b2e | 175 | //MAX G per cycle |
| tnanbu | 33:3369e5fe46aa | 176 | if(tmp_max < scr){ |
| tnanbu | 42:f42b74882970 | 177 | //pc.printf("tmp_max:%d,%d",tmp_max,scr); |
| tnanbu | 33:3369e5fe46aa | 178 | tmp_max = scr; |
| tnanbu | 33:3369e5fe46aa | 179 | } |
| tnanbu | 33:3369e5fe46aa | 180 | |
| tnanbu | 36:709c6fae0b2e | 181 | //平均(/s) |
| tnanbu | 42:f42b74882970 | 182 | if (newcount == 400) { |
| tnanbu | 42:f42b74882970 | 183 | float asc = (float)as / 400.0f; |
| tnanbu | 40:16c2d6b97a92 | 184 | pc.printf("avarage(new) x:%2.2f,y:%2.2f,z:%2.2f,scaler=%2.2f,max:%2.2f\r\n", |
| tnanbu | 42:f42b74882970 | 185 | (float)ax/400.0f*0.005,(float)ay/400.0f*0.005,(float)az/400.0f*0.005,(float)as/400.0f*0.005, (float)tmp_max*0.005); |
| tnanbu | 36:709c6fae0b2e | 186 | sprintf(stracc1,"%d,%d,%2.2f,%2.2f\r\n",timecount,time(NULL),asc*0.005,(float)tmp_max*0.005); |
| tnanbu | 33:3369e5fe46aa | 187 | |
| tnanbu | 36:709c6fae0b2e | 188 | if((strlen(buffer1)+strlen(stracc1)) > DATA_SIZE) { |
| tnanbu | 36:709c6fae0b2e | 189 | pc.printf("try write fp1:%d,%d\r\n",strlen(buffer1),strlen(stracc1)); |
| tnanbu | 33:3369e5fe46aa | 190 | //ret = fprintf(fp1,"%s",buffer1); |
| tnanbu | 43:024421f7474c | 191 | //ret = fwrite(buffer1,sizeof(char),strlen(buffer1),fp1); |
| tnanbu | 43:024421f7474c | 192 | while((fwrite(buffer1,sizeof(char),strlen(buffer1),fp1) != strlen(buffer1)) && (retry < RETRY_COUNT)){ |
| tnanbu | 43:024421f7474c | 193 | if(retry < RETRY_COUNT -1) { |
| tnanbu | 43:024421f7474c | 194 | pc.printf("fp1 fwrite failed:%d. retry=%d\r\n",ret,retry); |
| tnanbu | 43:024421f7474c | 195 | } |
| tnanbu | 43:024421f7474c | 196 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 197 | pc.printf("fp1 fwrite failed:%d. Reboot!\r\n",ret); |
| tnanbu | 43:024421f7474c | 198 | reboot_count++; |
| tnanbu | 43:024421f7474c | 199 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 200 | writeEEPROMByte(i+8, 0x00); |
| tnanbu | 43:024421f7474c | 201 | writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 202 | } |
| tnanbu | 43:024421f7474c | 203 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 204 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 205 | } |
| tnanbu | 43:024421f7474c | 206 | retry++; |
| tnanbu | 43:024421f7474c | 207 | wait_ms(1); |
| tnanbu | 43:024421f7474c | 208 | } |
| tnanbu | 43:024421f7474c | 209 | pc.printf("fp1 fwrite success:%d\r\n",ret); |
| tnanbu | 43:024421f7474c | 210 | retry = 0; |
| tnanbu | 43:024421f7474c | 211 | writed_flag = 1; |
| tnanbu | 43:024421f7474c | 212 | ledcount_write = 0; |
| tnanbu | 43:024421f7474c | 213 | |
| tnanbu | 8:7f80139df48d | 214 | memset(buffer1,0,sizeof(buffer1)); |
| tnanbu | 8:7f80139df48d | 215 | sprintf(buffer1,"%s",stracc1); |
| tnanbu | 35:69e2bc347f0c | 216 | } else { |
| tnanbu | 11:2d5fcf102778 | 217 | sprintf(buffer1,"%s%s",buffer1,stracc1); |
| tnanbu | 7:b69fa9bb320d | 218 | } |
| tnanbu | 13:df67ca499051 | 219 | |
| tnanbu | 33:3369e5fe46aa | 220 | as=ax=ay=az=0; |
| tnanbu | 33:3369e5fe46aa | 221 | newcount = 0; |
| tnanbu | 33:3369e5fe46aa | 222 | tmp_max = 0; |
| tnanbu | 33:3369e5fe46aa | 223 | } |
| tnanbu | 33:3369e5fe46aa | 224 | |
| tnanbu | 43:024421f7474c | 225 | //LED Control |
| tnanbu | 43:024421f7474c | 226 | if(writed_flag){ |
| tnanbu | 43:024421f7474c | 227 | LED_Control_Write(ledcount_write); |
| tnanbu | 43:024421f7474c | 228 | ledcount_write++; |
| tnanbu | 43:024421f7474c | 229 | } |
| tnanbu | 43:024421f7474c | 230 | |
| tnanbu | 35:69e2bc347f0c | 231 | if( (oldcount % 10) == 0){ |
| tnanbu | 11:2d5fcf102778 | 232 | //LIS3DH |
| tnanbu | 36:709c6fae0b2e | 233 | read3axes(&tx2,&ty2,&tz2); |
| tnanbu | 36:709c6fae0b2e | 234 | scr2 = int_sqrt( tx2*tx2 + ty2*ty2 + tz2*tz2); |
| tnanbu | 36:709c6fae0b2e | 235 | ax2+= tx2; |
| tnanbu | 36:709c6fae0b2e | 236 | ay2+= ty2; |
| tnanbu | 36:709c6fae0b2e | 237 | az2+= tz2; |
| tnanbu | 36:709c6fae0b2e | 238 | as2+= scr2; |
| tnanbu | 36:709c6fae0b2e | 239 | if(tmp_max2 < scr2){ |
| tnanbu | 36:709c6fae0b2e | 240 | tmp_max2 = scr2; |
| tnanbu | 35:69e2bc347f0c | 241 | } |
| tnanbu | 36:709c6fae0b2e | 242 | //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 | 243 | //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 | 244 | //sprintf(stracc2,"%d,%d,%d\r\n",timecount,time(NULL),scr); |
| tnanbu | 11:2d5fcf102778 | 245 | //pc.printf("lis3dh:%s",stracc2); |
| tnanbu | 42:f42b74882970 | 246 | if(oldcount == 4000){ |
| tnanbu | 42:f42b74882970 | 247 | float asc2 = (float)as2 / 400.0f; |
| tnanbu | 38:87b7b3de6e88 | 248 | //pc.printf("avarage(old) x:%2.2f,y:%2.2f,z:%2.2f,scaler=%2.2f,max:%2.2f\r\n", |
| tnanbu | 38:87b7b3de6e88 | 249 | //(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 | 250 | sprintf(stracc2,"%d,%d,%2.2f,%2.2f\r\n",timecount,time(NULL),asc2*0.005,(float)tmp_max2*0.005); |
| tnanbu | 35:69e2bc347f0c | 251 | |
| tnanbu | 36:709c6fae0b2e | 252 | if( (strlen(buffer2)+ strlen(stracc2)) > DATA_SIZE) { |
| tnanbu | 43:024421f7474c | 253 | pc.printf("try write fp2:%d,%d\r\n",strlen(buffer2),strlen(stracc2)); |
| tnanbu | 43:024421f7474c | 254 | while( (fwrite(buffer2,sizeof(char),strlen(buffer2),fp2) != strlen(buffer2)) && (retry < RETRY_COUNT)){ |
| tnanbu | 43:024421f7474c | 255 | if(retry < RETRY_COUNT -1) { |
| tnanbu | 43:024421f7474c | 256 | pc.printf("fp2 fwrite failed:%d. retry=%d\r\n",ret,retry); |
| tnanbu | 43:024421f7474c | 257 | } |
| tnanbu | 43:024421f7474c | 258 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 259 | pc.printf("fp2 fwrite failed:%d. Reboot!\r\n",ret); |
| tnanbu | 43:024421f7474c | 260 | reboot_count++; |
| tnanbu | 43:024421f7474c | 261 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 262 | writeEEPROMByte(i+8,0x00); |
| tnanbu | 43:024421f7474c | 263 | writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 264 | } |
| tnanbu | 43:024421f7474c | 265 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 266 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 267 | } |
| tnanbu | 43:024421f7474c | 268 | retry++; |
| tnanbu | 43:024421f7474c | 269 | wait_ms(1); |
| tnanbu | 35:69e2bc347f0c | 270 | } |
| tnanbu | 43:024421f7474c | 271 | pc.printf("fp2 fwrite success:%d\r\n",ret); |
| tnanbu | 43:024421f7474c | 272 | retry = 0; |
| tnanbu | 35:69e2bc347f0c | 273 | memset(buffer2,0,sizeof(buffer2)); |
| tnanbu | 35:69e2bc347f0c | 274 | sprintf(buffer2,"%s",stracc2); |
| tnanbu | 35:69e2bc347f0c | 275 | } else { |
| tnanbu | 35:69e2bc347f0c | 276 | sprintf(buffer2,"%s%s",buffer2,stracc2); |
| tnanbu | 13:df67ca499051 | 277 | } |
| tnanbu | 35:69e2bc347f0c | 278 | |
| tnanbu | 35:69e2bc347f0c | 279 | oldcount = 0; |
| tnanbu | 35:69e2bc347f0c | 280 | as2=ax2=ay2=az2=0; |
| tnanbu | 35:69e2bc347f0c | 281 | tmp_max2 = 0; |
| tnanbu | 7:b69fa9bb320d | 282 | } |
| tnanbu | 11:2d5fcf102778 | 283 | } |
| tnanbu | 38:87b7b3de6e88 | 284 | |
| tnanbu | 38:87b7b3de6e88 | 285 | if((time(NULL) % 300) == 0){ |
| tnanbu | 38:87b7b3de6e88 | 286 | //5 minutes passed. Save File. |
| tnanbu | 43:024421f7474c | 287 | //pc.printf("5minutes passed. Save File.\r\n"); |
| tnanbu | 38:87b7b3de6e88 | 288 | if(fp1){ |
| tnanbu | 43:024421f7474c | 289 | while(fclose(fp1) != 0 && retry < RETRY_COUNT){ |
| tnanbu | 43:024421f7474c | 290 | if(retry < RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 291 | pc.printf("fp1 fclose failed:%d. retry=%d\r\n",ret,retry); |
| tnanbu | 43:024421f7474c | 292 | } |
| tnanbu | 43:024421f7474c | 293 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 294 | pc.printf("fp1 fclose failed:%d. Reboot!\r\n",ret); |
| tnanbu | 43:024421f7474c | 295 | reboot_count++; |
| tnanbu | 43:024421f7474c | 296 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 297 | writeEEPROMByte(i+8, 0x00); |
| tnanbu | 43:024421f7474c | 298 | writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 299 | } |
| tnanbu | 43:024421f7474c | 300 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 301 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 302 | } |
| tnanbu | 43:024421f7474c | 303 | retry++; |
| tnanbu | 43:024421f7474c | 304 | wait_ms(1); |
| tnanbu | 43:024421f7474c | 305 | } |
| tnanbu | 43:024421f7474c | 306 | retry = 0; |
| tnanbu | 38:87b7b3de6e88 | 307 | fp1 = NULL; |
| tnanbu | 38:87b7b3de6e88 | 308 | } |
| tnanbu | 38:87b7b3de6e88 | 309 | if(fp2){ |
| tnanbu | 43:024421f7474c | 310 | while(fclose(fp2) != 0 && retry < RETRY_COUNT){ |
| tnanbu | 43:024421f7474c | 311 | if(retry < RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 312 | pc.printf("fp2 fclose failed:%d. retry=%d\r\n",ret,retry); |
| tnanbu | 43:024421f7474c | 313 | } |
| tnanbu | 43:024421f7474c | 314 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 315 | pc.printf("fp2 fclose failed:%d. Reboot!\r\n",ret); |
| tnanbu | 43:024421f7474c | 316 | reboot_count++; |
| tnanbu | 43:024421f7474c | 317 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 318 | writeEEPROMByte(i+8, 0x00); |
| tnanbu | 43:024421f7474c | 319 | writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 320 | } |
| tnanbu | 43:024421f7474c | 321 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 322 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 323 | } |
| tnanbu | 43:024421f7474c | 324 | retry++; |
| tnanbu | 43:024421f7474c | 325 | wait_ms(1); |
| tnanbu | 43:024421f7474c | 326 | } |
| tnanbu | 43:024421f7474c | 327 | retry = 0; |
| tnanbu | 38:87b7b3de6e88 | 328 | fp2 = NULL; |
| tnanbu | 38:87b7b3de6e88 | 329 | } |
| tnanbu | 43:024421f7474c | 330 | |
| tnanbu | 38:87b7b3de6e88 | 331 | fp1 = fopen(filename1,"ab"); |
| tnanbu | 38:87b7b3de6e88 | 332 | if(!fp1){ |
| tnanbu | 43:024421f7474c | 333 | while(!fp1 && retry < RETRY_COUNT){ |
| tnanbu | 43:024421f7474c | 334 | pc.printf("fp1 fopen failed:%d\r\n",errno); |
| tnanbu | 43:024421f7474c | 335 | wait_ms(1); |
| tnanbu | 43:024421f7474c | 336 | fp1 = fopen(filename1,"ab"); |
| tnanbu | 43:024421f7474c | 337 | if(fp1){ |
| tnanbu | 43:024421f7474c | 338 | pc.printf("fp1 fopen success.\r\n"); |
| tnanbu | 43:024421f7474c | 339 | retry = 0; |
| tnanbu | 43:024421f7474c | 340 | break; |
| tnanbu | 43:024421f7474c | 341 | } |
| tnanbu | 43:024421f7474c | 342 | else if(retry < RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 343 | pc.printf("fp1 fopen failed. retyr=%d\r\n",retry); |
| tnanbu | 43:024421f7474c | 344 | } |
| tnanbu | 43:024421f7474c | 345 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 346 | pc.printf("fp1 fopen failed. Reboot! %d\r\n",reboot_count+1); |
| tnanbu | 43:024421f7474c | 347 | reboot_count++; |
| tnanbu | 43:024421f7474c | 348 | |
| tnanbu | 43:024421f7474c | 349 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 350 | pc.printf("writeEEPROM(reboot) 0x%x\r\n",(reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 351 | writeEEPROMByte(i+8, 0x00); |
| tnanbu | 43:024421f7474c | 352 | HAL_StatusTypeDef status = writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 353 | pc.printf("writed:0x%x,%d\r\n",readEEPROMByte(i+8),status); |
| tnanbu | 43:024421f7474c | 354 | } |
| tnanbu | 43:024421f7474c | 355 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 356 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 357 | } |
| tnanbu | 43:024421f7474c | 358 | retry++; |
| tnanbu | 43:024421f7474c | 359 | } |
| tnanbu | 38:87b7b3de6e88 | 360 | } |
| tnanbu | 38:87b7b3de6e88 | 361 | fp2 = fopen(filename2,"ab"); |
| tnanbu | 38:87b7b3de6e88 | 362 | if(!fp2){ |
| tnanbu | 43:024421f7474c | 363 | while(!fp2 && retry < RETRY_COUNT){ |
| tnanbu | 43:024421f7474c | 364 | pc.printf("fp2 fopen failed:%d\r\n",errno); |
| tnanbu | 43:024421f7474c | 365 | wait_ms(1); |
| tnanbu | 43:024421f7474c | 366 | fp2 = fopen(filename2,"ab"); |
| tnanbu | 43:024421f7474c | 367 | if(fp2){ |
| tnanbu | 43:024421f7474c | 368 | pc.printf("fp2 fopen success.\r\n"); |
| tnanbu | 43:024421f7474c | 369 | retry = 0; |
| tnanbu | 43:024421f7474c | 370 | break; |
| tnanbu | 43:024421f7474c | 371 | } |
| tnanbu | 43:024421f7474c | 372 | else if(retry < RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 373 | pc.printf("fp1 fopen failed. retyr=%d\r\n",retry); |
| tnanbu | 43:024421f7474c | 374 | } |
| tnanbu | 43:024421f7474c | 375 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 376 | pc.printf("fp1 fopen failed. Reboot!\r\n"); |
| tnanbu | 43:024421f7474c | 377 | reboot_count++; |
| tnanbu | 43:024421f7474c | 378 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 379 | writeEEPROMByte(i+8, 0x00); |
| tnanbu | 43:024421f7474c | 380 | writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 381 | } |
| tnanbu | 43:024421f7474c | 382 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 383 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 384 | } |
| tnanbu | 43:024421f7474c | 385 | retry++; |
| tnanbu | 43:024421f7474c | 386 | } |
| tnanbu | 38:87b7b3de6e88 | 387 | } |
| tnanbu | 38:87b7b3de6e88 | 388 | } |
| tnanbu | 19:2475d32bd93f | 389 | |
| tnanbu | 13:df67ca499051 | 390 | if(time(NULL) > 86400){ |
| tnanbu | 8:7f80139df48d | 391 | //Create New File |
| tnanbu | 8:7f80139df48d | 392 | set_time(NULL); |
| tnanbu | 11:2d5fcf102778 | 393 | timecount = 0; |
| tnanbu | 36:709c6fae0b2e | 394 | if(fp1){ |
| tnanbu | 43:024421f7474c | 395 | while(fclose(fp1) != 0 && retry < RETRY_COUNT){ |
| tnanbu | 43:024421f7474c | 396 | if(retry < RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 397 | pc.printf("fp1 fclose failed:%d. retry=%d\r\n",ret,retry); |
| tnanbu | 43:024421f7474c | 398 | } |
| tnanbu | 43:024421f7474c | 399 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 400 | pc.printf("fp1 fclose failed:%d. Reboot!\r\n",ret); |
| tnanbu | 43:024421f7474c | 401 | reboot_count++; |
| tnanbu | 43:024421f7474c | 402 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 403 | writeEEPROMByte(i+8, 0x00); |
| tnanbu | 43:024421f7474c | 404 | writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 405 | } |
| tnanbu | 43:024421f7474c | 406 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 407 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 408 | } |
| tnanbu | 43:024421f7474c | 409 | retry++; |
| tnanbu | 43:024421f7474c | 410 | wait_ms(1); |
| tnanbu | 43:024421f7474c | 411 | } |
| tnanbu | 43:024421f7474c | 412 | retry = 0; |
| tnanbu | 36:709c6fae0b2e | 413 | fp1 = NULL; |
| tnanbu | 36:709c6fae0b2e | 414 | } |
| tnanbu | 36:709c6fae0b2e | 415 | if(fp2){ |
| tnanbu | 43:024421f7474c | 416 | while(fclose(fp2) != 0 && retry < RETRY_COUNT){ |
| tnanbu | 43:024421f7474c | 417 | if(retry < RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 418 | pc.printf("fp12 fclose failed:%d. retry=%d\r\n",ret,retry); |
| tnanbu | 43:024421f7474c | 419 | } |
| tnanbu | 43:024421f7474c | 420 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 421 | pc.printf("fp2 fclose failed:%d. Reboot!\r\n",ret); |
| tnanbu | 43:024421f7474c | 422 | reboot_count++; |
| tnanbu | 43:024421f7474c | 423 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 424 | writeEEPROMByte(i+8, 0x00); |
| tnanbu | 43:024421f7474c | 425 | writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 426 | } |
| tnanbu | 43:024421f7474c | 427 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 428 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 429 | } |
| tnanbu | 43:024421f7474c | 430 | retry++; |
| tnanbu | 43:024421f7474c | 431 | wait_ms(1); |
| tnanbu | 43:024421f7474c | 432 | } |
| tnanbu | 43:024421f7474c | 433 | retry = 0; |
| tnanbu | 36:709c6fae0b2e | 434 | fp2 = NULL; |
| tnanbu | 36:709c6fae0b2e | 435 | } |
| tnanbu | 8:7f80139df48d | 436 | lognum1++; |
| tnanbu | 8:7f80139df48d | 437 | lognum2++; |
| tnanbu | 13:df67ca499051 | 438 | sprintf(filename1,"/sd/new_%d",lognum1); |
| tnanbu | 13:df67ca499051 | 439 | sprintf(filename2,"/sd/old_%d",lognum2); |
| tnanbu | 33:3369e5fe46aa | 440 | fp1 = fopen(filename1,"ab"); |
| tnanbu | 43:024421f7474c | 441 | while(!fp1 && retry < RETRY_COUNT){ |
| tnanbu | 43:024421f7474c | 442 | pc.printf("fp1 fopen failed:%d\r\n",errno); |
| tnanbu | 43:024421f7474c | 443 | wait_ms(1); |
| tnanbu | 43:024421f7474c | 444 | fp1 = fopen(filename1,"ab"); |
| tnanbu | 43:024421f7474c | 445 | if(fp1){ |
| tnanbu | 43:024421f7474c | 446 | pc.printf("fp1 fopen success.\r\n"); |
| tnanbu | 43:024421f7474c | 447 | retry = 0; |
| tnanbu | 43:024421f7474c | 448 | break; |
| tnanbu | 43:024421f7474c | 449 | } |
| tnanbu | 43:024421f7474c | 450 | else if(retry < RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 451 | pc.printf("fp1 fopen failed. retyr=%d\r\n",retry); |
| tnanbu | 43:024421f7474c | 452 | } |
| tnanbu | 43:024421f7474c | 453 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 454 | pc.printf("fp1 fopen failed. Reboot!\r\n"); |
| tnanbu | 43:024421f7474c | 455 | reboot_count++; |
| tnanbu | 43:024421f7474c | 456 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 457 | writeEEPROMByte(i+8, 0x00); |
| tnanbu | 43:024421f7474c | 458 | writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 459 | } |
| tnanbu | 43:024421f7474c | 460 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 461 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 462 | } |
| tnanbu | 43:024421f7474c | 463 | retry++; |
| tnanbu | 40:16c2d6b97a92 | 464 | } |
| tnanbu | 33:3369e5fe46aa | 465 | fp2 = fopen(filename2,"ab"); |
| tnanbu | 43:024421f7474c | 466 | while(!fp2 && retry < RETRY_COUNT){ |
| tnanbu | 43:024421f7474c | 467 | pc.printf("fp2 fopen failed:%d\r\n",errno); |
| tnanbu | 43:024421f7474c | 468 | wait_ms(1); |
| tnanbu | 43:024421f7474c | 469 | fp1 = fopen(filename2,"ab"); |
| tnanbu | 43:024421f7474c | 470 | if(fp2){ |
| tnanbu | 43:024421f7474c | 471 | pc.printf("fp2 fopen success.\r\n"); |
| tnanbu | 43:024421f7474c | 472 | retry = 0; |
| tnanbu | 43:024421f7474c | 473 | break; |
| tnanbu | 43:024421f7474c | 474 | } |
| tnanbu | 43:024421f7474c | 475 | else if(retry < RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 476 | pc.printf("fp2 fopen failed. retyr=%d\r\n",retry); |
| tnanbu | 43:024421f7474c | 477 | } |
| tnanbu | 43:024421f7474c | 478 | else if(retry == RETRY_COUNT -1){ |
| tnanbu | 43:024421f7474c | 479 | pc.printf("fp2 fopen failed. Reboot!\r\n"); |
| tnanbu | 43:024421f7474c | 480 | reboot_count++; |
| tnanbu | 43:024421f7474c | 481 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 482 | writeEEPROMByte(i+8, 0x00); |
| tnanbu | 43:024421f7474c | 483 | writeEEPROMByte(i+8, (reboot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 484 | } |
| tnanbu | 43:024421f7474c | 485 | LED_Control_Error(); |
| tnanbu | 43:024421f7474c | 486 | NVIC_SystemReset(); |
| tnanbu | 43:024421f7474c | 487 | } |
| tnanbu | 43:024421f7474c | 488 | retry++; |
| tnanbu | 11:2d5fcf102778 | 489 | } |
| tnanbu | 40:16c2d6b97a92 | 490 | |
| tnanbu | 31:4ac70aa71542 | 491 | pc.printf("Create New File:%d,%d",timecount,time(NULL)); |
| tnanbu | 7:b69fa9bb320d | 492 | } |
| tnanbu | 37:1b459e0ef847 | 493 | |
| tnanbu | 37:1b459e0ef847 | 494 | //Button Check |
| tnanbu | 37:1b459e0ef847 | 495 | if(button.read() == 1){ |
| tnanbu | 37:1b459e0ef847 | 496 | btn_flag++; |
| tnanbu | 37:1b459e0ef847 | 497 | //pc.printf("Button pressed:%d\r\n",btn_flag); |
| tnanbu | 37:1b459e0ef847 | 498 | } |
| tnanbu | 37:1b459e0ef847 | 499 | else{ |
| tnanbu | 37:1b459e0ef847 | 500 | btn_flag = 0; |
| tnanbu | 37:1b459e0ef847 | 501 | } |
| tnanbu | 37:1b459e0ef847 | 502 | |
| tnanbu | 43:024421f7474c | 503 | if(btn_flag > 1000 && !clear_flag){ |
| tnanbu | 43:024421f7474c | 504 | //ROM Crear |
| tnanbu | 43:024421f7474c | 505 | pc.printf("Button pressed. ROM clear\r\n"); |
| tnanbu | 43:024421f7474c | 506 | for(int i = 0; i < 16; i++){ |
| tnanbu | 43:024421f7474c | 507 | writeEEPROMByte(i, 0x00); |
| tnanbu | 43:024421f7474c | 508 | } |
| tnanbu | 43:024421f7474c | 509 | |
| tnanbu | 37:1b459e0ef847 | 510 | if(fp1){ |
| tnanbu | 37:1b459e0ef847 | 511 | fclose(fp1); |
| tnanbu | 37:1b459e0ef847 | 512 | fp1 = NULL; |
| tnanbu | 37:1b459e0ef847 | 513 | } |
| tnanbu | 37:1b459e0ef847 | 514 | if(fp2){ |
| tnanbu | 37:1b459e0ef847 | 515 | fclose(fp2); |
| tnanbu | 37:1b459e0ef847 | 516 | fp2 = NULL; |
| tnanbu | 37:1b459e0ef847 | 517 | } |
| tnanbu | 38:87b7b3de6e88 | 518 | btn_flag = 0; |
| tnanbu | 43:024421f7474c | 519 | clear_flag = 1; |
| tnanbu | 43:024421f7474c | 520 | boot_count = 0; |
| tnanbu | 43:024421f7474c | 521 | reboot_count = 0; |
| tnanbu | 37:1b459e0ef847 | 522 | } |
| tnanbu | 13:df67ca499051 | 523 | } |
| tnanbu | 13:df67ca499051 | 524 | |
| tnanbu | 13:df67ca499051 | 525 | int main() |
| tnanbu | 13:df67ca499051 | 526 | { |
| tnanbu | 43:024421f7474c | 527 | short retry = 0; |
| tnanbu | 43:024421f7474c | 528 | pc.printf("UD-GS5 Start acceleration measurement\r\n"); |
| tnanbu | 43:024421f7474c | 529 | set_time(NULL); |
| tnanbu | 43:024421f7474c | 530 | |
| tnanbu | 43:024421f7474c | 531 | myled = 0; |
| tnanbu | 43:024421f7474c | 532 | wait(3); |
| tnanbu | 43:024421f7474c | 533 | myled = 1; |
| tnanbu | 43:024421f7474c | 534 | |
| tnanbu | 43:024421f7474c | 535 | //Read Boot/Reboot count |
| tnanbu | 43:024421f7474c | 536 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 537 | boot_count |= readEEPROMByte(i+4) << 8*i; |
| tnanbu | 43:024421f7474c | 538 | } |
| tnanbu | 43:024421f7474c | 539 | boot_count++; |
| tnanbu | 43:024421f7474c | 540 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 541 | writeEEPROMByte(i+4, (boot_count >> 8*i) & 0xFF); |
| tnanbu | 43:024421f7474c | 542 | } |
| tnanbu | 43:024421f7474c | 543 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 544 | //pc.printf("reboot_count:0x%x\r\n",readEEPROMByte(i+8)); |
| tnanbu | 43:024421f7474c | 545 | reboot_count |= readEEPROMByte(i+8) << 8*i; |
| tnanbu | 43:024421f7474c | 546 | } |
| tnanbu | 43:024421f7474c | 547 | pc.printf("boot=%d, reboot=%d\r\n",boot_count,reboot_count); |
| tnanbu | 43:024421f7474c | 548 | |
| tnanbu | 43:024421f7474c | 549 | //Read Max G |
| tnanbu | 43:024421f7474c | 550 | for(int i = 0; i < 4; i++){ |
| tnanbu | 43:024421f7474c | 551 | //pc.printf("readEEPROM:0x%x\r\n",readEEPROMByte(i)); |
| tnanbu | 43:024421f7474c | 552 | max_g |= readEEPROMByte(i) << 8*i; |
| tnanbu | 43:024421f7474c | 553 | } |
| tnanbu | 43:024421f7474c | 554 | pc.printf("read max_g from eeprom:%2.2f\r\n",(float)max_g*0.005); |
| tnanbu | 43:024421f7474c | 555 | |
| tnanbu | 36:709c6fae0b2e | 556 | i2c.frequency(400000); |
| tnanbu | 43:024421f7474c | 557 | |
| tnanbu | 13:df67ca499051 | 558 | sprintf(filename1,"/sd/new_%d",lognum1); |
| tnanbu | 13:df67ca499051 | 559 | sprintf(filename2,"/sd/old_%d",lognum2); |
| tnanbu | 41:43828af3765f | 560 | |
| tnanbu | 41:43828af3765f | 561 | if (wdt.WatchdogCausedReset()) |
| tnanbu | 41:43828af3765f | 562 | pc.printf("WatchDog Reset.\r\n"); |
| tnanbu | 41:43828af3765f | 563 | |
| tnanbu | 43:024421f7474c | 564 | wdt.Configure(23); |
| tnanbu | 13:df67ca499051 | 565 | |
| tnanbu | 33:3369e5fe46aa | 566 | while(!fp1 && retry < 5){ |
| tnanbu | 33:3369e5fe46aa | 567 | fp1 = fopen(filename1,"ab"); |
| tnanbu | 33:3369e5fe46aa | 568 | if(!fp1) { |
| tnanbu | 43:024421f7474c | 569 | pc.printf("fp1(%s) fopen failed errno:%d\r\n",filename1,errno); |
| tnanbu | 33:3369e5fe46aa | 570 | //NVIC_SystemReset(); |
| tnanbu | 33:3369e5fe46aa | 571 | } |
| tnanbu | 40:16c2d6b97a92 | 572 | else{ |
| tnanbu | 40:16c2d6b97a92 | 573 | pc.printf("fp1 fopen success\r\n"); |
| tnanbu | 40:16c2d6b97a92 | 574 | } |
| tnanbu | 33:3369e5fe46aa | 575 | retry++; |
| tnanbu | 33:3369e5fe46aa | 576 | wait_ms(100); |
| tnanbu | 19:2475d32bd93f | 577 | } |
| tnanbu | 33:3369e5fe46aa | 578 | retry = 0; |
| tnanbu | 43:024421f7474c | 579 | |
| tnanbu | 33:3369e5fe46aa | 580 | while(!fp2 && retry < 5){ |
| tnanbu | 33:3369e5fe46aa | 581 | fp2 = fopen(filename2,"ab"); |
| tnanbu | 33:3369e5fe46aa | 582 | if(!fp2) { |
| tnanbu | 43:024421f7474c | 583 | pc.printf("fp2(%s) fopen failed errno:%d\r\n",filename2,errno); |
| tnanbu | 33:3369e5fe46aa | 584 | //NVIC_SystemReset(); |
| tnanbu | 33:3369e5fe46aa | 585 | } |
| tnanbu | 40:16c2d6b97a92 | 586 | else{ |
| tnanbu | 40:16c2d6b97a92 | 587 | pc.printf("fp2 fopen success\r\n"); |
| tnanbu | 40:16c2d6b97a92 | 588 | } |
| tnanbu | 36:709c6fae0b2e | 589 | retry++; |
| tnanbu | 33:3369e5fe46aa | 590 | wait_ms(100); |
| tnanbu | 13:df67ca499051 | 591 | } |
| tnanbu | 43:024421f7474c | 592 | retry = 0; |
| tnanbu | 28:8bda44be0dd0 | 593 | |
| tnanbu | 19:2475d32bd93f | 594 | while(init) { |
| tnanbu | 19:2475d32bd93f | 595 | init = initLIS331(); |
| tnanbu | 19:2475d32bd93f | 596 | initLIS3DH(); |
| tnanbu | 41:43828af3765f | 597 | pc.printf(" init acc sensor %d\r\n",init); |
| tnanbu | 19:2475d32bd93f | 598 | wait_ms(100); |
| tnanbu | 13:df67ca499051 | 599 | } |
| tnanbu | 18:2a42f4052139 | 600 | //interrupt.attach_us(&timer,20000);//20ms |
| tnanbu | 43:024421f7474c | 601 | |
| tnanbu | 43:024421f7474c | 602 | while(1) |
| tnanbu | 13:df67ca499051 | 603 | { |
| tnanbu | 41:43828af3765f | 604 | wdt.Service(); |
| tnanbu | 35:69e2bc347f0c | 605 | timecount++; |
| tnanbu | 35:69e2bc347f0c | 606 | oldcount++; |
| tnanbu | 35:69e2bc347f0c | 607 | newcount++; |
| tnanbu | 28:8bda44be0dd0 | 608 | sub(); |
| tnanbu | 42:f42b74882970 | 609 | wait_us(2500); |
| hakusan270 | 0:b76e4ba14765 | 610 | } |
| tnanbu | 43:024421f7474c | 611 | |
| tnanbu | 43:024421f7474c | 612 | //pc.printf("Program End.\r\n"); |
| tnanbu | 38:87b7b3de6e88 | 613 | return 0; |
| hakusan270 | 0:b76e4ba14765 | 614 | } |
| tnanbu | 11:2d5fcf102778 | 615 | /*********** porting **************/ |
| tnanbu | 11:2d5fcf102778 | 616 | void spiFormat(int b,int m) |
| tnanbu | 11:2d5fcf102778 | 617 | { |
| tnanbu | 11:2d5fcf102778 | 618 | STSPI.format(b,m); /* 8bit */ |
| hakusan270 | 1:025596ffc973 | 619 | } |
| tnanbu | 11:2d5fcf102778 | 620 | void spiFrequency(int f) |
| tnanbu | 11:2d5fcf102778 | 621 | { |
| hakusan270 | 1:025596ffc973 | 622 | STSPI.frequency(f); /* 1Mbps */ |
| hakusan270 | 1:025596ffc973 | 623 | } |
| tnanbu | 11:2d5fcf102778 | 624 | void spiWriteCS(int cs) |
| tnanbu | 11:2d5fcf102778 | 625 | { |
| hakusan270 | 1:025596ffc973 | 626 | STSPICS=cs; |
| hakusan270 | 1:025596ffc973 | 627 | } |
| tnanbu | 11:2d5fcf102778 | 628 | int spiWrite(int wd) |
| tnanbu | 11:2d5fcf102778 | 629 | { |
| tnanbu | 11:2d5fcf102778 | 630 | return ( STSPI.write(wd)); |
| tnanbu | 11:2d5fcf102778 | 631 | } |
| tnanbu | 7:b69fa9bb320d | 632 | |
| tnanbu | 13:df67ca499051 | 633 | /******************************************************* |
| tnanbu | 13:df67ca499051 | 634 | EEPROM WRITE |
| tnanbu | 13:df67ca499051 | 635 | ********************************************************/ |
| tnanbu | 13:df67ca499051 | 636 | HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data) |
| tnanbu | 13:df67ca499051 | 637 | { |
| tnanbu | 13:df67ca499051 | 638 | HAL_StatusTypeDef status; |
| tnanbu | 13:df67ca499051 | 639 | address = address + 0x08080000; |
| tnanbu | 43:024421f7474c | 640 | |
| tnanbu | 43:024421f7474c | 641 | if (!IS_FLASH_DATA_ADDRESS(address)) { |
| tnanbu | 43:024421f7474c | 642 | pc.printf("writeEEPROMByte address outofrange\r\n"); |
| tnanbu | 43:024421f7474c | 643 | return HAL_ERROR; |
| tnanbu | 43:024421f7474c | 644 | } |
| tnanbu | 43:024421f7474c | 645 | |
| tnanbu | 43:024421f7474c | 646 | HAL_FLASHEx_DATAEEPROM_Unlock(); |
| tnanbu | 43:024421f7474c | 647 | //pc.printf("writeEEPROMByte HAL_FLASH_DATAEEPROM_Unlock:%d\r\n",status); |
| tnanbu | 13:df67ca499051 | 648 | status = HAL_FLASHEx_DATAEEPROM_Program(TYPEPROGRAMDATA_BYTE, address, data); |
| tnanbu | 43:024421f7474c | 649 | //pc.printf("writeEEPROMByte HAL_FLASH_DATAEEPROM_Program:%d\r\n",status); |
| tnanbu | 43:024421f7474c | 650 | HAL_FLASHEx_DATAEEPROM_Lock(); |
| tnanbu | 43:024421f7474c | 651 | //pc.printf("writeEEPROMByte HAL_FLASH_DATAEEPROM_lock:%d\r\n",status); |
| tnanbu | 43:024421f7474c | 652 | |
| tnanbu | 13:df67ca499051 | 653 | return status; |
| tnanbu | 13:df67ca499051 | 654 | } |
| tnanbu | 13:df67ca499051 | 655 | |
| tnanbu | 13:df67ca499051 | 656 | /******************************************************* |
| tnanbu | 13:df67ca499051 | 657 | EEPROM READ |
| tnanbu | 13:df67ca499051 | 658 | ********************************************************/ |
| tnanbu | 13:df67ca499051 | 659 | uint8_t readEEPROMByte(uint32_t address) { |
| tnanbu | 13:df67ca499051 | 660 | volatile uint8_t tmp ; |
| tnanbu | 13:df67ca499051 | 661 | address = address + 0x08080000; |
| tnanbu | 13:df67ca499051 | 662 | tmp = *(__IO uint8_t*)address; |
| tnanbu | 13:df67ca499051 | 663 | return tmp; |
| tnanbu | 13:df67ca499051 | 664 | } |
| tnanbu | 13:df67ca499051 | 665 | |
| tnanbu | 13:df67ca499051 | 666 | /*************************** |
| tnanbu | 13:df67ca499051 | 667 | integer sqrt |
| tnanbu | 13:df67ca499051 | 668 | 整数 sqrt √演算を整数で ライブラリより速い |
| tnanbu | 13:df67ca499051 | 669 | ****************************/ |
| tnanbu | 13:df67ca499051 | 670 | int int_sqrt(unsigned int x) |
| tnanbu | 11:2d5fcf102778 | 671 | { |
| tnanbu | 13:df67ca499051 | 672 | register int a = 0, c = 0, y = 0, i = 0, t = x; |
| tnanbu | 13:df67ca499051 | 673 | while(t >>= 1){ |
| tnanbu | 13:df67ca499051 | 674 | ++i; |
| tnanbu | 13:df67ca499051 | 675 | } |
| tnanbu | 13:df67ca499051 | 676 | for(i += i & 1; i >= 0; i -= 2){ |
| tnanbu | 13:df67ca499051 | 677 | c = (y << 1 | 1) <= x >> i; |
| tnanbu | 13:df67ca499051 | 678 | a = a << 1 | c; |
| tnanbu | 13:df67ca499051 | 679 | y = y << 1 | c; |
| tnanbu | 13:df67ca499051 | 680 | x -= c * y << i; |
| tnanbu | 13:df67ca499051 | 681 | y += c; |
| tnanbu | 13:df67ca499051 | 682 | } |
| tnanbu | 13:df67ca499051 | 683 | return a; |
| tnanbu | 7:b69fa9bb320d | 684 | } |