コダック

Dependencies:   mbed BMP180

Committer:
naruu
Date:
Sat Dec 19 20:52:35 2020 +0000
Revision:
1:f49751c75d5e
Parent:
0:5d0a1c494baa
aa;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
naruu 0:5d0a1c494baa 1 #include "mbed.h"
naruu 0:5d0a1c494baa 2 #include "BMP180.h"
naruu 0:5d0a1c494baa 3 #include <stdio.h>
naruu 0:5d0a1c494baa 4 #include <math.h>
naruu 0:5d0a1c494baa 5
naruu 0:5d0a1c494baa 6 #define PIN_SDA D4
naruu 0:5d0a1c494baa 7 #define PIN_SCL D5
naruu 0:5d0a1c494baa 8
naruu 0:5d0a1c494baa 9 Serial pc(SERIAL_TX,SERIAL_RX,921600);//通信
naruu 0:5d0a1c494baa 10 BMP180 bmp180(PIN_SDA,PIN_SCL);//気圧センサーのピン
naruu 1:f49751c75d5e 11 Serial xbee(A7,A2);//Xbeeのピン
naruu 0:5d0a1c494baa 12 DigitalOut FET1(D9);//FETのピン
naruu 0:5d0a1c494baa 13 DigitalOut FET2(D8);
naruu 0:5d0a1c494baa 14
naruu 0:5d0a1c494baa 15 int main(){
naruu 0:5d0a1c494baa 16 float avalt,x8;
naruu 0:5d0a1c494baa 17 float pressure,temperature,altitude;//気圧,気温,高度
naruu 0:5d0a1c494baa 18 float v;
naruu 0:5d0a1c494baa 19 int t=0;
naruu 0:5d0a1c494baa 20
naruu 0:5d0a1c494baa 21 xbee.printf("\rstart!\n\r");//気圧センサースタート
naruu 0:5d0a1c494baa 22 bmp180.Initialize(27,BMP180_OSS_ULTRA_HIGH_RESOLUTION);//27は府大の海抜高度
naruu 0:5d0a1c494baa 23 xbee.printf("initialization complete!\n\r");//初期化完了
naruu 0:5d0a1c494baa 24
naruu 0:5d0a1c494baa 25 while(1){
naruu 0:5d0a1c494baa 26 float x4,x5,x6,x7,a,b;
naruu 0:5d0a1c494baa 27 float sum=0,altitude[11];
naruu 0:5d0a1c494baa 28 int r=0;
naruu 0:5d0a1c494baa 29 for(int p=1;p<11;p++){
naruu 0:5d0a1c494baa 30 if(bmp180.ReadData(&temperature,&pressure)){
naruu 0:5d0a1c494baa 31 a = pressure;
naruu 0:5d0a1c494baa 32 b = temperature;
naruu 0:5d0a1c494baa 33 x4 = 1019.11 / a; //海面気圧を気圧でわる
naruu 0:5d0a1c494baa 34 x5 = powf(x4, 0.1902225); //5.257ぶんの1
naruu 0:5d0a1c494baa 35 x6 = 273.15 + b; //絶対温度
naruu 0:5d0a1c494baa 36 x7 = (x5 - 1) * x6;
naruu 0:5d0a1c494baa 37 x8 = x7 / 0.0065;
naruu 0:5d0a1c494baa 38 altitude[p] = x8;
naruu 0:5d0a1c494baa 39 sum=sum+altitude[p];
naruu 0:5d0a1c494baa 40 r++;
naruu 0:5d0a1c494baa 41 }else{
naruu 0:5d0a1c494baa 42 xbee.printf("NO DATA\n\r");
naruu 0:5d0a1c494baa 43 xbee.printf("---------------------------\n\r");
naruu 0:5d0a1c494baa 44 wait(1);
naruu 0:5d0a1c494baa 45 }
naruu 0:5d0a1c494baa 46
naruu 0:5d0a1c494baa 47 avalt=sum/(float)r;
naruu 0:5d0a1c494baa 48 xbee.printf("Altitude(m)\t:%.3f\n\r",avalt);
naruu 0:5d0a1c494baa 49 xbee.printf("--------------------------------\n\r");
naruu 0:5d0a1c494baa 50 break;
naruu 0:5d0a1c494baa 51
naruu 0:5d0a1c494baa 52 }wait(3);
naruu 0:5d0a1c494baa 53 }
naruu 0:5d0a1c494baa 54 while(1){
naruu 0:5d0a1c494baa 55 float y4,y5,y6,y7,c,d;
naruu 0:5d0a1c494baa 56 float y8=avalt;
naruu 0:5d0a1c494baa 57 float speed;
naruu 0:5d0a1c494baa 58 float s=0;
naruu 0:5d0a1c494baa 59 float alti[11];
naruu 0:5d0a1c494baa 60 float average_alti;
naruu 0:5d0a1c494baa 61 int e=0;
naruu 0:5d0a1c494baa 62 for(int q=1;q<11;q++){
naruu 0:5d0a1c494baa 63 if(bmp180.ReadData(&temperature,&pressure)){
naruu 0:5d0a1c494baa 64 c = pressure;
naruu 0:5d0a1c494baa 65 d = temperature;
naruu 0:5d0a1c494baa 66 y4 = 1019.11 / c; //海面気圧を気圧でわる
naruu 0:5d0a1c494baa 67 y5 = powf(y4,0.1902225);
naruu 0:5d0a1c494baa 68 y6 = 273.15 + d;
naruu 0:5d0a1c494baa 69 y7 = (y5 - 1) * y6;
naruu 0:5d0a1c494baa 70 y8 = y7 / 0.0065;
naruu 0:5d0a1c494baa 71 alti[q]= y8;
naruu 0:5d0a1c494baa 72 s=s+alti[q];
naruu 0:5d0a1c494baa 73 xbee.printf("高度%d回目%f\n\r",q,alti[q]);
naruu 0:5d0a1c494baa 74 xbee.printf("-------------------------------\n\r");
naruu 0:5d0a1c494baa 75 e++;
naruu 0:5d0a1c494baa 76 }else{
naruu 0:5d0a1c494baa 77 xbee.printf("NO_Data\n\r");
naruu 0:5d0a1c494baa 78 }
naruu 0:5d0a1c494baa 79
naruu 0:5d0a1c494baa 80 average_alti=s/(float)e;
naruu 0:5d0a1c494baa 81 speed = (avalt - average_alti)/3;
naruu 0:5d0a1c494baa 82
naruu 0:5d0a1c494baa 83 xbee.printf("Altitude(m)\t:%.3f\n\r",average_alti);
naruu 0:5d0a1c494baa 84 xbee.printf("Speed(m/s)\t:%.3f\n\r",speed);
naruu 0:5d0a1c494baa 85 xbee.printf("-------------------------------\n\r");
naruu 0:5d0a1c494baa 86
naruu 0:5d0a1c494baa 87 avalt=average_alti;
naruu 0:5d0a1c494baa 88 printf("tの値は%d\n",t);
naruu 0:5d0a1c494baa 89 if(speed<=0.5){
naruu 0:5d0a1c494baa 90 t=t+1;
naruu 0:5d0a1c494baa 91 }
naruu 0:5d0a1c494baa 92 if(t==3){
naruu 0:5d0a1c494baa 93 break;
naruu 0:5d0a1c494baa 94 }
naruu 0:5d0a1c494baa 95 }wait(3);
naruu 0:5d0a1c494baa 96 }return 0;
naruu 0:5d0a1c494baa 97 }