TP完成形。2017/9/8作動確認。
Dependencies: SDFileSystem mbed
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 }
Generated on Thu Jul 21 2022 16:44:51 by
1.7.2