Atsumi Toda / Mbed 2 deprecated Power_meter_1

Dependencies:   SDFileSystem mbed

Revision:
0:5d1752467f09
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Aug 17 09:03:15 2017 +0000
@@ -0,0 +1,87 @@
+//本番,TFで作動させたプログラム//
+//製作者 S-240執行代__戸田純實_(あだ名Joe Backer)//
+
+#include "mbed.h"
+#include "SDFileSystem.h"
+#define P_HI 1000
+#define P_LO 120 
+AnalogIn analog9(dp9);
+AnalogIn analog10(dp10);
+DigitalOut myled1(LED1);
+Timer Time ; 
+Ticker sd_write ;
+
+int i;
+unsigned long beforeTime = 0;
+unsigned long elapsedTime = 0;
+unsigned long nowTime = 0;
+int flagHi = 0 ;
+int rpm = 0 ;
+double vin = 0 ;
+double vin_center = 0 ;
+double power =0; //
+double t =0;
+Serial pc(dp16,dp15);
+
+void SD(){
+    __disable_irq();//この関数を最優先に割り込みする。
+     myled1 = 0 ;
+     SDFileSystem sd(dp2,dp1,dp6,dp13,"sd");
+     mkdir("/sd/mydir", 0777);
+    FILE *fp = fopen("/sd/mydir/power.csv", "a");
+     if(fp == NULL){
+        error("Could not open file for write\n");
+        myled1 = 0 ;
+        }
+        else{
+            myled1 = 1 ;
+            fprintf(fp,"%d,%d,%.2f,%.2f\r\n",nowTime,rpm,vin,vin_center);
+            }
+            fclose(fp);
+            free(fp);
+    __enable_irq();
+        }//割り込み終了
+
+int main(){
+                                                            
+            
+    //==========初期電圧のドリフトを押さえる=========//
+         for(i=0;i<10;i++){
+             vin_center= vin_center + analog9.read()*3.3;
+    wait(0.01);
+   }
+  
+     vin_center=vin_center/10;
+    //==========================================//                                                
+                                                            
+                                                            
+    Time.start();
+    sd_write.attach(&SD,1);//壱秒ごとにSDという関数を発動し、割り込みする。
+    while(1){
+        
+        
+        vin = analog9.read() * 3.3 ;
+        
+        
+        //回転数計算
+      //  __disable_irq();
+        nowTime = Time.read_ms();
+        
+        if(analog10 >= 0.5 && flagHi == 0){//パルスHi
+         pc.printf("%d\r\n",rpm);
+         elapsedTime = nowTime - beforeTime;//前回パルスアップからの経過時間
+           rpm = 60000 / elapsedTime ;
+    beforeTime = Time.read_ms();//今の時間を記録する
+    flagHi = 1;
+  }
+  if (analog10 <0.5 && flagHi == 1){//パルスLow
+    flagHi = 0;
+  }
+  if(nowTime - beforeTime>6000){
+    elapsedTime=0;
+  }
+  //__enable_irq();
+   wait(0.01);     
+        }
+}
+