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

Dependencies:   mbed SDFileSystem_

Revision:
33:3369e5fe46aa
Parent:
32:856ed001ce2e
Child:
34:6bffe97ae35d
--- a/main.cpp	Tue Sep 07 01:28:07 2021 +0000
+++ b/main.cpp	Tue Sep 07 07:38:07 2021 +0000
@@ -1,6 +1,6 @@
 #include "mbed.h"
 #include "SDFileSystem.h"
-#include <time.h>
+//#include <time.h>
 #include <errno.h>
 
 /*
@@ -36,16 +36,19 @@
 
 //キャリブレーション 仮値
 //No.1
-#define OFFSET_X   220
-#define OFFSET_Y   220 
-#define OFFSET_Z   -40 
+//#define OFFSET_X   220
+//#define OFFSET_Y   220 
+//#define OFFSET_Z   -40 
 //No.2
 //#define OFFSET_X   375 
 //#define OFFSET_Y   340 
 //#define OFFSET_Z   -200
-//#define OFFSET_X   0 
-//#define OFFSET_Y   0 
-//#define OFFSET_Z   0
+#define OFFSET_X   0
+#define OFFSET_Y   0 
+#define OFFSET_Z   0
+
+#define DATA_SIZE 512
+//#define MBED_BUFF 512
 
 
 HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data);
@@ -72,17 +75,18 @@
 //int readTemp(short *tmp);
 FILE     *fp1,*fp2;//fp1:H3LIS331DL, fp2:LIS3DH
 unsigned long timecount = 0;
-int oldcount = 0;
+short oldcount = 0;
+short newcount = 0;
 //uint8_t maxacc = 0;
 long max_g=0;
-long now_g=0;
-int  update=0;
-char buffer1[4096] = {};
-char buffer2[512] = {};
+long tmp_max=0;
+short  update=0;
+char buffer1[DATA_SIZE] = {};
+char buffer2[DATA_SIZE] = {};
 char stracc1[32] = {}, stracc2[32] = {};
  int lognum1 = 0, lognum2 = 0;
-char filename1[32]= {};
-char filename2[32]= {};
+char filename1[16]= {};
+char filename2[16]= {};
 int ret = 0,init=1;
 
 /*
@@ -91,11 +95,13 @@
 */
 
 void sub(){
-    short tx=0,ty=0,tz=0;
-    //float scr=0;
-    long scr = 0;
-    //static long ax,ay,az,as;
+    static short tx=0,ty=0,tz=0;
+    static long scr = 0;
+    static long ax,ay,az,as;
+    //static long ax1,ay2,az2,as2;
     //static  int cnt;
+    //static char *bufferIndex;
+    //static unsigned int storeSize;
     
     read3axes331(&tx,&ty,&tz);
     //キャリブレーションの補正
@@ -105,20 +111,21 @@
     
     //スカラー値変換
     scr = int_sqrt( tx*tx  + ty*ty + tz*tz);// 195mg/digit
-    now_g = scr;
+    //now_g = scr;
     
-    //ax+= tx;
-    //ay+= ty;
-    //az+= tz;
-    //as+= scr;
-    //cnt++;
-    pc.printf("%d,%d,new 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);
+    ax+= tx;
+    ay+= ty;
+    az+= tz;
+    as+= scr;
+    newcount++;
+    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);
     //pc.printf("new x:%d y:%d,z:%d scaler = %d \r\n",tx,ty,tz,scr);
     
+    //Total Max G
     if ( max_g < scr) {
         max_g = scr;
         update=1;
-        pc.printf("%max g=%d \r\n",max_g);
+        //pc.printf("%max g=%d \r\n",max_g);
         //Save EEPROM
         for(int i = 0; i < 4; i++){
             pc.printf("writerom 0x%x\r\n",(max_g >> 8*i) & 0xFF);
@@ -126,32 +133,62 @@
         }
     }
     
+    //MAX G per 50cycle
+    if(tmp_max < scr){
+        tmp_max = scr;
+    }
+    
     //sprintf(stracc1,"%d,%d,%2.2f,%2.2f,%2.2f,%2.2f\r\n",timecount,time(NULL),(float)tx*0.005,(float)ty*0.005,(float)tz*0.005,(float)scr*0.005);
-    sprintf(stracc1,"%d,%d,%d\r\n",timecount,time(NULL),scr);
+    //sprintf(stracc1,"%d,%d,%d\r\n",timecount,time(NULL),scr);
+    //sprintf(stracc1,"%d,%d\r\n",timecount,time(NULL));
     //pc.printf("h3lis331dl:%s",stracc1);
-    if(strlen(buffer1)+strlen(stracc1) > 4096) {
-            ret = fprintf(fp1,"%s",buffer1);
-             if(ret <= 0){
+    
+    //50回平均(/s)
+    if (newcount == 50) {
+        float asc = (float)as / 50.0f;
+        pc.printf("avarage x:%3.2f,y:%3.2f,z:%3.2f,scaler=%3.2f,max:%3.2f\r\n",
+            (float)ax/50.0f*0.005,(float)ay/50.0f*0.005,(float)az/50.0f*0.005,(float)as/50.0f*0.005, (float)tmp_max*0.005);
+        sprintf(stracc1,"%d,%d,%3.2f,%3.2f\r\n",timecount,time(NULL),asc*0.005,(float)tmp_max*0.005);
+        
+        if(strlen(buffer1)+strlen(stracc1) > DATA_SIZE) {
+            pc.printf("try write fp1\r\n");
+            //ret = fprintf(fp1,"%s",buffer1);
+            ret = fwrite(buffer1,sizeof(char),strlen(buffer1),fp1);
+            //if(ret <= 0){
+            if(ret < strlen(buffer1)){
                 pc.printf("fp1 write failed:%d. errno:%d. Reboot!!!\r\n",ret,errno);
                 NVIC_SystemReset();
-            }
-            
+            }    
             memset(buffer1,0,sizeof(buffer1));
             sprintf(buffer1,"%s",stracc1);
-        } else {
+            } else {
             sprintf(buffer1,"%s%s",buffer1,stracc1);
         }
     
+        as=ax=ay=az=0;
+        newcount = 0;
+        tmp_max = 0;
+    }
+    
     if(oldcount == 10){
         //LIS3DH
         read3axes(&tx,&ty,&tz);
         scr = int_sqrt( tx*tx  + ty*ty + tz*tz);
+        //ax2+= tx;
+        //ay2+= ty;
+        //az2+= tz;
+        //as2+= scr;
+        //oldcount++;
         //pc.printf("%d,%d,old x:%d y:%d,z:%d scaler = %d\r\n",timecount,time(NULL),tx,ty,tz,scr);
-        sprintf(stracc2,"%d,%d,%d\r\n",timecount,time(NULL),scr);
+        //sprintf(stracc2,"%d,%d,%d\r\n",timecount,time(NULL),scr);
         //pc.printf("lis3dh:%s",stracc2);
+    
         if(strlen(buffer2)+ strlen(stracc2)> 512) {
-            ret = fprintf(fp2,"%s",buffer2);
-            if(ret <= 0){
+            //pc.printf("try write fp2\r\n");
+            //ret = fprintf(fp2,"%s",buffer2);
+            ret = fwrite(buffer2,sizeof(char),strlen(buffer2),fp2);
+            //if(ret <= 0){
+                if(strlen(buffer2)){
                 pc.printf("fp2 write failed:%d. errno:%d. Reboot!!!\r\n",ret,errno);
                 NVIC_SystemReset();
             }
@@ -161,6 +198,7 @@
         } else {
             sprintf(buffer2,"%s%s",buffer2,stracc2);
         }
+        
         oldcount = 0;
     }
 
@@ -169,19 +207,21 @@
             set_time(NULL);
             timecount = 0;
             fclose(fp1);
+            free(fp1);
             fp1 = NULL;
             fclose(fp2);
+            free(fp2);
             fp2 = NULL;
             lognum1++;
             lognum2++;
             sprintf(filename1,"/sd/new_%d",lognum1);
             sprintf(filename2,"/sd/old_%d",lognum2);
-            fp1 = fopen(filename1,"a");
+            fp1 = fopen(filename1,"ab");
             if(!fp1){
                 pc.printf("fp1 create file failed:%d\r\n",errno);
                 NVIC_SystemReset();
                 }
-            fp2 = fopen(filename2,"a");
+            fp2 = fopen(filename2,"ab");
             if(!fp2){
                 pc.printf("fp2 create file failed:%d\r\n",errno);
                 NVIC_SystemReset();
@@ -192,18 +232,28 @@
 
 int main()
 {
+    short retry = 0;
     sprintf(filename1,"/sd/new_%d",lognum1);
     sprintf(filename2,"/sd/old_%d",lognum2);
 
-    fp1 = fopen(filename1,"a");
-    if(!fp1) {
-        pc.printf("fp1(%s) open failed errno:%d\r\n",filename1,errno);
-        //NVIC_SystemReset();
+    while(!fp1 && retry < 5){
+        fp1 = fopen(filename1,"ab");
+        if(!fp1) {
+            pc.printf("fp1(%s) open failed errno:%d\r\n",filename1,errno);
+            //NVIC_SystemReset();
+        }
+        retry++;
+        wait_ms(100);
     }
-    fp2 = fopen(filename2,"a");
-    if(!fp2) {
-        pc.printf("fp2(%s) open failed errno:%d\r\n",filename2,errno);
-        //NVIC_SystemReset();
+    retry = 0;
+    while(!fp2 && retry < 5){
+        fp2 = fopen(filename2,"ab");
+        if(!fp2) {
+            pc.printf("fp2(%s) open failed errno:%d\r\n",filename2,errno);
+            //NVIC_SystemReset();
+        }
+        wait_ms(100);
+        retry++;
     }
     
     //Read Max G
@@ -224,10 +274,10 @@
     {
         sub();
         timecount++;
-        oldcount++;
+        //oldcount++;
+        //newcount++;
         wait_ms(20);
     }
-    
 }
 /*********** porting **************/
 void spiFormat(int b,int m)