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

Dependencies:   mbed SDFileSystem_

Committer:
tnanbu
Date:
Mon Sep 06 07:30:43 2021 +0000
Revision:
28:ea423204d626
Parent:
27:e7bc38c6399c
a

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 8:7f80139df48d 3 #include <time.h>
tnanbu 27:e7bc38c6399c 4 #include <errno.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 27:e7bc38c6399c 38 //#define OFFSET_X 220
tnanbu 27:e7bc38c6399c 39 //#define OFFSET_Y 220
tnanbu 27:e7bc38c6399c 40 //#define OFFSET_Z -40
tnanbu 24:40e6b7c8d2f1 41 #define OFFSET_X 375
tnanbu 25:0cbab3945069 42 #define OFFSET_Y 340
tnanbu 21:6ce20b05602a 43 #define OFFSET_Z -200
tnanbu 11:2d5fcf102778 44
tnanbu 13:df67ca499051 45 HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data);
tnanbu 13:df67ca499051 46 uint8_t readEEPROMByte(uint32_t address);
tnanbu 13:df67ca499051 47
tnanbu 13:df67ca499051 48
tnanbu 13:df67ca499051 49 //H3LIS331DL h3dacc(PB_7,PB_6);
tnanbu 13:df67ca499051 50 I2C i2c(PB_7,PB_6); //NUCLEO pin assign
hakusan270 5:fbeb85ebd47b 51
hakusan270 0:b76e4ba14765 52 RawSerial pc(PA_9, PA_10,115200); //console UART
tnanbu 13:df67ca499051 53 //LowPowerTicker interrupt;
tnanbu 18:2a42f4052139 54 //Ticker interrupt;
hakusan270 0:b76e4ba14765 55 SPI STSPI(PB_15, PB_14, PB_13); //mosi,miso,clk
hakusan270 0:b76e4ba14765 56 DigitalOut STSPICS(PB_12);
rgoto 6:bf4321ef0330 57
rgoto 6:bf4321ef0330 58 SDFileSystem *sd = new SDFileSystem(PA_12, PA_11, PB_3, PA_15, "sd"); // mosi, miso, sclk, cs, name
rgoto 6:bf4321ef0330 59
hakusan270 0:b76e4ba14765 60 DigitalOut led(PB_5);
hakusan270 1:025596ffc973 61 int initLIS3DH();
hakusan270 1:025596ffc973 62 int read3axes(short *tx,short *ty,short *tz);
tnanbu 13:df67ca499051 63 int initLIS331();
tnanbu 13:df67ca499051 64 int read3axes331(short *tx,short *ty,short *tz);
tnanbu 13:df67ca499051 65 int int_sqrt(unsigned int x);
tnanbu 7:b69fa9bb320d 66 //int readTemp(short *tmp);
tnanbu 11:2d5fcf102778 67 FILE *fp1,*fp2;//fp1:H3LIS331DL, fp2:LIS3DH
tnanbu 13:df67ca499051 68 unsigned long timecount = 0;
tnanbu 13:df67ca499051 69 int oldcount = 0;
tnanbu 13:df67ca499051 70 //uint8_t maxacc = 0;
tnanbu 27:e7bc38c6399c 71 long max_g=0;
tnanbu 27:e7bc38c6399c 72 long now_g=0;
tnanbu 16:1caaa96ae3eb 73 int update=0;
tnanbu 13:df67ca499051 74 char buffer1[512] = {};
tnanbu 13:df67ca499051 75 char buffer2[512] = {};
tnanbu 19:2475d32bd93f 76 char stracc1[64] = {}, stracc2[32] = {};
tnanbu 13:df67ca499051 77 int lognum1 = 0, lognum2 = 0;
tnanbu 13:df67ca499051 78 char filename1[32]= {};
tnanbu 13:df67ca499051 79 char filename2[32]= {};
tnanbu 19:2475d32bd93f 80 int ret = 0,init=1;
tnanbu 11:2d5fcf102778 81
tnanbu 18:2a42f4052139 82 /*
tnanbu 13:df67ca499051 83 void timer(){
tnanbu 15:12d0699ad423 84 }
tnanbu 18:2a42f4052139 85 */
tnanbu 15:12d0699ad423 86
tnanbu 15:12d0699ad423 87 void sub(){
tnanbu 13:df67ca499051 88 short tx=0,ty=0,tz=0;
tnanbu 18:2a42f4052139 89 //float scr=0;
tnanbu 18:2a42f4052139 90 long scr = 0;
tnanbu 13:df67ca499051 91 //static long ax,ay,az,as;
tnanbu 13:df67ca499051 92 //static int cnt;
tnanbu 13:df67ca499051 93
tnanbu 13:df67ca499051 94 read3axes331(&tx,&ty,&tz);
tnanbu 13:df67ca499051 95 //キャリブレーションの補正
tnanbu 13:df67ca499051 96 tx += OFFSET_X;
tnanbu 13:df67ca499051 97 ty += OFFSET_Y;
tnanbu 13:df67ca499051 98 tz += OFFSET_Z;
tnanbu 13:df67ca499051 99
tnanbu 13:df67ca499051 100 //スカラー値変換
tnanbu 18:2a42f4052139 101 scr = int_sqrt( tx*tx + ty*ty + tz*tz);// 195mg/digit
tnanbu 13:df67ca499051 102 now_g = scr;
tnanbu 13:df67ca499051 103
tnanbu 13:df67ca499051 104 //ax+= tx;
tnanbu 13:df67ca499051 105 //ay+= ty;
tnanbu 13:df67ca499051 106 //az+= tz;
tnanbu 13:df67ca499051 107 //as+= scr;
tnanbu 13:df67ca499051 108 //cnt++;
tnanbu 28:ea423204d626 109 pc.printf("%d,new x:%2.2f y:%2.2f,z:%2.2f scaler = %2.2f \r\n",time(NULL),(float)tx*0.005,(float)ty*0.005,(float)tz*0.005,(float)scr*0.005);
tnanbu 19:2475d32bd93f 110 //pc.printf("new x:%d y:%d,z:%d scaler = %d \r\n",tx,ty,tz,scr);
tnanbu 18:2a42f4052139 111
tnanbu 13:df67ca499051 112 if ( max_g < scr) {
tnanbu 13:df67ca499051 113 max_g = scr;
tnanbu 13:df67ca499051 114 update=1;
tnanbu 27:e7bc38c6399c 115 pc.printf("%max g=%d \r\n",max_g);
tnanbu 13:df67ca499051 116 //Save EEPROM
tnanbu 27:e7bc38c6399c 117 //writeEEPROMByte(0, max_g);
tnanbu 27:e7bc38c6399c 118 for(int i = 0; i < 4; i++){
tnanbu 27:e7bc38c6399c 119 pc.printf("writerom 0x%x\r\n",(max_g >> 8*i) & 0xFF);
tnanbu 27:e7bc38c6399c 120 writeEEPROMByte(i, (max_g >> 8*i) & 0xFF);
tnanbu 27:e7bc38c6399c 121 }
tnanbu 27:e7bc38c6399c 122 //for(int i = 0; i < 4; i++){
tnanbu 27:e7bc38c6399c 123 //pc.printf("readEEPROM:0x%x\r\n",readEEPROMByte(i) << 8*i);
tnanbu 27:e7bc38c6399c 124 //}
tnanbu 8:7f80139df48d 125 }
tnanbu 13:df67ca499051 126
tnanbu 20:db6a609232d2 127 sprintf(stracc1,"%d,%2.2f,%2.2f,%2.2f,%2.2f\r\n",timecount,(float)tx*0.005,(float)ty*0.005,(float)tz*0.005,(float)scr*0.005);
tnanbu 13:df67ca499051 128 //pc.printf("h3lis331dl:%s",stracc1);
tnanbu 13:df67ca499051 129 if(strlen(buffer1)+strlen(stracc1) > 512) {
tnanbu 11:2d5fcf102778 130 //pc.printf("buffer over. write file2\r\n");
tnanbu 18:2a42f4052139 131
tnanbu 8:7f80139df48d 132 ret = fprintf(fp1,"%s",buffer1);
tnanbu 27:e7bc38c6399c 133 if(ret <= 0){
tnanbu 27:e7bc38c6399c 134 pc.printf("fp1 write failed:%d. errno:%d. Reboot!!!\r\n",ret,errno);
tnanbu 13:df67ca499051 135 NVIC_SystemReset();
tnanbu 13:df67ca499051 136 }
tnanbu 18:2a42f4052139 137
tnanbu 8:7f80139df48d 138 memset(buffer1,0,sizeof(buffer1));
tnanbu 8:7f80139df48d 139 sprintf(buffer1,"%s",stracc1);
tnanbu 11:2d5fcf102778 140 } else {
tnanbu 11:2d5fcf102778 141 sprintf(buffer1,"%s%s",buffer1,stracc1);
tnanbu 7:b69fa9bb320d 142 }
tnanbu 13:df67ca499051 143
tnanbu 13:df67ca499051 144 if(oldcount == 10){
tnanbu 11:2d5fcf102778 145 //LIS3DH
tnanbu 13:df67ca499051 146 read3axes(&tx,&ty,&tz);
tnanbu 13:df67ca499051 147 scr = int_sqrt( tx*tx + ty*ty + tz*tz);
tnanbu 13:df67ca499051 148 pc.printf("old x:%d y:%d,z:%d scaler = %d max g=%2.2fG \r\n",tx,ty,tz,scr, (float)max_g/11.0f);
tnanbu 14:2707af31e02f 149 sprintf(stracc2,"%d,%d\r\n",timecount,scr);
tnanbu 11:2d5fcf102778 150 //pc.printf("lis3dh:%s",stracc2);
tnanbu 11:2d5fcf102778 151 if(strlen(buffer2)+ strlen(stracc2)> 512) {
tnanbu 18:2a42f4052139 152
tnanbu 11:2d5fcf102778 153 ret = fprintf(fp2,"%s",buffer2);
tnanbu 27:e7bc38c6399c 154 if(ret <= 0){
tnanbu 27:e7bc38c6399c 155 pc.printf("fp2 write failed:%d. errno:%d. Reboot!!!\r\n",ret,errno);
tnanbu 13:df67ca499051 156 NVIC_SystemReset();
tnanbu 13:df67ca499051 157 }
tnanbu 18:2a42f4052139 158
tnanbu 11:2d5fcf102778 159 memset(buffer2,0,sizeof(buffer2));
tnanbu 11:2d5fcf102778 160 sprintf(buffer2,"%s",stracc2);
tnanbu 11:2d5fcf102778 161 } else {
tnanbu 11:2d5fcf102778 162 sprintf(buffer2,"%s%s",buffer2,stracc2);
tnanbu 7:b69fa9bb320d 163 }
tnanbu 13:df67ca499051 164 oldcount = 0;
tnanbu 11:2d5fcf102778 165 }
tnanbu 19:2475d32bd93f 166
tnanbu 13:df67ca499051 167 if(time(NULL) > 86400){
tnanbu 8:7f80139df48d 168 //Create New File
tnanbu 8:7f80139df48d 169 set_time(NULL);
tnanbu 27:e7bc38c6399c 170 //pc.printf("time over:%d\r\n",time(NULL));
tnanbu 11:2d5fcf102778 171 timecount = 0;
tnanbu 8:7f80139df48d 172 fclose(fp1);
tnanbu 27:e7bc38c6399c 173 fp1 = NULL;
tnanbu 8:7f80139df48d 174 fclose(fp2);
tnanbu 27:e7bc38c6399c 175 fp2 = NULL;
tnanbu 8:7f80139df48d 176 lognum1++;
tnanbu 8:7f80139df48d 177 lognum2++;
tnanbu 13:df67ca499051 178 sprintf(filename1,"/sd/new_%d",lognum1);
tnanbu 13:df67ca499051 179 sprintf(filename2,"/sd/old_%d",lognum2);
tnanbu 8:7f80139df48d 180 fp1 = fopen(filename1,"a");
tnanbu 8:7f80139df48d 181 if(!fp1){
tnanbu 27:e7bc38c6399c 182 pc.printf("fp1 create file failed:%d\r\n",errno);
tnanbu 13:df67ca499051 183 NVIC_SystemReset();
tnanbu 8:7f80139df48d 184 }
tnanbu 8:7f80139df48d 185 fp2 = fopen(filename2,"a");
tnanbu 11:2d5fcf102778 186 if(!fp2){
tnanbu 27:e7bc38c6399c 187 pc.printf("fp2 create file failed:%d\r\n",errno);
tnanbu 13:df67ca499051 188 NVIC_SystemReset();
tnanbu 11:2d5fcf102778 189 }
tnanbu 7:b69fa9bb320d 190 }
tnanbu 13:df67ca499051 191 }
tnanbu 13:df67ca499051 192
tnanbu 13:df67ca499051 193 int main()
tnanbu 13:df67ca499051 194 {
tnanbu 13:df67ca499051 195 sprintf(filename1,"/sd/new_%d",lognum1);
tnanbu 13:df67ca499051 196 sprintf(filename2,"/sd/old_%d",lognum2);
tnanbu 13:df67ca499051 197
tnanbu 19:2475d32bd93f 198 fp1 = fopen(filename1,"a");
tnanbu 19:2475d32bd93f 199 if(!fp1) {
tnanbu 27:e7bc38c6399c 200 pc.printf("fp1(%s) open failed errno:%d\r\n",filename1,errno);
tnanbu 19:2475d32bd93f 201 //NVIC_SystemReset();
tnanbu 19:2475d32bd93f 202 }
tnanbu 19:2475d32bd93f 203 fp2 = fopen(filename2,"a");
tnanbu 19:2475d32bd93f 204 if(!fp2) {
tnanbu 27:e7bc38c6399c 205 pc.printf("fp2(%s) open failed errno:%d\r\n",filename2,errno);
tnanbu 19:2475d32bd93f 206 //NVIC_SystemReset();
tnanbu 13:df67ca499051 207 }
tnanbu 27:e7bc38c6399c 208
tnanbu 27:e7bc38c6399c 209 //Read Max G
tnanbu 27:e7bc38c6399c 210 for(int i = 0; i < 4; i++){
tnanbu 27:e7bc38c6399c 211 //pc.printf("readEEPROM:0x%x\r\n",readEEPROMByte(i));
tnanbu 27:e7bc38c6399c 212 max_g |= readEEPROMByte(i) << 8*i;
tnanbu 27:e7bc38c6399c 213 }
tnanbu 27:e7bc38c6399c 214 pc.printf("read max_g from eeprom:%d\r\n",max_g);
tnanbu 13:df67ca499051 215
tnanbu 19:2475d32bd93f 216 while(init) {
tnanbu 19:2475d32bd93f 217 init = initLIS331();
tnanbu 19:2475d32bd93f 218 initLIS3DH();
tnanbu 19:2475d32bd93f 219 pc.printf(" init acc sensor %d\r\n",ret);
tnanbu 19:2475d32bd93f 220 wait_ms(100);
tnanbu 13:df67ca499051 221 }
tnanbu 18:2a42f4052139 222 //interrupt.attach_us(&timer,20000);//20ms
tnanbu 13:df67ca499051 223 while(1)
tnanbu 13:df67ca499051 224 {
tnanbu 27:e7bc38c6399c 225 sub();
tnanbu 27:e7bc38c6399c 226 timecount++;
tnanbu 27:e7bc38c6399c 227 oldcount++;
tnanbu 27:e7bc38c6399c 228 wait_ms(20);
hakusan270 0:b76e4ba14765 229 }
tnanbu 13:df67ca499051 230
hakusan270 0:b76e4ba14765 231 }
tnanbu 11:2d5fcf102778 232 /*********** porting **************/
tnanbu 11:2d5fcf102778 233 void spiFormat(int b,int m)
tnanbu 11:2d5fcf102778 234 {
tnanbu 11:2d5fcf102778 235 STSPI.format(b,m); /* 8bit */
hakusan270 1:025596ffc973 236 }
tnanbu 11:2d5fcf102778 237 void spiFrequency(int f)
tnanbu 11:2d5fcf102778 238 {
hakusan270 1:025596ffc973 239 STSPI.frequency(f); /* 1Mbps */
hakusan270 1:025596ffc973 240 }
tnanbu 11:2d5fcf102778 241 void spiWriteCS(int cs)
tnanbu 11:2d5fcf102778 242 {
hakusan270 1:025596ffc973 243 STSPICS=cs;
hakusan270 1:025596ffc973 244 }
tnanbu 11:2d5fcf102778 245 int spiWrite(int wd)
tnanbu 11:2d5fcf102778 246 {
tnanbu 11:2d5fcf102778 247 return ( STSPI.write(wd));
tnanbu 11:2d5fcf102778 248 }
tnanbu 7:b69fa9bb320d 249
tnanbu 13:df67ca499051 250 /*******************************************************
tnanbu 13:df67ca499051 251 EEPROM WRITE
tnanbu 13:df67ca499051 252 ********************************************************/
tnanbu 13:df67ca499051 253 HAL_StatusTypeDef writeEEPROMByte(uint32_t address, uint8_t data)
tnanbu 13:df67ca499051 254 {
tnanbu 13:df67ca499051 255 HAL_StatusTypeDef status;
tnanbu 13:df67ca499051 256 address = address + 0x08080000;
tnanbu 13:df67ca499051 257 HAL_FLASHEx_DATAEEPROM_Unlock(); //Unprotect the EEPROM to allow writing
tnanbu 13:df67ca499051 258 status = HAL_FLASHEx_DATAEEPROM_Program(TYPEPROGRAMDATA_BYTE, address, data);
tnanbu 13:df67ca499051 259 HAL_FLASHEx_DATAEEPROM_Lock(); // Reprotect the EEPROM
tnanbu 13:df67ca499051 260 return status;
tnanbu 13:df67ca499051 261 }
tnanbu 13:df67ca499051 262
tnanbu 13:df67ca499051 263 /*******************************************************
tnanbu 13:df67ca499051 264 EEPROM READ
tnanbu 13:df67ca499051 265 ********************************************************/
tnanbu 13:df67ca499051 266 uint8_t readEEPROMByte(uint32_t address) {
tnanbu 13:df67ca499051 267 volatile uint8_t tmp ;
tnanbu 13:df67ca499051 268 address = address + 0x08080000;
tnanbu 13:df67ca499051 269 tmp = *(__IO uint8_t*)address;
tnanbu 13:df67ca499051 270 return tmp;
tnanbu 13:df67ca499051 271 }
tnanbu 13:df67ca499051 272
tnanbu 13:df67ca499051 273 /***************************
tnanbu 13:df67ca499051 274 integer sqrt
tnanbu 13:df67ca499051 275 整数 sqrt √演算を整数で ライブラリより速い
tnanbu 13:df67ca499051 276 ****************************/
tnanbu 13:df67ca499051 277 int int_sqrt(unsigned int x)
tnanbu 11:2d5fcf102778 278 {
tnanbu 13:df67ca499051 279 register int a = 0, c = 0, y = 0, i = 0, t = x;
tnanbu 13:df67ca499051 280 while(t >>= 1){
tnanbu 13:df67ca499051 281 ++i;
tnanbu 13:df67ca499051 282 }
tnanbu 13:df67ca499051 283 for(i += i & 1; i >= 0; i -= 2){
tnanbu 13:df67ca499051 284 c = (y << 1 | 1) <= x >> i;
tnanbu 13:df67ca499051 285 a = a << 1 | c;
tnanbu 13:df67ca499051 286 y = y << 1 | c;
tnanbu 13:df67ca499051 287 x -= c * y << i;
tnanbu 13:df67ca499051 288 y += c;
tnanbu 13:df67ca499051 289 }
tnanbu 13:df67ca499051 290 return a;
tnanbu 7:b69fa9bb320d 291 }