test

Dependencies:   SDFileSystem mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 //本番,TFで作動させたプログラム//
00002 //製作者 S-240執行代__戸田純實_(あだ名Joe Backer)//
00003 
00004 #include "mbed.h"
00005 #include "SDFileSystem.h"
00006 #define P_HI 1000
00007 #define P_LO 120 
00008 AnalogIn analog9(dp9);
00009 AnalogIn analog10(dp10);
00010 DigitalOut myled1(LED1);
00011 Timer Time ; 
00012 Ticker sd_write ;
00013 
00014 int i;
00015 unsigned long beforeTime = 0;
00016 unsigned long elapsedTime = 0;
00017 unsigned long nowTime = 0;
00018 int flagHi = 0 ;
00019 int rpm = 0 ;
00020 double vin = 0 ;
00021 double vin_center = 0 ;
00022 double power =0; //
00023 double t =0;
00024 Serial pc(dp16,dp15);
00025 
00026 void SD(){
00027     __disable_irq();//この関数を最優先に割り込みする。
00028      myled1 = 0 ;
00029      SDFileSystem sd(dp2,dp1,dp6,dp13,"sd");
00030      mkdir("/sd/mydir", 0777);
00031     FILE *fp = fopen("/sd/mydir/power.csv", "a");
00032      if(fp == NULL){
00033         error("Could not open file for write\n");
00034         myled1 = 0 ;
00035         }
00036         else{
00037             myled1 = 1 ;
00038             fprintf(fp,"%d,%d,%.2f,%.2f\r\n",nowTime,rpm,vin,vin_center);
00039             }
00040             fclose(fp);
00041             free(fp);
00042     __enable_irq();
00043         }//割り込み終了
00044 
00045 int main(){
00046                                                             
00047             
00048     //==========初期電圧のドリフトを押さえる=========//
00049          for(i=0;i<10;i++){
00050              vin_center= vin_center + analog9.read()*3.3;
00051     wait(0.01);
00052    }
00053   
00054      vin_center=vin_center/10;
00055     //==========================================//                                                
00056                                                             
00057                                                             
00058     Time.start();
00059     sd_write.attach(&SD,1);//壱秒ごとにSDという関数を発動し、割り込みする。
00060     while(1){
00061         
00062         
00063         vin = analog9.read() * 3.3 ;
00064         
00065         
00066         //回転数計算
00067       //  __disable_irq();
00068         nowTime = Time.read_ms();
00069         
00070         if(analog10 >= 0.5 && flagHi == 0){//パルスHi
00071          pc.printf("%d\r\n",rpm);
00072          elapsedTime = nowTime - beforeTime;//前回パルスアップからの経過時間
00073            rpm = 60000 / elapsedTime ;
00074     beforeTime = Time.read_ms();//今の時間を記録する
00075     flagHi = 1;
00076   }
00077   if (analog10 <0.5 && flagHi == 1){//パルスLow
00078     flagHi = 0;
00079   }
00080   if(nowTime - beforeTime>6000){
00081     elapsedTime=0;
00082   }
00083   //__enable_irq();
00084    wait(0.01);     
00085         }
00086 }
00087