アーボック

Dependencies:   mbed BMP180

Committer:
naruu
Date:
Sat Dec 19 09:57:14 2020 +0000
Revision:
0:b5179eefff97
Child:
1:81b746caadc5
ro;

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 0:b5179eefff97 40 printf("高度%d回目%f",p,altitude[p]);
naruu 0:b5179eefff97 41 }
naruu 0:b5179eefff97 42 avalt=sum/10;
naruu 0:b5179eefff97 43
naruu 0:b5179eefff97 44
naruu 0:b5179eefff97 45 xbee.printf("Altitude(m)\t:%.3f\n\r",avalt);
naruu 0:b5179eefff97 46 xbee.printf("--------------------------------\n\r");
naruu 0:b5179eefff97 47 wait(3);
naruu 0:b5179eefff97 48 break;
naruu 0:b5179eefff97 49 n=0;
naruu 0:b5179eefff97 50 }else{
naruu 0:b5179eefff97 51 xbee.printf("NO DATA\n\r");
naruu 0:b5179eefff97 52 xbee.printf("---------------------------\n\r");
naruu 0:b5179eefff97 53 wait(1);
naruu 0:b5179eefff97 54 }
naruu 0:b5179eefff97 55 }
naruu 0:b5179eefff97 56 while(1){
naruu 0:b5179eefff97 57 if(bmp180.ReadData(&temperature,&pressure)){
naruu 0:b5179eefff97 58 float y4,y5,y6,y7,y8,c,d;
naruu 0:b5179eefff97 59 float speed;
naruu 0:b5179eefff97 60 float s=0;
naruu 0:b5179eefff97 61 float alti[11];
naruu 0:b5179eefff97 62 float average_alti;
naruu 0:b5179eefff97 63 for(int q=1;q<11;q++){
naruu 0:b5179eefff97 64 c = pressure;
naruu 0:b5179eefff97 65 d = temperature;
naruu 0:b5179eefff97 66 y4 = 1019.11 / c; //海面気圧を気圧でわる
naruu 0:b5179eefff97 67 y5 = powf(y4,0.1902225);
naruu 0:b5179eefff97 68 y6 = 273.15 + d;
naruu 0:b5179eefff97 69 y7 = (y5 - 1) * y6;
naruu 0:b5179eefff97 70 y8 = y7 / 0.0065;
naruu 0:b5179eefff97 71 alti[q]= y8;
naruu 0:b5179eefff97 72 s=s+alti[q];
naruu 0:b5179eefff97 73 printf("高度%d回目%f",q,alti[q]);
naruu 0:b5179eefff97 74
naruu 0:b5179eefff97 75 }
naruu 0:b5179eefff97 76 average_alti=s/10;
naruu 0:b5179eefff97 77 speed = (avalt - average_alti)/(float)(3+n);//値が取得でた場合は,3秒間の速さをだし,値が取得できなかった場合は3+n秒(nは値が取得できなかった回数)の速さをだす
naruu 0:b5179eefff97 78
naruu 0:b5179eefff97 79 xbee.printf("Altitude(m)\t:%.3f\n\r",average_alti);
naruu 0:b5179eefff97 80 xbee.printf("Speed(m/s)\t:%.3f\n\r",speed);
naruu 0:b5179eefff97 81 xbee.printf("-------------------------------\n\r");
naruu 0:b5179eefff97 82 x8 = y8;
naruu 0:b5179eefff97 83 n=0;
naruu 0:b5179eefff97 84 wait(3);
naruu 0:b5179eefff97 85 if(speed<=0.5){
naruu 0:b5179eefff97 86 t=t+1;
naruu 0:b5179eefff97 87 }
naruu 0:b5179eefff97 88 }else{xbee.printf("NO DATA\n\r");
naruu 0:b5179eefff97 89 ++n;
naruu 0:b5179eefff97 90 wait(1);
naruu 0:b5179eefff97 91 }
naruu 0:b5179eefff97 92 if(t=3){
naruu 0:b5179eefff97 93 break;
naruu 0:b5179eefff97 94 }
naruu 0:b5179eefff97 95 }
naruu 0:b5179eefff97 96 /*speedが3回0.5m/s以下になったらFETに20秒電流を流してその後電流を止める*/
naruu 0:b5179eefff97 97
naruu 0:b5179eefff97 98
naruu 0:b5179eefff97 99
naruu 0:b5179eefff97 100 return 0;
naruu 0:b5179eefff97 101 }