narumi tatsuya
/
hottomotto
アーボック
main.cpp@1:81b746caadc5, 2020-12-19 (annotated)
- Committer:
- naruu
- Date:
- Sat Dec 19 10:06:48 2020 +0000
- Revision:
- 1:81b746caadc5
- Parent:
- 0:b5179eefff97
- Child:
- 2:c2f8ff2de89e
runrun;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
naruu | 0:b5179eefff97 | 1 | #include "mbed.h" |
naruu | 0:b5179eefff97 | 2 | #include "BMP180.h" |
naruu | 0:b5179eefff97 | 3 | #include <stdio.h> |
naruu | 0:b5179eefff97 | 4 | #include <math.h> |
naruu | 0:b5179eefff97 | 5 | |
naruu | 0:b5179eefff97 | 6 | #define PIN_SDA D4 |
naruu | 0:b5179eefff97 | 7 | #define PIN_SCL D5 |
naruu | 0:b5179eefff97 | 8 | |
naruu | 0:b5179eefff97 | 9 | Serial pc(SERIAL_TX,SERIAL_RX,921600);//通信 |
naruu | 0:b5179eefff97 | 10 | BMP180 bmp180(PIN_SDA,PIN_SCL);//気圧センサーのピン |
naruu | 0:b5179eefff97 | 11 | Serial xbee(D1,D0);//Xbeeのピン |
naruu | 0:b5179eefff97 | 12 | DigitalOut FET1(D9);//FETのピン |
naruu | 0:b5179eefff97 | 13 | DigitalOut FET2(D8); |
naruu | 0:b5179eefff97 | 14 | |
naruu | 0:b5179eefff97 | 15 | |
naruu | 0:b5179eefff97 | 16 | |
naruu | 0:b5179eefff97 | 17 | int main(){ |
naruu | 0:b5179eefff97 | 18 | float avalt,x8; |
naruu | 0:b5179eefff97 | 19 | float pressure,temperature,altitude;//気圧,気温,高度 |
naruu | 0:b5179eefff97 | 20 | int n; |
naruu | 0:b5179eefff97 | 21 | int t=0; |
naruu | 0:b5179eefff97 | 22 | xbee.printf("\rstart!\n\r");//気圧センサースタート |
naruu | 0:b5179eefff97 | 23 | bmp180.Initialize(27,BMP180_OSS_ULTRA_HIGH_RESOLUTION);//27は府大の海抜高度 |
naruu | 0:b5179eefff97 | 24 | xbee.printf("initialization complete!\n\r");//初期化完了 |
naruu | 0:b5179eefff97 | 25 | |
naruu | 0:b5179eefff97 | 26 | while(1){ |
naruu | 0:b5179eefff97 | 27 | if(bmp180.ReadData(&temperature,&pressure)){ |
naruu | 0:b5179eefff97 | 28 | float x4,x5,x6,x7,a,b; |
naruu | 0:b5179eefff97 | 29 | float sum=0,altitude[11]; |
naruu | 0:b5179eefff97 | 30 | for(int p=1;p<11;p++){ |
naruu | 0:b5179eefff97 | 31 | a = pressure; |
naruu | 0:b5179eefff97 | 32 | b = temperature; |
naruu | 0:b5179eefff97 | 33 | x4 = 1019.11 / a; //海面気圧を気圧でわる |
naruu | 0:b5179eefff97 | 34 | x5 = powf(x4, 0.1902225); //5.257ぶんの1 |
naruu | 0:b5179eefff97 | 35 | x6 = 273.15 + b; //絶対温度 |
naruu | 0:b5179eefff97 | 36 | x7 = (x5 - 1) * x6; |
naruu | 0:b5179eefff97 | 37 | x8 = x7 / 0.0065; |
naruu | 0:b5179eefff97 | 38 | altitude[p] = x8; |
naruu | 0:b5179eefff97 | 39 | sum=sum+altitude[p]; |
naruu | 1:81b746caadc5 | 40 | xbee.printf("高度%d回目%f\n\r",p,altitude[p]); |
naruu | 1:81b746caadc5 | 41 | xbee.printf("-------------------------------\n\r"); |
naruu | 0:b5179eefff97 | 42 | } |
naruu | 0:b5179eefff97 | 43 | avalt=sum/10; |
naruu | 0:b5179eefff97 | 44 | |
naruu | 0:b5179eefff97 | 45 | |
naruu | 0:b5179eefff97 | 46 | xbee.printf("Altitude(m)\t:%.3f\n\r",avalt); |
naruu | 0:b5179eefff97 | 47 | xbee.printf("--------------------------------\n\r"); |
naruu | 0:b5179eefff97 | 48 | wait(3); |
naruu | 0:b5179eefff97 | 49 | break; |
naruu | 0:b5179eefff97 | 50 | n=0; |
naruu | 0:b5179eefff97 | 51 | }else{ |
naruu | 0:b5179eefff97 | 52 | xbee.printf("NO DATA\n\r"); |
naruu | 0:b5179eefff97 | 53 | xbee.printf("---------------------------\n\r"); |
naruu | 0:b5179eefff97 | 54 | wait(1); |
naruu | 0:b5179eefff97 | 55 | } |
naruu | 0:b5179eefff97 | 56 | } |
naruu | 0:b5179eefff97 | 57 | while(1){ |
naruu | 0:b5179eefff97 | 58 | if(bmp180.ReadData(&temperature,&pressure)){ |
naruu | 0:b5179eefff97 | 59 | float y4,y5,y6,y7,y8,c,d; |
naruu | 0:b5179eefff97 | 60 | float speed; |
naruu | 0:b5179eefff97 | 61 | float s=0; |
naruu | 0:b5179eefff97 | 62 | float alti[11]; |
naruu | 0:b5179eefff97 | 63 | float average_alti; |
naruu | 0:b5179eefff97 | 64 | for(int q=1;q<11;q++){ |
naruu | 0:b5179eefff97 | 65 | c = pressure; |
naruu | 0:b5179eefff97 | 66 | d = temperature; |
naruu | 0:b5179eefff97 | 67 | y4 = 1019.11 / c; //海面気圧を気圧でわる |
naruu | 0:b5179eefff97 | 68 | y5 = powf(y4,0.1902225); |
naruu | 0:b5179eefff97 | 69 | y6 = 273.15 + d; |
naruu | 0:b5179eefff97 | 70 | y7 = (y5 - 1) * y6; |
naruu | 0:b5179eefff97 | 71 | y8 = y7 / 0.0065; |
naruu | 0:b5179eefff97 | 72 | alti[q]= y8; |
naruu | 0:b5179eefff97 | 73 | s=s+alti[q]; |
naruu | 1:81b746caadc5 | 74 | xbee.printf("高度%d回目%f\n\r",q,alti[q]); |
naruu | 1:81b746caadc5 | 75 | xbee.printf("-------------------------------\n\r"); |
naruu | 0:b5179eefff97 | 76 | } |
naruu | 0:b5179eefff97 | 77 | average_alti=s/10; |
naruu | 0:b5179eefff97 | 78 | speed = (avalt - average_alti)/(float)(3+n);//値が取得でた場合は,3秒間の速さをだし,値が取得できなかった場合は3+n秒(nは値が取得できなかった回数)の速さをだす |
naruu | 0:b5179eefff97 | 79 | |
naruu | 0:b5179eefff97 | 80 | xbee.printf("Altitude(m)\t:%.3f\n\r",average_alti); |
naruu | 0:b5179eefff97 | 81 | xbee.printf("Speed(m/s)\t:%.3f\n\r",speed); |
naruu | 0:b5179eefff97 | 82 | xbee.printf("-------------------------------\n\r"); |
naruu | 0:b5179eefff97 | 83 | x8 = y8; |
naruu | 0:b5179eefff97 | 84 | n=0; |
naruu | 0:b5179eefff97 | 85 | wait(3); |
naruu | 0:b5179eefff97 | 86 | if(speed<=0.5){ |
naruu | 0:b5179eefff97 | 87 | t=t+1; |
naruu | 0:b5179eefff97 | 88 | } |
naruu | 0:b5179eefff97 | 89 | }else{xbee.printf("NO DATA\n\r"); |
naruu | 0:b5179eefff97 | 90 | ++n; |
naruu | 0:b5179eefff97 | 91 | wait(1); |
naruu | 0:b5179eefff97 | 92 | } |
naruu | 0:b5179eefff97 | 93 | if(t=3){ |
naruu | 0:b5179eefff97 | 94 | break; |
naruu | 0:b5179eefff97 | 95 | } |
naruu | 0:b5179eefff97 | 96 | } |
naruu | 0:b5179eefff97 | 97 | /*speedが3回0.5m/s以下になったらFETに20秒電流を流してその後電流を止める*/ |
naruu | 0:b5179eefff97 | 98 | |
naruu | 0:b5179eefff97 | 99 | |
naruu | 0:b5179eefff97 | 100 | |
naruu | 0:b5179eefff97 | 101 | return 0; |
naruu | 0:b5179eefff97 | 102 | } |