I-O DATA DEV2 / Mbed 2 deprecated ud-gs4-R_400G_SD_Log_No1

Dependencies:   mbed SDFileSystem_

Committer:
tnanbu
Date:
Mon Sep 13 08:54:03 2021 +0000
Revision:
41:43828af3765f
Parent:
40:16c2d6b97a92
Child:
42:f42b74882970
watchdog

Who changed what in which revision?

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