a
Dependencies: mbed Servo SRF02 LPS25HB_I2C MPU6050 SDFileSystem HEPTA_COM
main.cpp
- Committer:
- kosukesuzuki
- Date:
- 2021-12-01
- Revision:
- 3:10861141fce3
- Parent:
- 2:9bfc2984e322
File content as of revision 3:10861141fce3:
//コマンドなしver //コマンドだと反応しないため→コマンド用のxbeeを必要だと思われる。 //xbeeが使えない→基盤ミス #include "mbed.h" #include "SRF02.h" #include "SDFileSystem.h" #include "Servo.h" #include "MPU6050.h" #include "LPS.h" 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(p9,p10); //9軸 I2C i2c(p28,p27); //気圧 LPS ps(i2c); int accel[3]; Timer t; //時間は表示する int main() { t.start(); //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 if (!ps.init()){ pc.printf("Failed to autodetect pressure sensor!\r\n"); while (1); } ps.enableDefault(); while(1){ //dが**cm以下になった場合、for文に移る myleds[1] = 1; wait(0.01); //気圧センサー(ここでは表示しない) //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); //速度と変位を表示 if(fp == NULL) { //データが無い場合 error("Could not open file for write\r\n"); } 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(); } } }