CLTP統合検証プログラム_気圧とxbeeのみで,圧電スピーカの実装が必要

Dependencies:   mbed HEPTA_CDH_lite LPS25HB_I2C

Committer:
wasabimal
Date:
Tue Aug 16 10:50:58 2022 +0000
Revision:
3:08260b6b0828
Parent:
2:bc6e512b58ac
sd

Who changed what in which revision?

UserRevisionLine numberNew 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