test

Dependencies:   SDFileSystem mbed

main.cpp

Committer:
Joeatsumi
Date:
2017-08-17
Revision:
0:5d1752467f09

File content as of revision 0:5d1752467f09:

//本番,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);     
        }
}