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_
Diff: main.cpp
- 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)