改良型。2017/9/6作動。

Dependencies:   SDFileSystem mbed

Fork of Power_meter_kai_TP2 by Atsumi Toda

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "SDFileSystem.h"
00003  
00004 //SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
00005 SDFileSystem sd(dp2,dp1,dp6,dp13,"sd");
00006 Serial pc(dp16,dp15);
00007 Timer Time ; 
00008 Ticker sd_write ;
00009 DigitalOut myled1(LED1);
00010 AnalogIn vin(dp9);
00011 //Serial pc(dp16,dp15);
00012 
00013 
00014 int count =0;//最初はTimeLog[0]から始まる
00015 
00016 static unsigned long TimeLog[20];//10個の要素を「箱」を用意する
00017 
00018 float VinLog[20];
00019 float v; //mbedはfloat値として電圧を12bitで変換する。
00020 
00021 unsigned long nowTime = 0;
00022 
00023 
00024    
00025     void SD(){//この関数を0.05秒ごとに呼び出して、その度に経過時間をTimeLog[]に代入する。
00026               //つまり、50ms毎の時間が配列に保存される。
00027               //1000ms経過するとそれらの値をまとめてsdカードに保存する。
00028         
00029     __disable_irq();//この関数を最優先に割り込みする。
00030      myled1 = 0 ;
00031      
00032       if(count<19){
00033               
00034           TimeLog[count]=nowTime;
00035           VinLog[count]=v;
00036           pc.printf("Bridge=%.2f\r\n",VinLog[count]);
00037           
00038           count++;    
00039           
00040       }else{
00041          
00042          TimeLog[19]=nowTime;
00043          VinLog[19]=v;
00044          
00045          pc.printf("Bridge=%.2f\n",VinLog[count]);   
00046  
00047          mkdir("/sd/mydir", 0777);
00048     
00049          FILE *fp = fopen("/sd/mydir/sdtest_kai.csv", "a");
00050           if(fp == NULL) {
00051         error("Could not open file for write\n");
00052              }
00053                  // fprintf(fp, "%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n",TimeLog[0],TimeLog[1],TimeLog[2],TimeLog[3],TimeLog[4],TimeLog[5],TimeLog[6],TimeLog[7],TimeLog[8],TimeLog[9]
00054                    // ,TimeLog[10],TimeLog[11],TimeLog[12],TimeLog[13],TimeLog[14],TimeLog[15],TimeLog[16],TimeLog[17],TimeLog[18],TimeLog[19]);
00055             
00056             fprintf(fp,"%d,%.2f\r\n%d,%.2f\r\n%d,%.2f\r\n",TimeLog[0],VinLog[0],TimeLog[1],VinLog[1],TimeLog[2],VinLog[2]);
00057             
00058               myled1 = 1 ;
00059               fclose(fp); 
00060               free(fp);
00061               
00062               pc.printf("Noe logging\r\n");
00063     
00064                count=0;//カウントをリセットする
00065                
00066                }//if end
00067      
00068           __enable_irq();
00069         }
00070  
00071  
00072  int main(){   
00073         Time.start();
00074         sd_write.attach(&SD,0.05);//0.05秒ごとにSDという関数を発動し、割り込みする。
00075                
00076     while(1){
00077         nowTime = Time.read_ms();
00078         v=vin.read()*3.3;
00079         }   
00080 }