SSSUP
/
CanSat_Release_Mechanism-Balloon
放出機構気球側制御用プログラム
main.cpp@0:2a95ba95e37d, 2020-12-14 (annotated)
- Committer:
- scb01166
- Date:
- Mon Dec 14 19:41:45 2020 +0000
- Revision:
- 0:2a95ba95e37d
First Complete Version
Who changed what in which revision?
User | Revision | Line number | New 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 | } |