a

Dependencies:   mbed Servo SRF02 LPS25HB_I2C MPU6050 SDFileSystem HEPTA_COM

Committer:
kosukesuzuki
Date:
Tue Nov 09 12:07:51 2021 +0000
Revision:
2:9bfc2984e322
Parent:
0:bdbd3d6fc5d5
Child:
3:10861141fce3
a

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kosukesuzuki 2:9bfc2984e322 1 //コマンドなしver
kosukesuzuki 2:9bfc2984e322 2 //コマンドだと反応しないため
kosukesuzuki 2:9bfc2984e322 3
mbed_official 0:bdbd3d6fc5d5 4 #include "mbed.h"
kosukesuzuki 2:9bfc2984e322 5 //#include "SRF02.h"
mbed_official 0:bdbd3d6fc5d5 6 #include "SDFileSystem.h"
kosukesuzuki 2:9bfc2984e322 7 #include "Servo.h"
kosukesuzuki 2:9bfc2984e322 8 #include "MPU6050.h"
kosukesuzuki 2:9bfc2984e322 9 #include "LPS.h"
kosukesuzuki 2:9bfc2984e322 10
kosukesuzuki 2:9bfc2984e322 11 DigitalOut myleds[]={LED1,LED2,LED3,LED4};
kosukesuzuki 2:9bfc2984e322 12
kosukesuzuki 2:9bfc2984e322 13 SDFileSystem sd(p5, p6, p7, p8, "sd"); //SDcard
kosukesuzuki 2:9bfc2984e322 14 //SRF02 sensor(p9,p10,0xE0); //距離センサ (使わない)
kosukesuzuki 2:9bfc2984e322 15 Servo myservo(p21); //モーター
kosukesuzuki 2:9bfc2984e322 16 Serial pc(USBTX,USBRX,9600); //機体teraterm
kosukesuzuki 2:9bfc2984e322 17 Serial xbee(p13,p14,9600); //xbee
kosukesuzuki 2:9bfc2984e322 18 MPU6050 mpu(p28,p27); //9軸
kosukesuzuki 2:9bfc2984e322 19 I2C i2c(p28,p27); //気圧
kosukesuzuki 2:9bfc2984e322 20 LPS ps(i2c);
kosukesuzuki 2:9bfc2984e322 21
kosukesuzuki 2:9bfc2984e322 22 int accel[3];
kosukesuzuki 2:9bfc2984e322 23
kosukesuzuki 2:9bfc2984e322 24 Timer t;
kosukesuzuki 2:9bfc2984e322 25
mbed_official 0:bdbd3d6fc5d5 26 int main() {
kosukesuzuki 2:9bfc2984e322 27 t.start();
kosukesuzuki 2:9bfc2984e322 28 xbee.printf("SDcard start\r\n");
kosukesuzuki 2:9bfc2984e322 29 pc.printf("SDcard start\r\n");
kosukesuzuki 2:9bfc2984e322 30 mkdir("/sd/mydir", 0777); //filename
kosukesuzuki 2:9bfc2984e322 31 FILE *fp = fopen("/sd/mydir/sdtest.txt", "w"); //open
mbed_official 0:bdbd3d6fc5d5 32
kosukesuzuki 2:9bfc2984e322 33 if (!ps.init()){
kosukesuzuki 2:9bfc2984e322 34 pc.printf("Failed to autodetect pressure sensor!\r\n");
kosukesuzuki 2:9bfc2984e322 35 while (1);
kosukesuzuki 2:9bfc2984e322 36 }
kosukesuzuki 2:9bfc2984e322 37 ps.enableDefault();
kosukesuzuki 2:9bfc2984e322 38 for(int num =0;num<1000;num++){ //回数(数値を変える必要ある)
kosukesuzuki 2:9bfc2984e322 39 myleds[1] = 1;
kosukesuzuki 2:9bfc2984e322 40 wait(0.01);
kosukesuzuki 2:9bfc2984e322 41 L: //移動場所
kosukesuzuki 2:9bfc2984e322 42 //気圧センサー(SDcardとteratermに表示する)
kosukesuzuki 2:9bfc2984e322 43 float pressure = ps.readPressureMillibars();
kosukesuzuki 2:9bfc2984e322 44 float altitude = ps.pressureToAltitudeMeters(pressure)-65; //補正値必須
kosukesuzuki 2:9bfc2984e322 45 float temperature = ps.readTemperatureC();
kosukesuzuki 2:9bfc2984e322 46 //pc.printf("p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C\r\n",pressure,altitude,temperature);
kosukesuzuki 2:9bfc2984e322 47
kosukesuzuki 2:9bfc2984e322 48 //距離SRF02(表示しない)
kosukesuzuki 2:9bfc2984e322 49 //int d = sensor.getDistanceCm();
kosukesuzuki 2:9bfc2984e322 50 //pc.printf("Distance = %d cm\r\n",d);
kosukesuzuki 2:9bfc2984e322 51 //加速度MPU9250(表示する)
kosukesuzuki 2:9bfc2984e322 52
kosukesuzuki 2:9bfc2984e322 53 mpu.readAccelData(accel);//加速度の値をaccel[3]に代入
kosukesuzuki 2:9bfc2984e322 54 int x = accel[0]-123;//x軸方向の加速度
kosukesuzuki 2:9bfc2984e322 55 int y = accel[1]+60;//y軸方向の加速度
kosukesuzuki 2:9bfc2984e322 56 int z = accel[2]+1110 ;//z軸方向の加速度
kosukesuzuki 2:9bfc2984e322 57 float X = x*0.000597964111328125;
kosukesuzuki 2:9bfc2984e322 58 float Y = y*0.000597964111328125;
kosukesuzuki 2:9bfc2984e322 59 float Z = z*0.000597964111328125;
kosukesuzuki 2:9bfc2984e322 60 double a = X*X+Y*Y+Z*Z-95.982071137936;
kosukesuzuki 2:9bfc2984e322 61 //pc.printf("%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a);//速度と変位を表示
kosukesuzuki 2:9bfc2984e322 62
kosukesuzuki 2:9bfc2984e322 63
kosukesuzuki 2:9bfc2984e322 64 wait(0.01);
kosukesuzuki 2:9bfc2984e322 65 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);
kosukesuzuki 2:9bfc2984e322 66 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);
kosukesuzuki 2:9bfc2984e322 67
kosukesuzuki 2:9bfc2984e322 68 if( 15<altitude && altitude< 20){ //標高(数値変える必要あり)
kosukesuzuki 2:9bfc2984e322 69 pc.printf("motor");
kosukesuzuki 2:9bfc2984e322 70 xbee.printf("motor");
kosukesuzuki 2:9bfc2984e322 71 for(int motor =0; motor <100; motor++) {
kosukesuzuki 2:9bfc2984e322 72 myservo = motor/100.0;
kosukesuzuki 2:9bfc2984e322 73 wait(0.01);
kosukesuzuki 2:9bfc2984e322 74 goto L; //Lに移動
kosukesuzuki 2:9bfc2984e322 75 }
kosukesuzuki 2:9bfc2984e322 76 }
kosukesuzuki 2:9bfc2984e322 77 myleds[1]=0;
kosukesuzuki 2:9bfc2984e322 78 wait(0.01);
kosukesuzuki 2:9bfc2984e322 79 if(fp == NULL) { //データが無い場合
kosukesuzuki 2:9bfc2984e322 80 error("Could not open file for write\r\n");
kosukesuzuki 2:9bfc2984e322 81 }
kosukesuzuki 2:9bfc2984e322 82 //fprintf(fp, "distance %d",d); //距離保存(保存しない)
kosukesuzuki 2:9bfc2984e322 83 //fprintf(fp,"%.2f %.2f %.2f %.2f\r\n",X,Y,Z,a); //加速度保存
kosukesuzuki 2:9bfc2984e322 84 //fprintf(fp,"p:%.2f\t mbar\ta:%.2f m\tt:%.2f deg C\r\n",pressure,altitude,temperature); //気圧保存
kosukesuzuki 2:9bfc2984e322 85 fprintf(fp,"%f,%0.4f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,%.2f,\r\n",num,t.read(),pressure,altitude,temperature,X,Y,Z,a);
kosukesuzuki 2:9bfc2984e322 86 }
kosukesuzuki 2:9bfc2984e322 87 fclose(fp); //保存終了
kosukesuzuki 2:9bfc2984e322 88 xbee.printf("SDcard OK");
kosukesuzuki 2:9bfc2984e322 89 pc.printf("SDcard OK");
kosukesuzuki 2:9bfc2984e322 90 t.stop();
kosukesuzuki 2:9bfc2984e322 91 }