Atsumi Toda / Mbed 2 deprecated Power_meter_kai_TP4

Dependencies:   SDFileSystem mbed

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 //Serial pc(USBTX, USBRX);
00005 Serial pc(dp16,dp15);
00006 Ticker timer;
00007 Timer time2 ;
00008 
00009 DigitalIn sw(dp17);
00010 
00011 int i;//ドリフトを抑えるループの中で使う。
00012 
00013 unsigned long beforeTime = 0;
00014 unsigned long elapsedTime = 0;
00015 unsigned long nowTime = 0;
00016 int flagHi = 0 ;
00017 int rpm = 0 ;
00018 double t;
00019  
00020 
00021 //SDFileSystem sd(p5,p6,p7,p8,"sd");//lpc1768用
00022 SDFileSystem sd(dp2,dp1,dp6,dp13,"sd");//lpc1114fn28用
00023 
00024 AnalogIn vin (dp9);
00025 AnalogIn hole(dp10);
00026 
00027 float v;
00028 float vin_center=0;
00029 
00030 FILE* fp;
00031  
00032 void SD()
00033 {
00034     
00035     fprintf(fp,"%f,%d,%.3f,%.3f\n",t,rpm,v,vin_center);
00036     t += 0.01;
00037 } 
00038   
00039 int main() {
00040     
00041     //==========初期電圧のドリフトを押さえる=========//
00042          for(i=0;i<10;i++){
00043              vin_center= vin_center + vin.read()*3.3;
00044     wait(0.01);
00045    }
00046   
00047      vin_center=vin_center/10.0;
00048     //==========================================//
00049     
00050     
00051     pc.printf("Start!\n");
00052    // printf("Start!\n");
00053     
00054     time2.start();
00055     
00056     
00057     fp = fopen("/sd/power_meter_data.csv", "w");
00058     if(fp == NULL) {
00059         error("Could not open file for write\n");
00060     }
00061     
00062     pc.printf("Start writing!\n");
00063     
00064     
00065    // printf("Start writing!\n");
00066     
00067    // void SD_p();
00068     
00069     fclose(fp);
00070     fp = fopen("/sd/power_meter_data.csv", "w");
00071 //    fprintf(fp,"power_meter_data\n");
00072     fprintf(fp,"t,rpm,v,vin_center\n");
00073     
00074     timer.attach(&SD, 0.01);
00075     while(1){
00076         
00077         v=vin.read()*3.3;
00078         
00079          //回転数計算
00080          
00081         nowTime = time2.read_ms();
00082         
00083         if(hole >= 0.5 && flagHi == 0){//パルスHi
00084          pc.printf("%d\r\n",rpm);
00085          elapsedTime = nowTime - beforeTime;//前回パルスアップからの経過時間
00086            rpm = 60000 / elapsedTime ;
00087     beforeTime = time2.read_ms();//今の時間を記録する
00088     flagHi = 1;
00089   }
00090   if (hole <0.5 && flagHi == 1){//パルスLow
00091     flagHi = 0;
00092   }
00093   if(nowTime - beforeTime>6000){
00094     elapsedTime=0;
00095   }//回転数end   
00096         
00097         if(sw==1)
00098         {
00099             timer.detach();
00100             break;
00101             }
00102     }//while end
00103     
00104     fclose(fp);
00105    // printf("Finish!!\n");
00106     //printf("Pased time %.2f\n",t);
00107     pc.printf("Finish!!\n");
00108     pc.printf("Pased time %.2f\n",t);
00109     
00110 }