Arduinoの風速計のプログラムをシンプルにmbedへ移植した分です。

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 #define SERIAL_TX PA_2
00004 #define SERIAL_RX PA_3
00005 
00006 Serial pc(USBTX,USBRX);
00007 
00008 InterruptIn rotEnc(p5);
00009 PwmOut airSpeedServo(p21);
00010 Timer timer;
00011 
00012 #define air_a 0.05945
00013 #define air_b 1.12
00014 #define air_k 0.14737
00015 #define air_n 1.19
00016 #define SUM_NUM 10
00017 #define airMaxPin 4
00018 #define BUFFER 30
00019 #define EN_A 3
00020 
00021 float airSpeed=0.0;
00022 float airSpeed_ave = 0.0;
00023 float airSpeed_max = 0.0;
00024 volatile int kaitensu= 0;
00025 int beforetime=0;
00026 int counter = 0;
00027 float sum[SUM_NUM] = {0.0};
00028 
00029 
00030 void count_up(){
00031     kaitensu = kaitensu + 1;
00032 }
00033   
00034 float make_ave(float s[], int n){
00035     float p = 0;
00036     int i;
00037     for(i = 0; i < n; i++){
00038        p += s[i];    
00039     }
00040     if(n != 0)
00041     return p / n;    
00042     else
00043     return 0;
00044 }
00045 
00046 void AirSpeed(){
00047   timer.start();
00048   int interval = (int)timer.read_ms() - beforetime;
00049   if(interval >= 100)    
00050   {
00051       beforetime = (int)timer.read_ms();
00052       
00053       float x = 0.000335 * kaitensu * kaitensu + 0.0726 * kaitensu;
00054       
00055       airSpeed = (float)air_k * (float)pow((double)x, 1 / air_n);
00056       
00057       sum[counter % SUM_NUM] =  (float)airSpeed;
00058       if(counter % SUM_NUM == 0)
00059         counter = 0;
00060       airSpeed_ave = make_ave(sum, SUM_NUM);
00061       if(airSpeed_ave > airSpeed_max)
00062         airSpeed_max = airSpeed_ave;  
00063       counter++;
00064       kaitensu = 0;
00065     }    
00066   }
00067 
00068 void count(){
00069     airSpeed_ave++;
00070     }
00071 
00072 int main(){
00073     pc.baud(9600);
00074     rotEnc.rise(count_up);
00075     airSpeedServo.period(0.020);
00076   pc.putc(10);
00077     while(1){
00078       AirSpeed();
00079      // count();
00080      pc.printf("%f\n\r",airSpeed_ave);
00081         //airSpeedServo.pulsewidth(0.001 + airSpeed_ave / 1000);
00082  
00083    }
00084    return 0;
00085 }