放出機構気球側制御用プログラム

Dependencies:   mbed BMP180

Committer:
scb01166
Date:
Mon Dec 14 19:41:45 2020 +0000
Revision:
0:2a95ba95e37d
First Complete Version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
scb01166 0:2a95ba95e37d 1 #include "mbed.h"
scb01166 0:2a95ba95e37d 2 #include "BMP180.h"
scb01166 0:2a95ba95e37d 3 #include <stdio.h>
scb01166 0:2a95ba95e37d 4
scb01166 0:2a95ba95e37d 5
scb01166 0:2a95ba95e37d 6 I2C i2c(D4, D5);
scb01166 0:2a95ba95e37d 7 BMP180 bmp180(&i2c);
scb01166 0:2a95ba95e37d 8 Serial xbee(PA_9, PA_10);
scb01166 0:2a95ba95e37d 9 DigitalOut led(LED1);
scb01166 0:2a95ba95e37d 10 PwmOut servo(A1);
scb01166 0:2a95ba95e37d 11 float calc(float);
scb01166 0:2a95ba95e37d 12
scb01166 0:2a95ba95e37d 13 float get_P()
scb01166 0:2a95ba95e37d 14 {
scb01166 0:2a95ba95e37d 15 float sum = 0.0f;
scb01166 0:2a95ba95e37d 16 for(int i=0;i<10;i++){
scb01166 0:2a95ba95e37d 17 bmp180.startPressure(BMP180::ULTRA_LOW_POWER);
scb01166 0:2a95ba95e37d 18 wait_ms(10); // Wait for conversion to complete
scb01166 0:2a95ba95e37d 19 int pressure;
scb01166 0:2a95ba95e37d 20 if(bmp180.getPressure(&pressure) != 0) {
scb01166 0:2a95ba95e37d 21 printf("Error getting pressure\n");
scb01166 0:2a95ba95e37d 22 }
scb01166 0:2a95ba95e37d 23 sum += pressure;
scb01166 0:2a95ba95e37d 24 }
scb01166 0:2a95ba95e37d 25 return sum/1000.0f;
scb01166 0:2a95ba95e37d 26 }
scb01166 0:2a95ba95e37d 27
scb01166 0:2a95ba95e37d 28 float get_T()
scb01166 0:2a95ba95e37d 29 {
scb01166 0:2a95ba95e37d 30 float sum = 0.0f;
scb01166 0:2a95ba95e37d 31 for(int i=0;i<10;i++){
scb01166 0:2a95ba95e37d 32 bmp180.startTemperature();
scb01166 0:2a95ba95e37d 33 wait_ms(5); // Wait for conversion to complete
scb01166 0:2a95ba95e37d 34 float temp;
scb01166 0:2a95ba95e37d 35 if(bmp180.getTemperature(&temp) != 0) {
scb01166 0:2a95ba95e37d 36 printf("Error getting temperature\n");
scb01166 0:2a95ba95e37d 37 }
scb01166 0:2a95ba95e37d 38 sum += temp;
scb01166 0:2a95ba95e37d 39 }
scb01166 0:2a95ba95e37d 40 return sum/10.0f;
scb01166 0:2a95ba95e37d 41 }
scb01166 0:2a95ba95e37d 42
scb01166 0:2a95ba95e37d 43
scb01166 0:2a95ba95e37d 44
scb01166 0:2a95ba95e37d 45 int main()
scb01166 0:2a95ba95e37d 46 {
scb01166 0:2a95ba95e37d 47 while(1) {
scb01166 0:2a95ba95e37d 48 if (bmp180.init() != 0) {
scb01166 0:2a95ba95e37d 49 printf("Error communicating with BMP180\n");
scb01166 0:2a95ba95e37d 50 } else {
scb01166 0:2a95ba95e37d 51 printf("Initialized BMP180\n");
scb01166 0:2a95ba95e37d 52 break;
scb01166 0:2a95ba95e37d 53 }
scb01166 0:2a95ba95e37d 54 wait(1);
scb01166 0:2a95ba95e37d 55 }
scb01166 0:2a95ba95e37d 56 float temp, pressure;
scb01166 0:2a95ba95e37d 57 while(1) {
scb01166 0:2a95ba95e37d 58 servo = 0.0;
scb01166 0:2a95ba95e37d 59 if(xbee.readable()==0) {
scb01166 0:2a95ba95e37d 60 wait(0.1);
scb01166 0:2a95ba95e37d 61 continue;
scb01166 0:2a95ba95e37d 62 }
scb01166 0:2a95ba95e37d 63 char c = xbee.getc();
scb01166 0:2a95ba95e37d 64 if(c == 'G') {
scb01166 0:2a95ba95e37d 65 temp = get_T();
scb01166 0:2a95ba95e37d 66 pressure = get_P();
scb01166 0:2a95ba95e37d 67 xbee.printf("P%04.6fT%02.6f\n", pressure, temp);
scb01166 0:2a95ba95e37d 68 printf("P%04.6fT%02.6f\n", pressure, temp);
scb01166 0:2a95ba95e37d 69 }else if(c == 'O'){
scb01166 0:2a95ba95e37d 70 led = 1;
scb01166 0:2a95ba95e37d 71 servo.pulsewidth(0.002);
scb01166 0:2a95ba95e37d 72 for(int i = 1;i<10;i++){
scb01166 0:2a95ba95e37d 73 led = !led;
scb01166 0:2a95ba95e37d 74 wait(0.1);
scb01166 0:2a95ba95e37d 75 }
scb01166 0:2a95ba95e37d 76 }
scb01166 0:2a95ba95e37d 77 led = 0;
scb01166 0:2a95ba95e37d 78 wait(1);
scb01166 0:2a95ba95e37d 79 }
scb01166 0:2a95ba95e37d 80 }
scb01166 0:2a95ba95e37d 81
scb01166 0:2a95ba95e37d 82 float calc(float x)
scb01166 0:2a95ba95e37d 83 {
scb01166 0:2a95ba95e37d 84 return (1.45+(2.4-0.5)/180*x)/1000;
scb01166 0:2a95ba95e37d 85 }