a

Dependencies:   mbed Servo SRF02 LPS25HB_I2C MPU6050 SDFileSystem HEPTA_COM

Committer:
kosukesuzuki
Date:
Wed Dec 01 07:15:12 2021 +0000
Revision:
3:10861141fce3
Parent:
2:9bfc2984e322
test

Who changed what in which revision?

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