アーボック

Dependencies:   mbed BMP180

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?

UserRevisionLine numberNew 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 }