CLTP統合検証プログラム_気圧とxbeeのみで,圧電スピーカの実装が必要
Dependencies: mbed HEPTA_CDH_lite LPS25HB_I2C
main.cpp@3:08260b6b0828, 22 months ago (annotated)
- Committer:
- wasabimal
- Date:
- Tue Aug 16 10:50:58 2022 +0000
- Revision:
- 3:08260b6b0828
- Parent:
- 2:bc6e512b58ac
sd
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wasabimal | 3:08260b6b0828 | 1 | #define mC 261.626 |
wasabimal | 3:08260b6b0828 | 2 | #define mD 293.665 |
wasabimal | 3:08260b6b0828 | 3 | #define mE 329.628 |
wasabimal | 3:08260b6b0828 | 4 | #define mF 349.228 |
wasabimal | 3:08260b6b0828 | 5 | #define mG 391.995 |
wasabimal | 3:08260b6b0828 | 6 | #define mA 440.000 |
wasabimal | 3:08260b6b0828 | 7 | #define mB 493.883 |
heptasat2021 | 0:da0f6aca15b8 | 8 | #include "mbed.h" |
wasabimal | 2:bc6e512b58ac | 9 | #include "LPS.h" |
heptasat2021 | 1:ddac5ec89167 | 10 | #include "HEPTA_CDH.h" |
wasabimal | 2:bc6e512b58ac | 11 | Timer t; |
wasabimal | 2:bc6e512b58ac | 12 | Serial pc(USBTX, USBRX); // tx, rx |
wasabimal | 2:bc6e512b58ac | 13 | Serial xbee(D1, D0); // tx, rx |
wasabimal | 2:bc6e512b58ac | 14 | I2C i2c(D4,D5); |
wasabimal | 2:bc6e512b58ac | 15 | LPS ps(i2c); |
wasabimal | 3:08260b6b0828 | 16 | DigitalOut sp1(A0); |
heptasat2021 | 1:ddac5ec89167 | 17 | HEPTA_CDH cdh(PB_5, PB_4, PB_3, PA_8, "sd"); |
wasabimal | 2:bc6e512b58ac | 18 | Ticker press; |
wasabimal | 3:08260b6b0828 | 19 | Ticker sound; |
wasabimal | 2:bc6e512b58ac | 20 | int i; |
wasabimal | 2:bc6e512b58ac | 21 | int ct = 0; |
wasabimal | 2:bc6e512b58ac | 22 | float pressure = 0; |
wasabimal | 2:bc6e512b58ac | 23 | float altitude = 0; |
wasabimal | 2:bc6e512b58ac | 24 | float temperature = 0; |
wasabimal | 2:bc6e512b58ac | 25 | char cmd1,cmd2,cmd3; |
wasabimal | 3:08260b6b0828 | 26 | int oto = 0; |
wasabimal | 3:08260b6b0828 | 27 | float mm[]={mC*4,mD*4,mE*4,mF*4,mG*4,mA*4,mB*4,mC*8}; //timbre |
wasabimal | 3:08260b6b0828 | 28 | void tick(void) |
wasabimal | 3:08260b6b0828 | 29 | { |
wasabimal | 3:08260b6b0828 | 30 | sp1.write(oto); |
wasabimal | 3:08260b6b0828 | 31 | oto=!oto; |
wasabimal | 3:08260b6b0828 | 32 | } |
wasabimal | 2:bc6e512b58ac | 33 | void pre() { |
wasabimal | 2:bc6e512b58ac | 34 | xbee.printf("%.2f %.2f %.2f \r\n",pressure,altitude,temperature); |
wasabimal | 2:bc6e512b58ac | 35 | } |
wasabimal | 2:bc6e512b58ac | 36 | int main() {//1 |
wasabimal | 2:bc6e512b58ac | 37 | //Display from satellite to PC via xbee. |
wasabimal | 2:bc6e512b58ac | 38 | pc.printf("settig start\r\n"); |
wasabimal | 2:bc6e512b58ac | 39 | xbee.printf("settig start\r\n"); |
wasabimal | 2:bc6e512b58ac | 40 | //Create a file to save the data acquired from the sensor to a microSD card |
wasabimal | 2:bc6e512b58ac | 41 | //Also, if there is no microSD card, this error statement will be displayed |
heptasat2021 | 1:ddac5ec89167 | 42 | mkdir("/sd/mydir", 0777); |
heptasat2021 | 1:ddac5ec89167 | 43 | FILE *fp = fopen("/sd/mydir/sdtest.txt", "w"); |
heptasat2021 | 1:ddac5ec89167 | 44 | if(fp == NULL) { |
heptasat2021 | 1:ddac5ec89167 | 45 | error("Could not open file for write\r\n"); |
heptasat2021 | 0:da0f6aca15b8 | 46 | } |
wasabimal | 2:bc6e512b58ac | 47 | //If there is no Barometric Pressure Sensors, this error statement will appear in teraterm |
wasabimal | 2:bc6e512b58ac | 48 | if (!ps.init()){//2 |
wasabimal | 2:bc6e512b58ac | 49 | printf("Failed to autodetect pressure sensor!\r\n"); |
wasabimal | 2:bc6e512b58ac | 50 | while (1); |
wasabimal | 2:bc6e512b58ac | 51 | }//2 |
wasabimal | 2:bc6e512b58ac | 52 | ps.enableDefault(); |
wasabimal | 2:bc6e512b58ac | 53 | //Display "begin" in teraterm and save it to SDcard |
wasabimal | 2:bc6e512b58ac | 54 | pc.printf("begin\r\n"); |
wasabimal | 2:bc6e512b58ac | 55 | xbee.printf("begin\r\n"); |
wasabimal | 2:bc6e512b58ac | 56 | fprintf(fp,"begin\r\n"); |
wasabimal | 2:bc6e512b58ac | 57 | for (;;) {//2 |
wasabimal | 2:bc6e512b58ac | 58 | if (xbee.readable()) {//3 |
wasabimal | 2:bc6e512b58ac | 59 | pc.putc(xbee.getc()); |
wasabimal | 2:bc6e512b58ac | 60 | cmd1 = xbee.getc(); |
wasabimal | 2:bc6e512b58ac | 61 | //Input "m", the sensor data is displayed on the teraterm. |
wasabimal | 2:bc6e512b58ac | 62 | //And the acquired data is saved to the SD card. |
wasabimal | 2:bc6e512b58ac | 63 | if(cmd1 == 'm'){//4 |
wasabimal | 2:bc6e512b58ac | 64 | pc.printf("start\r\n"); |
wasabimal | 2:bc6e512b58ac | 65 | fprintf(fp,"start\r\n"); |
wasabimal | 2:bc6e512b58ac | 66 | xbee.printf("start\r\n"); |
wasabimal | 2:bc6e512b58ac | 67 | t.start(); |
wasabimal | 2:bc6e512b58ac | 68 | cmd1 = '\0'; |
wasabimal | 3:08260b6b0828 | 69 | pc.printf("p[mbar] a[m] deg[C]\r\n"); |
wasabimal | 3:08260b6b0828 | 70 | xbee.printf("p[mbar] a[m] deg[C]\r\n"); |
wasabimal | 3:08260b6b0828 | 71 | fprintf(fp,"p[mbar] a[m] deg[C]\r\n"); |
wasabimal | 2:bc6e512b58ac | 72 | fclose(fp); |
wasabimal | 2:bc6e512b58ac | 73 | press.attach(&pre, 0.1); |
wasabimal | 2:bc6e512b58ac | 74 | //Save sensor acquisition data to SD card every 10 times |
wasabimal | 2:bc6e512b58ac | 75 | while(1){//5 |
wasabimal | 2:bc6e512b58ac | 76 | FILE *fp = fopen("/sd/mydir/sdtest.txt", "a"); |
wasabimal | 2:bc6e512b58ac | 77 | for(i = 0;i<10;i++){//6 |
wasabimal | 2:bc6e512b58ac | 78 | pressure = ps.readPressureMillibars(); |
wasabimal | 2:bc6e512b58ac | 79 | altitude = ps.pressureToAltitudeMeters(pressure); |
wasabimal | 2:bc6e512b58ac | 80 | temperature = ps.readTemperatureC(); |
wasabimal | 3:08260b6b0828 | 81 | fprintf(fp,"%d %.2f %.2f %.2f\r\n",ct,pressure,altitude,temperature); |
wasabimal | 2:bc6e512b58ac | 82 | ct = ct + 1; |
wasabimal | 2:bc6e512b58ac | 83 | if (xbee.readable()){//7 |
wasabimal | 2:bc6e512b58ac | 84 | pc.putc(xbee.getc()); |
wasabimal | 2:bc6e512b58ac | 85 | cmd2 = xbee.getc(); |
wasabimal | 3:08260b6b0828 | 86 | //Input "n", The command finishes acquiring air pressure |
wasabimal | 2:bc6e512b58ac | 87 | if(cmd2 == 'n'){//8 |
wasabimal | 2:bc6e512b58ac | 88 | press.detach(); |
wasabimal | 3:08260b6b0828 | 89 | xbee.printf("end\r\n"); |
wasabimal | 3:08260b6b0828 | 90 | xbee.printf("time = %f",t.read()); |
wasabimal | 2:bc6e512b58ac | 91 | fprintf(fp,"time = %f",t.read()); |
wasabimal | 2:bc6e512b58ac | 92 | t.stop(); |
wasabimal | 2:bc6e512b58ac | 93 | fclose(fp); |
wasabimal | 2:bc6e512b58ac | 94 | cmd2 = '\0'; |
wasabimal | 3:08260b6b0828 | 95 | while(1){//9 |
wasabimal | 3:08260b6b0828 | 96 | for(i=0;i < sizeof(mm)/sizeof(mm[0]);i++) { |
wasabimal | 3:08260b6b0828 | 97 | sound.attach(&tick,1.0/mm[i]/2.0); //If warning appear, ignore |
wasabimal | 3:08260b6b0828 | 98 | wait(0.5f); |
wasabimal | 3:08260b6b0828 | 99 | }//10 |
wasabimal | 3:08260b6b0828 | 100 | sound.detach(); |
wasabimal | 3:08260b6b0828 | 101 | i = 0; |
wasabimal | 3:08260b6b0828 | 102 | if (xbee.readable()){//10 |
wasabimal | 3:08260b6b0828 | 103 | pc.putc(xbee.getc()); |
wasabimal | 3:08260b6b0828 | 104 | cmd3 = xbee.getc(); |
wasabimal | 3:08260b6b0828 | 105 | //Input "k", The command terminates the program. |
wasabimal | 3:08260b6b0828 | 106 | if(cmd3 == 'k'){//11 |
wasabimal | 3:08260b6b0828 | 107 | pc.printf("end\r\n"); |
wasabimal | 3:08260b6b0828 | 108 | sound.detach(); |
wasabimal | 3:08260b6b0828 | 109 | //return 0; |
wasabimal | 3:08260b6b0828 | 110 | }//11 |
wasabimal | 3:08260b6b0828 | 111 | }//10 |
wasabimal | 3:08260b6b0828 | 112 | }//9 |
wasabimal | 3:08260b6b0828 | 113 | }//8 |
wasabimal | 3:08260b6b0828 | 114 | }//7 |
wasabimal | 2:bc6e512b58ac | 115 | wait_us(1); |
wasabimal | 2:bc6e512b58ac | 116 | }//6 |
wasabimal | 2:bc6e512b58ac | 117 | fclose(fp); |
wasabimal | 2:bc6e512b58ac | 118 | }//5 |
wasabimal | 2:bc6e512b58ac | 119 | }//4 |
wasabimal | 2:bc6e512b58ac | 120 | }//3 |
wasabimal | 2:bc6e512b58ac | 121 | }//2 |
wasabimal | 2:bc6e512b58ac | 122 | }//1 |