a
Dependencies: mbed Servo SRF02 LPS25HB_I2C MPU6050 SDFileSystem HEPTA_COM
Revision 3:10861141fce3, committed 2021-12-01
- Comitter:
- kosukesuzuki
- Date:
- Wed Dec 01 07:15:12 2021 +0000
- Parent:
- 2:9bfc2984e322
- Commit message:
- test
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 9bfc2984e322 -r 10861141fce3 main.cpp --- a/main.cpp Tue Nov 09 12:07:51 2021 +0000 +++ b/main.cpp Wed Dec 01 07:15:12 2021 +0000 @@ -1,8 +1,9 @@ //コマンドなしver -//コマンドだと反応しないため +//コマンドだと反応しないため→コマンド用のxbeeを必要だと思われる。 +//xbeeが使えない→基盤ミス #include "mbed.h" -//#include "SRF02.h" +#include "SRF02.h" #include "SDFileSystem.h" #include "Servo.h" #include "MPU6050.h" @@ -10,82 +11,111 @@ DigitalOut myleds[]={LED1,LED2,LED3,LED4}; -SDFileSystem sd(p5, p6, p7, p8, "sd"); //SDcard -//SRF02 sensor(p9,p10,0xE0); //距離センサ (使わない) -Servo myservo(p21); //モーター -Serial pc(USBTX,USBRX,9600); //機体teraterm -Serial xbee(p13,p14,9600); //xbee -MPU6050 mpu(p28,p27); //9軸 -I2C i2c(p28,p27); //気圧 + +SDFileSystem sd(p5, p6, p7, p8, "sd"); //SDcard +SRF02 sensor(p9,p10,0xE0); //距離 +Servo myservo(p21); //モーター +Serial pc(USBTX,USBRX,9600); //機体teraterm +//Serial xbee(p13,p14,9600); //xbee(今回使わない) +MPU6050 mpu(p9,p10); //9軸 +I2C i2c(p28,p27); //気圧 LPS ps(i2c); int accel[3]; -Timer t; +Timer t; //時間は表示する int main() { t.start(); - xbee.printf("SDcard start\r\n"); + //xbee.printf("SDcard start\r\n"); pc.printf("SDcard start\r\n"); - mkdir("/sd/mydir", 0777); //filename - FILE *fp = fopen("/sd/mydir/sdtest.txt", "w"); //open + mkdir("/sd/mydir", 0777); //filename + FILE *fp = fopen("/sd/mydir/sdtest.txt", "w"); //open if (!ps.init()){ pc.printf("Failed to autodetect pressure sensor!\r\n"); while (1); } ps.enableDefault(); - for(int num =0;num<1000;num++){ //回数(数値を変える必要ある) + + while(1){ //dが**cm以下になった場合、for文に移る myleds[1] = 1; wait(0.01); - L: //移動場所 - //気圧センサー(SDcardとteratermに表示する) - float pressure = ps.readPressureMillibars(); - float altitude = ps.pressureToAltitudeMeters(pressure)-65; //補正値必須 - float temperature = ps.readTemperatureC(); + + //気圧センサー(ここでは表示しない) + //float pressure = ps.readPressureMillibars(); + //float altitude = ps.pressureToAltitudeMeters(pressure)-65; //補正値必須 + //float temperature = ps.readTemperatureC(); //pc.printf("p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C\r\n",pressure,altitude,temperature); - //距離SRF02(表示しない) - //int d = sensor.getDistanceCm(); - //pc.printf("Distance = %d cm\r\n",d); - //加速度MPU9250(表示する) - - mpu.readAccelData(accel);//加速度の値をaccel[3]に代入 - int x = accel[0]-123;//x軸方向の加速度 - int y = accel[1]+60;//y軸方向の加速度 - int z = accel[2]+1110 ;//z軸方向の加速度 - float X = x*0.000597964111328125; - float Y = y*0.000597964111328125; - float Z = z*0.000597964111328125; - double a = X*X+Y*Y+Z*Z-95.982071137936; - //pc.printf("%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a);//速度と変位を表示 - + //距離SRF02(使う) + int d = sensor.getDistanceCm(); + pc.printf("Distance = %d cm\r\n",d); - wait(0.01); - pc.printf("number %f t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",num,t.read(),pressure,altitude,temperature,X,Y,Z,a); - xbee.printf("number %f t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",num,t.read(),pressure,altitude,temperature,X,Y,Z,a); + //加速度MPU9250(ここでは表示しない) + //mpu.readAccelData(accel); //加速度の値をaccel[3]に代入 + //int x = accel[0]-123; //x軸方向の加速度 + //int y = accel[1]+60; //y軸方向の加速度 + //int z = accel[2]+1110 ; //z軸方向の加速度 + //float X = x*0.000597964111328125; + //float Y = y*0.000597964111328125; + //float Z = z*0.000597964111328125; + //double a = X*X+Y*Y+Z*Z-95.982071137936; + //pc.printf("%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a); //速度と変位を表示 - if( 15<altitude && altitude< 20){ //標高(数値変える必要あり) - pc.printf("motor"); - xbee.printf("motor"); - for(int motor =0; motor <100; motor++) { - myservo = motor/100.0; - wait(0.01); - goto L; //Lに移動 - } - } - myleds[1]=0; - wait(0.01); - if(fp == NULL) { //データが無い場合 + if(fp == NULL) { //データが無い場合 error("Could not open file for write\r\n"); } - //fprintf(fp, "distance %d",d); //距離保存(保存しない) - //fprintf(fp,"%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a); //加速度保存 - //fprintf(fp,"p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C\r\n",pressure,altitude,temperature); //気圧保存 - fprintf(fp,"%f,%0.4f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,\r\n",num,t.read(),pressure,altitude,temperature,X,Y,Z,a); - } - fclose(fp); //保存終了 - xbee.printf("SDcard OK"); - pc.printf("SDcard OK"); - t.stop(); - } \ No newline at end of file + fprintf(fp, "%d\r\n",d); //距離保存 + myleds[1] = 0; + wait(0.01); + + //表示させる文 + //pc.printf("t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f %d\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a,d); + //xbee.printf("number %f t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a); + + if(d <= 30){ + //モータを動かす(スポンジ展開) + for(int motor =0; motor <100; motor++) { + myservo = motor/100.0; + wait(0.01); + } + for(int num =0;num<1000;num++){ //1000回行う(コマンドができないため) + myleds[2] = 1; + wait(0.01); + //気圧センサー(表示する) + float pressure = ps.readPressureMillibars(); + float altitude = ps.pressureToAltitudeMeters(pressure); //補正値必須 + float temperature = ps.readTemperatureC(); + //pc.printf("p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C\r\n",pressure,altitude,temperature); + + //加速度MPU9250(表示する) + mpu.readAccelData(accel); //加速度の値をaccel[3]に代入 + int x = accel[0]-123; //x軸方向の加速度 + int y = accel[1]+60; //y軸方向の加速度 + int z = accel[2]+1110 ; //z軸方向の加速度 + float X = x*0.000597964111328125; + float Y = y*0.000597964111328125; + float Z = z*0.000597964111328125; + double a = X*X+Y*Y+Z*Z-95.982071137936; + //pc.printf("%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a); + + pc.printf("t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a); + + if(fp == NULL) { //データが無い場合 + error("Could not open file for write\r\n"); + } + fprintf(fp,"%0.4f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a); //SDカードに保存 + //xbee.printf("number %f t %0.4f p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C ax%.2f ay%.2f az%.2f |a| %.2f\r\n",t.read(),pressure,altitude,temperature,X,Y,Z,a); + myleds[2] = 0; + wait(0.01); + } + + //回数分行ったら、SDカードを保存終了 + fclose(fp); //保存終了 + //xbee.printf("SDcard OK"); + pc.printf("SDcard OK"); + t.stop(); + } + } + } \ No newline at end of file