Arduinoの風速計のプログラムをシンプルにmbedへ移植した分です。
Dependencies: mbed
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 }
Generated on Mon Aug 29 2022 07:44:11 by
1.7.2