narumi tatsuya
/
hottomotto
アーボック
Diff: main.cpp
- Revision:
- 0:b5179eefff97
- Child:
- 1:81b746caadc5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sat Dec 19 09:57:14 2020 +0000 @@ -0,0 +1,101 @@ +#include "mbed.h" +#include "BMP180.h" +#include <stdio.h> +#include <math.h> + +#define PIN_SDA D4 +#define PIN_SCL D5 + +Serial pc(SERIAL_TX,SERIAL_RX,921600);//通信 +BMP180 bmp180(PIN_SDA,PIN_SCL);//気圧センサーのピン +Serial xbee(D1,D0);//Xbeeのピン +DigitalOut FET1(D9);//FETのピン +DigitalOut FET2(D8); + + + + int main(){ + float avalt,x8; + float pressure,temperature,altitude;//気圧,気温,高度 + int n; + int t=0; + xbee.printf("\rstart!\n\r");//気圧センサースタート + bmp180.Initialize(27,BMP180_OSS_ULTRA_HIGH_RESOLUTION);//27は府大の海抜高度 + xbee.printf("initialization complete!\n\r");//初期化完了 + + while(1){ + if(bmp180.ReadData(&temperature,&pressure)){ + float x4,x5,x6,x7,a,b; + float sum=0,altitude[11]; + for(int p=1;p<11;p++){ + a = pressure; + b = temperature; + x4 = 1019.11 / a; //海面気圧を気圧でわる + x5 = powf(x4, 0.1902225); //5.257ぶんの1 + x6 = 273.15 + b; //絶対温度 + x7 = (x5 - 1) * x6; + x8 = x7 / 0.0065; + altitude[p] = x8; + sum=sum+altitude[p]; + printf("高度%d回目%f",p,altitude[p]); + } + avalt=sum/10; + + + xbee.printf("Altitude(m)\t:%.3f\n\r",avalt); + xbee.printf("--------------------------------\n\r"); + wait(3); + break; + n=0; + }else{ + xbee.printf("NO DATA\n\r"); + xbee.printf("---------------------------\n\r"); + wait(1); + } + } + while(1){ + if(bmp180.ReadData(&temperature,&pressure)){ + float y4,y5,y6,y7,y8,c,d; + float speed; + float s=0; + float alti[11]; + float average_alti; + for(int q=1;q<11;q++){ + c = pressure; + d = temperature; + y4 = 1019.11 / c; //海面気圧を気圧でわる + y5 = powf(y4,0.1902225); + y6 = 273.15 + d; + y7 = (y5 - 1) * y6; + y8 = y7 / 0.0065; + alti[q]= y8; + s=s+alti[q]; + printf("高度%d回目%f",q,alti[q]); + + } + average_alti=s/10; + speed = (avalt - average_alti)/(float)(3+n);//値が取得でた場合は,3秒間の速さをだし,値が取得できなかった場合は3+n秒(nは値が取得できなかった回数)の速さをだす + + xbee.printf("Altitude(m)\t:%.3f\n\r",average_alti); + xbee.printf("Speed(m/s)\t:%.3f\n\r",speed); + xbee.printf("-------------------------------\n\r"); + x8 = y8; + n=0; + wait(3); + if(speed<=0.5){ + t=t+1; + } + }else{xbee.printf("NO DATA\n\r"); + ++n; + wait(1); + } + if(t=3){ + break; + } + } + /*speedが3回0.5m/s以下になったらFETに20秒電流を流してその後電流を止める*/ + + + + return 0; + } \ No newline at end of file