統合プログラム
Dependencies: mbed Servo BMP180
calculate.h@6:6fe6e3554a46, 2021-10-28 (annotated)
- Committer:
- tsubasa_nakajima
- Date:
- Thu Oct 28 13:50:27 2021 +0000
- Revision:
- 6:6fe6e3554a46
- Child:
- 8:7209c810309d
fixed indicate
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tsubasa_nakajima | 6:6fe6e3554a46 | 1 | #include "mbed.h" |
tsubasa_nakajima | 6:6fe6e3554a46 | 2 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 3 | //nの階乗を計算する関数 |
tsubasa_nakajima | 6:6fe6e3554a46 | 4 | int fact(int n){ |
tsubasa_nakajima | 6:6fe6e3554a46 | 5 | int i, result = 1; |
tsubasa_nakajima | 6:6fe6e3554a46 | 6 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 7 | if(n == 0) |
tsubasa_nakajima | 6:6fe6e3554a46 | 8 | return 1; |
tsubasa_nakajima | 6:6fe6e3554a46 | 9 | else |
tsubasa_nakajima | 6:6fe6e3554a46 | 10 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 11 | for(i = 1;i <= n;i++) |
tsubasa_nakajima | 6:6fe6e3554a46 | 12 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 13 | result *= i; |
tsubasa_nakajima | 6:6fe6e3554a46 | 14 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 15 | return result; |
tsubasa_nakajima | 6:6fe6e3554a46 | 16 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 17 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 18 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 19 | float my_pow(float x, int n) |
tsubasa_nakajima | 6:6fe6e3554a46 | 20 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 21 | int i; |
tsubasa_nakajima | 6:6fe6e3554a46 | 22 | float pow_result = 1; |
tsubasa_nakajima | 6:6fe6e3554a46 | 23 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 24 | if(n == 0) |
tsubasa_nakajima | 6:6fe6e3554a46 | 25 | return 1; |
tsubasa_nakajima | 6:6fe6e3554a46 | 26 | else |
tsubasa_nakajima | 6:6fe6e3554a46 | 27 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 28 | for(i = 0;i < n;i++) |
tsubasa_nakajima | 6:6fe6e3554a46 | 29 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 30 | pow_result *= x; |
tsubasa_nakajima | 6:6fe6e3554a46 | 31 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 32 | return pow_result; |
tsubasa_nakajima | 6:6fe6e3554a46 | 33 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 34 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 35 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 36 | float my_exp(float x) |
tsubasa_nakajima | 6:6fe6e3554a46 | 37 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 38 | int i; |
tsubasa_nakajima | 6:6fe6e3554a46 | 39 | float result = 0; |
tsubasa_nakajima | 6:6fe6e3554a46 | 40 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 41 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 42 | for(i = 1;i <= 25; i++) |
tsubasa_nakajima | 6:6fe6e3554a46 | 43 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 44 | result += my_pow(x, i) / fact(i); |
tsubasa_nakajima | 6:6fe6e3554a46 | 45 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 46 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 47 | return result + 1; |
tsubasa_nakajima | 6:6fe6e3554a46 | 48 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 49 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 50 | float my_log(float x) |
tsubasa_nakajima | 6:6fe6e3554a46 | 51 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 52 | int i; |
tsubasa_nakajima | 6:6fe6e3554a46 | 53 | float result1, result2; |
tsubasa_nakajima | 6:6fe6e3554a46 | 54 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 55 | x -= 1; |
tsubasa_nakajima | 6:6fe6e3554a46 | 56 | result1 = 0; |
tsubasa_nakajima | 6:6fe6e3554a46 | 57 | result2 = 0; |
tsubasa_nakajima | 6:6fe6e3554a46 | 58 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 59 | for(i = 1;i <= 40;i++) |
tsubasa_nakajima | 6:6fe6e3554a46 | 60 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 61 | if(i % 2 == 1) |
tsubasa_nakajima | 6:6fe6e3554a46 | 62 | result1 += my_pow(x, i) / i; |
tsubasa_nakajima | 6:6fe6e3554a46 | 63 | else |
tsubasa_nakajima | 6:6fe6e3554a46 | 64 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 65 | result2 += my_pow(x, i) / i; |
tsubasa_nakajima | 6:6fe6e3554a46 | 66 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 67 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 68 | return result1 - result2; |
tsubasa_nakajima | 6:6fe6e3554a46 | 69 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 70 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 71 | //累乗 |
tsubasa_nakajima | 6:6fe6e3554a46 | 72 | float mypow(float x, float y) |
tsubasa_nakajima | 6:6fe6e3554a46 | 73 | { |
tsubasa_nakajima | 6:6fe6e3554a46 | 74 | return my_exp(y * my_log(x)); |
tsubasa_nakajima | 6:6fe6e3554a46 | 75 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 76 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 77 | //高度計算 |
tsubasa_nakajima | 6:6fe6e3554a46 | 78 | float calculate_h(float dP0FIX,float dp,float dt){ |
tsubasa_nakajima | 6:6fe6e3554a46 | 79 | float dpow = 1.0/5.256; |
tsubasa_nakajima | 6:6fe6e3554a46 | 80 | float dP0 = 1013.25; |
tsubasa_nakajima | 6:6fe6e3554a46 | 81 | float a = (dt+(float)273.15)/(float)0.0065; |
tsubasa_nakajima | 6:6fe6e3554a46 | 82 | float s = (mypow(dP0/dp,dpow)- mypow(dP0/dP0FIX,dpow))*a - 27; |
tsubasa_nakajima | 6:6fe6e3554a46 | 83 | return s; |
tsubasa_nakajima | 6:6fe6e3554a46 | 84 | } |
tsubasa_nakajima | 6:6fe6e3554a46 | 85 | |
tsubasa_nakajima | 6:6fe6e3554a46 | 86 | //海面気圧計算 |
tsubasa_nakajima | 6:6fe6e3554a46 | 87 | float calculate_dp0(float dp,float dt){ |
tsubasa_nakajima | 6:6fe6e3554a46 | 88 | float s = dp*mypow(1 - (0.0065*27)/(dt+0.0065*27+273.15),-5.257); |
tsubasa_nakajima | 6:6fe6e3554a46 | 89 | return s; |
tsubasa_nakajima | 6:6fe6e3554a46 | 90 | } |