a
Dependencies: mbed Servo SRF02 LPS25HB_I2C MPU6050 SDFileSystem HEPTA_COM
main.cpp@3:10861141fce3, 2021-12-01 (annotated)
- Committer:
- kosukesuzuki
- Date:
- Wed Dec 01 07:15:12 2021 +0000
- Revision:
- 3:10861141fce3
- Parent:
- 2:9bfc2984e322
test
Who changed what in which revision?
User | Revision | Line number | New 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 | } |