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

Dependencies:   SDFileSystem mbed

Fork of Power_meter_kai_TP2 by Atsumi Toda

main.cpp

Committer:
Joeatsumi
Date:
2017-09-06
Revision:
5:131cbc4990e9
Parent:
4:5858bcd3dc60

File content as of revision 5:131cbc4990e9:

#include "mbed.h"
#include "SDFileSystem.h"
 
//SDFileSystem sd(p5, p6, p7, p8, "sd"); // the pinout on the mbed Cool Components workshop board
SDFileSystem sd(dp2,dp1,dp6,dp13,"sd");
Serial pc(dp16,dp15);
Timer Time ; 
Ticker sd_write ;
DigitalOut myled1(LED1);
AnalogIn vin(dp9);
//Serial pc(dp16,dp15);


int count =0;//最初はTimeLog[0]から始まる

static unsigned long TimeLog[20];//10個の要素を「箱」を用意する

float VinLog[20];
float v; //mbedはfloat値として電圧を12bitで変換する。

unsigned long nowTime = 0;


   
    void SD(){//この関数を0.05秒ごとに呼び出して、その度に経過時間をTimeLog[]に代入する。
              //つまり、50ms毎の時間が配列に保存される。
              //1000ms経過するとそれらの値をまとめてsdカードに保存する。
        
    __disable_irq();//この関数を最優先に割り込みする。
     myled1 = 0 ;
     
      if(count<19){
              
          TimeLog[count]=nowTime;
          VinLog[count]=v;
          pc.printf("Bridge=%.2f\r\n",VinLog[count]);
          
          count++;    
          
      }else{
         
         TimeLog[19]=nowTime;
         VinLog[19]=v;
         
         pc.printf("Bridge=%.2f\n",VinLog[count]);   
 
         mkdir("/sd/mydir", 0777);
    
         FILE *fp = fopen("/sd/mydir/sdtest_kai.csv", "a");
          if(fp == NULL) {
        error("Could not open file for write\n");
             }
                 // 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]
                   // ,TimeLog[10],TimeLog[11],TimeLog[12],TimeLog[13],TimeLog[14],TimeLog[15],TimeLog[16],TimeLog[17],TimeLog[18],TimeLog[19]);
            
            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]);
            
              myled1 = 1 ;
              fclose(fp); 
              free(fp);
              
              pc.printf("Noe logging\r\n");
    
               count=0;//カウントをリセットする
               
               }//if end
     
          __enable_irq();
        }
 
 
 int main(){   
        Time.start();
        sd_write.attach(&SD,0.05);//0.05秒ごとにSDという関数を発動し、割り込みする。
               
    while(1){
        nowTime = Time.read_ms();
        v=vin.read()*3.3;
        }   
}