drum team
Dependencies: BLE_API X_NUCLEO_IDB0XA1 mbed
Fork of BLE_HeartRate_IDB0XA1 by
main.cpp@22:65f63e2d06bd, 2016-10-30 (annotated)
- Committer:
- fxanhkhoa
- Date:
- Sun Oct 30 00:13:37 2016 +0000
- Revision:
- 22:65f63e2d06bd
- Parent:
- 21:0e7c08f5386f
ok
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
screamer | 0:eb7f02ad28a7 | 1 | /* mbed Microcontroller Library |
screamer | 0:eb7f02ad28a7 | 2 | * Copyright (c) 2006-2015 ARM Limited |
screamer | 0:eb7f02ad28a7 | 3 | * |
screamer | 0:eb7f02ad28a7 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
screamer | 0:eb7f02ad28a7 | 5 | * you may not use this file except in compliance with the License. |
screamer | 0:eb7f02ad28a7 | 6 | * You may obtain a copy of the License at |
screamer | 0:eb7f02ad28a7 | 7 | * |
screamer | 0:eb7f02ad28a7 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
screamer | 0:eb7f02ad28a7 | 9 | * |
screamer | 0:eb7f02ad28a7 | 10 | * Unless required by applicable law or agreed to in writing, software |
screamer | 0:eb7f02ad28a7 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
screamer | 0:eb7f02ad28a7 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
screamer | 0:eb7f02ad28a7 | 13 | * See the License for the specific language governing permissions and |
screamer | 0:eb7f02ad28a7 | 14 | * limitations under the License. |
screamer | 0:eb7f02ad28a7 | 15 | */ |
screamer | 0:eb7f02ad28a7 | 16 | |
screamer | 0:eb7f02ad28a7 | 17 | #include "mbed.h" |
fxanhkhoa | 22:65f63e2d06bd | 18 | #include "MPU6050.h" |
screamer | 0:eb7f02ad28a7 | 19 | #include "ble/BLE.h" |
screamer | 0:eb7f02ad28a7 | 20 | #include "ble/services/HeartRateService.h" |
fxanhkhoa | 22:65f63e2d06bd | 21 | #define ratio 1 |
fxanhkhoa | 22:65f63e2d06bd | 22 | |
fxanhkhoa | 22:65f63e2d06bd | 23 | int i= 0,j = 0; |
fxanhkhoa | 22:65f63e2d06bd | 24 | float sum = 0; |
fxanhkhoa | 22:65f63e2d06bd | 25 | uint32_t sumCount = 0; |
fxanhkhoa | 22:65f63e2d06bd | 26 | volatile uint8_t hrmCounter; |
fxanhkhoa | 22:65f63e2d06bd | 27 | |
fxanhkhoa | 22:65f63e2d06bd | 28 | float central1[3], central2[3]; |
fxanhkhoa | 22:65f63e2d06bd | 29 | float drum1_min[3],drum2_min[3],drum3_min[3],drum4_min[3],drum5_min[3],drum6_min[3],drum7_min[3],drum8_min[3],drum9_min[3],drum10_min[3]; |
fxanhkhoa | 22:65f63e2d06bd | 30 | float drum1_max[3],drum2_max[3],drum3_max[3],drum4_max[3],drum5_max[3],drum6_max[3],drum7_max[3],drum8_max[3],drum9_max[3],drum10_max[3]; |
fxanhkhoa | 22:65f63e2d06bd | 31 | int flag = 0; |
fxanhkhoa | 22:65f63e2d06bd | 32 | int stt1 = 0, stt2 = 0; |
fxanhkhoa | 22:65f63e2d06bd | 33 | int drum1_stt1 = 0,drum2_stt1 = 0,drum3_stt1 = 0,drum4_stt1 = 0,drum5_stt1 = 0; |
fxanhkhoa | 22:65f63e2d06bd | 34 | int drum1_stt2 = 0,drum2_stt2 = 0,drum3_stt2 = 0,drum4_stt2 = 0,drum5_stt2 = 0; |
fxanhkhoa | 22:65f63e2d06bd | 35 | |
fxanhkhoa | 22:65f63e2d06bd | 36 | |
fxanhkhoa | 22:65f63e2d06bd | 37 | InterruptIn mybutton(USER_BUTTON); |
fxanhkhoa | 22:65f63e2d06bd | 38 | |
fxanhkhoa | 22:65f63e2d06bd | 39 | MPU6050 mpu6050; |
fxanhkhoa | 22:65f63e2d06bd | 40 | |
fxanhkhoa | 22:65f63e2d06bd | 41 | MPU6050 mpu6050_2; |
fxanhkhoa | 22:65f63e2d06bd | 42 | |
fxanhkhoa | 22:65f63e2d06bd | 43 | Timer t; |
fxanhkhoa | 22:65f63e2d06bd | 44 | |
fxanhkhoa | 22:65f63e2d06bd | 45 | Serial pc(USBTX, USBRX); // tx, rx |
fxanhkhoa | 22:65f63e2d06bd | 46 | |
fxanhkhoa | 22:65f63e2d06bd | 47 | // VCC, SCE, RST, D/C, MOSI,S CLK, LED |
fxanhkhoa | 22:65f63e2d06bd | 48 | //N5110 lcd(PA_8, PB_10, PA_9, PA_6, PA_7, PA_5, PC_7); |
fxanhkhoa | 22:65f63e2d06bd | 49 | |
fxanhkhoa | 22:65f63e2d06bd | 50 | void get(); |
screamer | 0:eb7f02ad28a7 | 51 | |
apalmieri | 13:227a0149b677 | 52 | DigitalOut led1(LED1, 1); |
screamer | 0:eb7f02ad28a7 | 53 | |
fxanhkhoa | 22:65f63e2d06bd | 54 | const static char DEVICE_NAME[] = "IDB"; |
apalmieri | 13:227a0149b677 | 55 | static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE}; |
apalmieri | 13:227a0149b677 | 56 | |
screamer | 0:eb7f02ad28a7 | 57 | static volatile bool triggerSensorPolling = false; |
screamer | 0:eb7f02ad28a7 | 58 | |
apalmieri | 2:bc0c0d442a24 | 59 | void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) |
screamer | 0:eb7f02ad28a7 | 60 | { |
apalmieri | 13:227a0149b677 | 61 | (void)params; |
apalmieri | 13:227a0149b677 | 62 | BLE::Instance().gap().startAdvertising(); // restart advertising |
screamer | 0:eb7f02ad28a7 | 63 | } |
screamer | 0:eb7f02ad28a7 | 64 | |
screamer | 0:eb7f02ad28a7 | 65 | void periodicCallback(void) |
screamer | 0:eb7f02ad28a7 | 66 | { |
screamer | 0:eb7f02ad28a7 | 67 | led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ |
screamer | 0:eb7f02ad28a7 | 68 | /* Note that the periodicCallback() executes in interrupt context, so it is safer to do |
screamer | 0:eb7f02ad28a7 | 69 | * heavy-weight sensor polling from the main thread. */ |
screamer | 0:eb7f02ad28a7 | 70 | triggerSensorPolling = true; |
screamer | 0:eb7f02ad28a7 | 71 | } |
screamer | 0:eb7f02ad28a7 | 72 | |
apalmieri | 13:227a0149b677 | 73 | void onBleInitError(BLE &ble, ble_error_t error) |
apalmieri | 13:227a0149b677 | 74 | { |
apalmieri | 13:227a0149b677 | 75 | (void)ble; |
apalmieri | 13:227a0149b677 | 76 | (void)error; |
apalmieri | 13:227a0149b677 | 77 | /* Initialization error handling should go here */ |
apalmieri | 13:227a0149b677 | 78 | } |
apalmieri | 13:227a0149b677 | 79 | |
apalmieri | 13:227a0149b677 | 80 | void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) |
screamer | 0:eb7f02ad28a7 | 81 | { |
apalmieri | 13:227a0149b677 | 82 | BLE& ble = params->ble; |
apalmieri | 13:227a0149b677 | 83 | ble_error_t error = params->error; |
screamer | 0:eb7f02ad28a7 | 84 | |
apalmieri | 13:227a0149b677 | 85 | if (error != BLE_ERROR_NONE) { |
apalmieri | 13:227a0149b677 | 86 | onBleInitError(ble, error); |
apalmieri | 13:227a0149b677 | 87 | return; |
apalmieri | 13:227a0149b677 | 88 | } |
apalmieri | 13:227a0149b677 | 89 | |
apalmieri | 13:227a0149b677 | 90 | if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { |
apalmieri | 13:227a0149b677 | 91 | return; |
apalmieri | 13:227a0149b677 | 92 | } |
apalmieri | 13:227a0149b677 | 93 | |
screamer | 0:eb7f02ad28a7 | 94 | ble.gap().onDisconnection(disconnectionCallback); |
screamer | 0:eb7f02ad28a7 | 95 | |
screamer | 0:eb7f02ad28a7 | 96 | /* Setup primary service. */ |
fxanhkhoa | 22:65f63e2d06bd | 97 | uint8_t hrmCounter = 'A'; // init HRM to 60bps |
screamer | 0:eb7f02ad28a7 | 98 | HeartRateService hrService(ble, hrmCounter, HeartRateService::LOCATION_FINGER); |
screamer | 0:eb7f02ad28a7 | 99 | |
screamer | 0:eb7f02ad28a7 | 100 | /* Setup advertising. */ |
screamer | 0:eb7f02ad28a7 | 101 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
screamer | 0:eb7f02ad28a7 | 102 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); |
screamer | 0:eb7f02ad28a7 | 103 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR); |
screamer | 0:eb7f02ad28a7 | 104 | ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); |
screamer | 0:eb7f02ad28a7 | 105 | ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
screamer | 0:eb7f02ad28a7 | 106 | ble.gap().setAdvertisingInterval(1000); /* 1000ms */ |
screamer | 0:eb7f02ad28a7 | 107 | ble.gap().startAdvertising(); |
fxanhkhoa | 22:65f63e2d06bd | 108 | |
fxanhkhoa | 22:65f63e2d06bd | 109 | pc.baud(9600); |
screamer | 0:eb7f02ad28a7 | 110 | |
fxanhkhoa | 22:65f63e2d06bd | 111 | //Set up I2C |
fxanhkhoa | 22:65f63e2d06bd | 112 | i2c.frequency(400000); // use fast (400 kHz) I2C |
fxanhkhoa | 22:65f63e2d06bd | 113 | i2c2.frequency(400000); |
fxanhkhoa | 22:65f63e2d06bd | 114 | t.start(); |
fxanhkhoa | 22:65f63e2d06bd | 115 | |
fxanhkhoa | 22:65f63e2d06bd | 116 | //lcd.init(); |
fxanhkhoa | 22:65f63e2d06bd | 117 | //lcd.setBrightness(0.05); |
fxanhkhoa | 22:65f63e2d06bd | 118 | |
fxanhkhoa | 22:65f63e2d06bd | 119 | |
fxanhkhoa | 22:65f63e2d06bd | 120 | // Read the WHO_AM_I register, this is a good test of communication |
fxanhkhoa | 22:65f63e2d06bd | 121 | uint8_t whoami = mpu6050.readByte(MPU6050_ADDRESS, WHO_AM_I_MPU6050); // Read WHO_AM_I register for MPU-6050 |
fxanhkhoa | 22:65f63e2d06bd | 122 | pc.printf("I AM 0x%x\n\r", whoami); pc.printf("I SHOULD BE 0x68\n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 123 | |
fxanhkhoa | 22:65f63e2d06bd | 124 | if (whoami == 0x68) // WHO_AM_I should always be 0x68 |
fxanhkhoa | 22:65f63e2d06bd | 125 | { |
fxanhkhoa | 22:65f63e2d06bd | 126 | pc.printf("MPU6050 is online..."); |
fxanhkhoa | 22:65f63e2d06bd | 127 | wait(1); |
fxanhkhoa | 22:65f63e2d06bd | 128 | //lcd.clear(); |
fxanhkhoa | 22:65f63e2d06bd | 129 | //lcd.printString("MPU6050 OK", 0, 0); |
fxanhkhoa | 22:65f63e2d06bd | 130 | |
fxanhkhoa | 22:65f63e2d06bd | 131 | |
fxanhkhoa | 22:65f63e2d06bd | 132 | mpu6050.MPU6050SelfTest(SelfTest); // Start by performing self test and reporting values |
fxanhkhoa | 22:65f63e2d06bd | 133 | pc.printf("x-axis self test: acceleration trim within : "); pc.printf("%f", SelfTest[0]); pc.printf("% of factory value \n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 134 | pc.printf("y-axis self test: acceleration trim within : "); pc.printf("%f", SelfTest[1]); pc.printf("% of factory value \n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 135 | pc.printf("z-axis self test: acceleration trim within : "); pc.printf("%f", SelfTest[2]); pc.printf("% of factory value \n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 136 | pc.printf("x-axis self test: gyration trim within : "); pc.printf("%f", SelfTest[3]); pc.printf("% of factory value \n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 137 | pc.printf("y-axis self test: gyration trim within : "); pc.printf("%f", SelfTest[4]); pc.printf("% of factory value \n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 138 | pc.printf("z-axis self test: gyration trim within : "); pc.printf("%f", SelfTest[5]); pc.printf("% of factory value \n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 139 | wait(1); |
fxanhkhoa | 22:65f63e2d06bd | 140 | |
fxanhkhoa | 22:65f63e2d06bd | 141 | if(SelfTest[0] < 1.0f && SelfTest[1] < 1.0f && SelfTest[2] < 1.0f && SelfTest[3] < 1.0f && SelfTest[4] < 1.0f && SelfTest[5] < 1.0f) |
fxanhkhoa | 22:65f63e2d06bd | 142 | { |
fxanhkhoa | 22:65f63e2d06bd | 143 | mpu6050.resetMPU6050(); // Reset registers to default in preparation for device calibration |
fxanhkhoa | 22:65f63e2d06bd | 144 | mpu6050.calibrateMPU6050(gyroBias, accelBias); // Calibrate gyro and accelerometers, load biases in bias registers |
fxanhkhoa | 22:65f63e2d06bd | 145 | mpu6050.initMPU6050(); pc.printf("MPU6050 initialized for active data mode....\n\r"); // Initialize device for active mode read of acclerometer, gyroscope, and temperature |
fxanhkhoa | 22:65f63e2d06bd | 146 | |
fxanhkhoa | 22:65f63e2d06bd | 147 | /*lcd.clear(); |
fxanhkhoa | 22:65f63e2d06bd | 148 | lcd.printString("MPU6050", 0, 0); |
fxanhkhoa | 22:65f63e2d06bd | 149 | lcd.printString("pass self test", 0, 1); |
fxanhkhoa | 22:65f63e2d06bd | 150 | lcd.printString("initializing", 0, 2); */ |
fxanhkhoa | 22:65f63e2d06bd | 151 | wait(2); |
fxanhkhoa | 22:65f63e2d06bd | 152 | } |
fxanhkhoa | 22:65f63e2d06bd | 153 | else |
fxanhkhoa | 22:65f63e2d06bd | 154 | { |
fxanhkhoa | 22:65f63e2d06bd | 155 | pc.printf("Device did not the pass self-test!\n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 156 | |
fxanhkhoa | 22:65f63e2d06bd | 157 | /*lcd.clear(); |
fxanhkhoa | 22:65f63e2d06bd | 158 | lcd.printString("MPU6050", 0, 0); |
fxanhkhoa | 22:65f63e2d06bd | 159 | lcd.printString("no pass", 0, 1); |
fxanhkhoa | 22:65f63e2d06bd | 160 | lcd.printString("self test", 0, 2);*/ |
fxanhkhoa | 22:65f63e2d06bd | 161 | } |
fxanhkhoa | 22:65f63e2d06bd | 162 | } |
fxanhkhoa | 22:65f63e2d06bd | 163 | else |
fxanhkhoa | 22:65f63e2d06bd | 164 | { |
fxanhkhoa | 22:65f63e2d06bd | 165 | pc.printf("Could not connect to MPU6050: \n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 166 | pc.printf("%#x \n", whoami); |
fxanhkhoa | 22:65f63e2d06bd | 167 | |
fxanhkhoa | 22:65f63e2d06bd | 168 | /*lcd.clear(); |
fxanhkhoa | 22:65f63e2d06bd | 169 | lcd.printString("MPU6050", 0, 0); |
fxanhkhoa | 22:65f63e2d06bd | 170 | lcd.printString("no connection", 0, 1); |
fxanhkhoa | 22:65f63e2d06bd | 171 | lcd.printString("0x", 0, 2); lcd.setXYAddress(20, 2); lcd.printChar(whoami);*/ |
fxanhkhoa | 22:65f63e2d06bd | 172 | |
fxanhkhoa | 22:65f63e2d06bd | 173 | while(1) ; // Loop forever if communication doesn't happen |
fxanhkhoa | 22:65f63e2d06bd | 174 | } |
fxanhkhoa | 22:65f63e2d06bd | 175 | |
screamer | 0:eb7f02ad28a7 | 176 | // infinite loop |
fxanhkhoa | 22:65f63e2d06bd | 177 | while (1) { |
screamer | 0:eb7f02ad28a7 | 178 | // check for trigger from periodicCallback() |
screamer | 0:eb7f02ad28a7 | 179 | if (triggerSensorPolling && ble.getGapState().connected) { |
screamer | 0:eb7f02ad28a7 | 180 | triggerSensorPolling = false; |
screamer | 0:eb7f02ad28a7 | 181 | |
fxanhkhoa | 22:65f63e2d06bd | 182 | // If data ready bit set, all data registers have new data |
fxanhkhoa | 22:65f63e2d06bd | 183 | if(mpu6050.readByte(MPU6050_ADDRESS, INT_STATUS) & 0x01) { // check if data ready interrupt |
fxanhkhoa | 22:65f63e2d06bd | 184 | mpu6050.readAccelData(accelCount); // Read the x/y/z adc values |
fxanhkhoa | 22:65f63e2d06bd | 185 | mpu6050.getAres(); |
fxanhkhoa | 22:65f63e2d06bd | 186 | |
fxanhkhoa | 22:65f63e2d06bd | 187 | // Now we'll calculate the accleration value into actual g's |
fxanhkhoa | 22:65f63e2d06bd | 188 | ax = (float)accelCount[0]*aRes - accelBias[0]; // get actual g value, this depends on scale being set |
fxanhkhoa | 22:65f63e2d06bd | 189 | ay = (float)accelCount[1]*aRes - accelBias[1]; |
fxanhkhoa | 22:65f63e2d06bd | 190 | az = (float)accelCount[2]*aRes - accelBias[2]; |
fxanhkhoa | 22:65f63e2d06bd | 191 | |
fxanhkhoa | 22:65f63e2d06bd | 192 | ax2 = (float)accelCount[0]*aRes - accelBias[0]; // get actual g value, this depends on scale being set |
fxanhkhoa | 22:65f63e2d06bd | 193 | ay2 = (float)accelCount[1]*aRes - accelBias[1]; |
fxanhkhoa | 22:65f63e2d06bd | 194 | az2 = (float)accelCount[2]*aRes - accelBias[2]; |
fxanhkhoa | 22:65f63e2d06bd | 195 | |
fxanhkhoa | 22:65f63e2d06bd | 196 | mpu6050.readGyroData(gyroCount); // Read the x/y/z adc values |
fxanhkhoa | 22:65f63e2d06bd | 197 | mpu6050.getGres(); |
fxanhkhoa | 22:65f63e2d06bd | 198 | |
fxanhkhoa | 22:65f63e2d06bd | 199 | // Calculate the gyro value into actual degrees per second |
fxanhkhoa | 22:65f63e2d06bd | 200 | gx = (float)gyroCount[0]*gRes; // - gyroBias[0]; // get actual gyro value, this depends on scale being set |
fxanhkhoa | 22:65f63e2d06bd | 201 | gy = (float)gyroCount[1]*gRes; // - gyroBias[1]; |
fxanhkhoa | 22:65f63e2d06bd | 202 | gz = (float)gyroCount[2]*gRes; // - gyroBias[2]; |
fxanhkhoa | 22:65f63e2d06bd | 203 | |
fxanhkhoa | 22:65f63e2d06bd | 204 | gx2 = (float)gyroCount[0]*gRes; // - gyroBias[0]; // get actual gyro value, this depends on scale being set |
fxanhkhoa | 22:65f63e2d06bd | 205 | gy2 = (float)gyroCount[1]*gRes; // - gyroBias[1]; |
fxanhkhoa | 22:65f63e2d06bd | 206 | gz2 = (float)gyroCount[2]*gRes; // - gyroBias[2]; |
fxanhkhoa | 22:65f63e2d06bd | 207 | |
fxanhkhoa | 22:65f63e2d06bd | 208 | tempCount = mpu6050.readTempData(); // Read the x/y/z adc values |
fxanhkhoa | 22:65f63e2d06bd | 209 | temperature = (tempCount) / 340. + 36.53; // Temperature in degrees Centigrade |
fxanhkhoa | 22:65f63e2d06bd | 210 | } |
fxanhkhoa | 22:65f63e2d06bd | 211 | |
fxanhkhoa | 22:65f63e2d06bd | 212 | Now = t.read_us(); |
fxanhkhoa | 22:65f63e2d06bd | 213 | deltat = (float)((Now - lastUpdate)/1000000.0f) ; // set integration time by time elapsed since last filter update |
fxanhkhoa | 22:65f63e2d06bd | 214 | lastUpdate = Now; |
fxanhkhoa | 22:65f63e2d06bd | 215 | |
fxanhkhoa | 22:65f63e2d06bd | 216 | sum += deltat; |
fxanhkhoa | 22:65f63e2d06bd | 217 | sumCount++; |
fxanhkhoa | 22:65f63e2d06bd | 218 | |
fxanhkhoa | 22:65f63e2d06bd | 219 | if(lastUpdate - firstUpdate > 10000000.0f) { |
fxanhkhoa | 22:65f63e2d06bd | 220 | beta = 0.04; // decrease filter gain after stabilized |
fxanhkhoa | 22:65f63e2d06bd | 221 | zeta = 0.015; // increasey bias drift gain after stabilized |
fxanhkhoa | 22:65f63e2d06bd | 222 | } |
fxanhkhoa | 22:65f63e2d06bd | 223 | |
fxanhkhoa | 22:65f63e2d06bd | 224 | // Pass gyro rate as rad/s |
fxanhkhoa | 22:65f63e2d06bd | 225 | mpu6050.MadgwickQuaternionUpdate(ax, ay, az, gx*PI/180.0f, gy*PI/180.0f, gz*PI/180.0f); |
fxanhkhoa | 22:65f63e2d06bd | 226 | mpu6050.MadgwickQuaternionUpdate(ax2, ay2, az2, gx2*PI/180.0f, gy2*PI/180.0f, gz2*PI/180.0f); |
fxanhkhoa | 22:65f63e2d06bd | 227 | |
fxanhkhoa | 22:65f63e2d06bd | 228 | // Serial print and/or display at 0.5 s rate independent of data rates |
fxanhkhoa | 22:65f63e2d06bd | 229 | delt_t = t.read_ms() - count_mpu; |
fxanhkhoa | 22:65f63e2d06bd | 230 | //if (delt_t > 500) { // update LCD once per half-second independent of read rate |
fxanhkhoa | 22:65f63e2d06bd | 231 | |
fxanhkhoa | 22:65f63e2d06bd | 232 | //pc.printf("ax = %f", 1000*ax); |
fxanhkhoa | 22:65f63e2d06bd | 233 | //pc.printf(" ay = %f", 1000*ay); |
fxanhkhoa | 22:65f63e2d06bd | 234 | //pc.printf(" az = %f mg\n\r", 1000*az); |
fxanhkhoa | 22:65f63e2d06bd | 235 | |
fxanhkhoa | 22:65f63e2d06bd | 236 | //pc.printf("gx = %f", gx); |
fxanhkhoa | 22:65f63e2d06bd | 237 | //pc.printf(" gy = %f", gy); |
fxanhkhoa | 22:65f63e2d06bd | 238 | //pc.printf(" gz = %f deg/s\n\r", gz); |
fxanhkhoa | 22:65f63e2d06bd | 239 | |
fxanhkhoa | 22:65f63e2d06bd | 240 | //pc.printf(" temperature = %f C\n\r", temperature); |
fxanhkhoa | 22:65f63e2d06bd | 241 | |
fxanhkhoa | 22:65f63e2d06bd | 242 | //pc.printf("q0 = %f\n\r", q[0]); |
fxanhkhoa | 22:65f63e2d06bd | 243 | //pc.printf("q1 = %f\n\r", q[1]); |
fxanhkhoa | 22:65f63e2d06bd | 244 | //pc.printf("q2 = %f\n\r", q[2]); |
fxanhkhoa | 22:65f63e2d06bd | 245 | //pc.printf("q3 = %f\n\r", q[3]); |
fxanhkhoa | 22:65f63e2d06bd | 246 | |
fxanhkhoa | 22:65f63e2d06bd | 247 | //lcd.clear(); |
fxanhkhoa | 22:65f63e2d06bd | 248 | //lcd.printString("MPU6050", 0, 0); |
fxanhkhoa | 22:65f63e2d06bd | 249 | //lcd.printString("x y z", 0, 1); |
fxanhkhoa | 22:65f63e2d06bd | 250 | //lcd.setXYAddress(0, 2); lcd.printChar((char)(1000*ax)); |
fxanhkhoa | 22:65f63e2d06bd | 251 | //lcd.setXYAddress(20, 2); lcd.printChar((char)(1000*ay)); |
fxanhkhoa | 22:65f63e2d06bd | 252 | //lcd.setXYAddress(40, 2); lcd.printChar((char)(1000*az)); lcd.printString("mg", 66, 2); |
fxanhkhoa | 22:65f63e2d06bd | 253 | |
fxanhkhoa | 22:65f63e2d06bd | 254 | |
fxanhkhoa | 22:65f63e2d06bd | 255 | // Define output variables from updated quaternion---these are Tait-Bryan angles, commonly used in aircraft orientation. |
fxanhkhoa | 22:65f63e2d06bd | 256 | // In this coordinate system, the positive z-axis is down toward Earth. |
fxanhkhoa | 22:65f63e2d06bd | 257 | // Yaw is the angle between Sensor x-axis and Earth magnetic North (or true North if corrected for local declination, looking down on the sensor positive yaw is counterclockwise. |
fxanhkhoa | 22:65f63e2d06bd | 258 | // Pitch is angle between sensor x-axis and Earth ground plane, toward the Earth is positive, up toward the sky is negative. |
fxanhkhoa | 22:65f63e2d06bd | 259 | // Roll is angle between sensor y-axis and Earth ground plane, y-axis up is positive roll. |
fxanhkhoa | 22:65f63e2d06bd | 260 | // These arise from the definition of the homogeneous rotation matrix constructed from quaternions. |
fxanhkhoa | 22:65f63e2d06bd | 261 | // Tait-Bryan angles as well as Euler angles are non-commutative; that is, the get the correct orientation the rotations must be |
fxanhkhoa | 22:65f63e2d06bd | 262 | // applied in the correct order which for this configuration is yaw, pitch, and then roll. |
fxanhkhoa | 22:65f63e2d06bd | 263 | // For more see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles which has additional links. |
fxanhkhoa | 22:65f63e2d06bd | 264 | yaw = atan2(2.0f * (q[1] * q[2] + q[0] * q[3]), q[0] * q[0] + q[1] * q[1] - q[2] * q[2] - q[3] * q[3]); |
fxanhkhoa | 22:65f63e2d06bd | 265 | pitch = -asin(2.0f * (q[1] * q[3] - q[0] * q[2])); |
fxanhkhoa | 22:65f63e2d06bd | 266 | roll = atan2(2.0f * (q[0] * q[1] + q[2] * q[3]), q[0] * q[0] - q[1] * q[1] - q[2] * q[2] + q[3] * q[3]); |
fxanhkhoa | 22:65f63e2d06bd | 267 | pitch *= 180.0f / PI; |
fxanhkhoa | 22:65f63e2d06bd | 268 | yaw *= 180.0f / PI; |
fxanhkhoa | 22:65f63e2d06bd | 269 | roll *= 180.0f / PI; |
fxanhkhoa | 22:65f63e2d06bd | 270 | |
fxanhkhoa | 22:65f63e2d06bd | 271 | yaw2 = atan2(2.0f * (q[1] * q[2] + q[0] * q[3]), q[0] * q[0] + q[1] * q[1] - q[2] * q[2] - q[3] * q[3]); |
fxanhkhoa | 22:65f63e2d06bd | 272 | pitch2 = -asin(2.0f * (q[1] * q[3] - q[0] * q[2])); |
fxanhkhoa | 22:65f63e2d06bd | 273 | roll2 = atan2(2.0f * (q[0] * q[1] + q[2] * q[3]), q[0] * q[0] - q[1] * q[1] - q[2] * q[2] + q[3] * q[3]); |
fxanhkhoa | 22:65f63e2d06bd | 274 | pitch2 *= 180.0f / PI; |
fxanhkhoa | 22:65f63e2d06bd | 275 | yaw2 *= 180.0f / PI; |
fxanhkhoa | 22:65f63e2d06bd | 276 | roll2 *= 180.0f / PI; |
fxanhkhoa | 22:65f63e2d06bd | 277 | |
fxanhkhoa | 22:65f63e2d06bd | 278 | // pc.printf("Yaw, Pitch, Roll: \n\r"); |
fxanhkhoa | 22:65f63e2d06bd | 279 | // pc.printf("%f", yaw); |
fxanhkhoa | 22:65f63e2d06bd | 280 | // pc.printf(", "); |
fxanhkhoa | 22:65f63e2d06bd | 281 | // pc.printf("%f", pitch); |
fxanhkhoa | 22:65f63e2d06bd | 282 | // pc.printf(", "); |
fxanhkhoa | 22:65f63e2d06bd | 283 | // pc.printf("%f\n\r", roll); |
fxanhkhoa | 22:65f63e2d06bd | 284 | // pc.printf("average rate = "); pc.printf("%f", (sumCount/sum)); pc.printf(" Hz\n\r"); |
screamer | 0:eb7f02ad28a7 | 285 | |
fxanhkhoa | 22:65f63e2d06bd | 286 | //pc.printf("Yaw, Pitch, Roll: %f %f %f\n\r", yaw, pitch, roll); |
fxanhkhoa | 22:65f63e2d06bd | 287 | //pc.printf("average rate = %f\n\r", (float) sumCount/sum); |
fxanhkhoa | 22:65f63e2d06bd | 288 | |
fxanhkhoa | 22:65f63e2d06bd | 289 | myled= !myled; |
fxanhkhoa | 22:65f63e2d06bd | 290 | count_mpu = t.read_ms(); |
fxanhkhoa | 22:65f63e2d06bd | 291 | sum = 0; |
fxanhkhoa | 22:65f63e2d06bd | 292 | sumCount = 0; |
fxanhkhoa | 22:65f63e2d06bd | 293 | if ((yaw < 1) && (yaw > 0) && (flag == 0)) |
fxanhkhoa | 22:65f63e2d06bd | 294 | { |
fxanhkhoa | 22:65f63e2d06bd | 295 | |
fxanhkhoa | 22:65f63e2d06bd | 296 | central1[0] = yaw; |
fxanhkhoa | 22:65f63e2d06bd | 297 | central1[1] = pitch; |
fxanhkhoa | 22:65f63e2d06bd | 298 | central1[2] = roll; |
fxanhkhoa | 22:65f63e2d06bd | 299 | central2[0] = yaw2; |
fxanhkhoa | 22:65f63e2d06bd | 300 | central2[1] = pitch2; |
fxanhkhoa | 22:65f63e2d06bd | 301 | central2[2] = roll2; |
fxanhkhoa | 22:65f63e2d06bd | 302 | |
screamer | 0:eb7f02ad28a7 | 303 | |
fxanhkhoa | 22:65f63e2d06bd | 304 | pc.printf("central x y z : %f %f %f \r\n", central1[0],central1[1],central1[2]); |
fxanhkhoa | 22:65f63e2d06bd | 305 | flag = 1; |
fxanhkhoa | 22:65f63e2d06bd | 306 | } |
fxanhkhoa | 22:65f63e2d06bd | 307 | //if (i == 2000) i = 0; |
fxanhkhoa | 22:65f63e2d06bd | 308 | if (flag == 1) |
fxanhkhoa | 22:65f63e2d06bd | 309 | { |
fxanhkhoa | 22:65f63e2d06bd | 310 | pc.printf("Yaw, Pitch, Roll: %f %f %f\n\r", yaw, pitch, roll); |
fxanhkhoa | 22:65f63e2d06bd | 311 | //hrService.updateHeartRate((uint8_t)yaw); |
fxanhkhoa | 22:65f63e2d06bd | 312 | //pc.printf("Yaw, Pitch, Roll: %f %f %f\n\r", drum1_min[0], drum1_max[0], drum1_min[2]); |
fxanhkhoa | 22:65f63e2d06bd | 313 | switch (stt1) |
fxanhkhoa | 22:65f63e2d06bd | 314 | { |
fxanhkhoa | 22:65f63e2d06bd | 315 | case 0: |
fxanhkhoa | 22:65f63e2d06bd | 316 | pc.printf("%d",stt1); |
fxanhkhoa | 22:65f63e2d06bd | 317 | if (/*((yaw > drum1_min[0]) ||*/ (yaw < drum1_max[0]) /*&& (pitch > drum1_min[1]) && (pitch < drum1_max[1]) && (roll > drum1_max[2]) && (roll < drum1_max[2])*/) stt1 = 1; |
fxanhkhoa | 22:65f63e2d06bd | 318 | else if (/*(yaw > drum2_min[0]) ||*/ (yaw < drum2_max[0])/* && (pitch > drum2_min[1]) && (pitch < drum2_max[1]) && (roll > drum2_max[2]) && (roll < drum2_max[2])*/) stt1 = 2; |
fxanhkhoa | 22:65f63e2d06bd | 319 | else if (/*(yaw > drum3_min[0]) ||*/ (yaw < drum3_max[0])/* && (pitch > drum3_min[1]) && (pitch < drum3_max[1]) && (roll > drum3_max[2]) && (roll < drum3_max[2])*/) stt1 = 3; |
fxanhkhoa | 22:65f63e2d06bd | 320 | hrService.updateHeartRate((uint8_t)96); |
fxanhkhoa | 22:65f63e2d06bd | 321 | break; |
fxanhkhoa | 22:65f63e2d06bd | 322 | case 1: |
fxanhkhoa | 22:65f63e2d06bd | 323 | pc.printf("%d",stt1); |
fxanhkhoa | 22:65f63e2d06bd | 324 | if (drum1_stt1 == 0) |
fxanhkhoa | 22:65f63e2d06bd | 325 | { |
fxanhkhoa | 22:65f63e2d06bd | 326 | pc.printf("drum 1_1\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 327 | drum1_stt1 = 1; |
fxanhkhoa | 22:65f63e2d06bd | 328 | hrService.updateHeartRate((uint8_t)69); |
fxanhkhoa | 22:65f63e2d06bd | 329 | } |
fxanhkhoa | 22:65f63e2d06bd | 330 | else if ((yaw > drum1_max[0]) || (pitch > drum1_max[1]) /*&& (roll > drum1_max[2])*/) { |
fxanhkhoa | 22:65f63e2d06bd | 331 | stt1 = 0 ; |
fxanhkhoa | 22:65f63e2d06bd | 332 | drum1_stt1 = 0; |
fxanhkhoa | 22:65f63e2d06bd | 333 | pc.printf("up\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 334 | } |
fxanhkhoa | 22:65f63e2d06bd | 335 | break; |
fxanhkhoa | 22:65f63e2d06bd | 336 | case 2: |
fxanhkhoa | 22:65f63e2d06bd | 337 | pc.printf("%d",stt1); |
fxanhkhoa | 22:65f63e2d06bd | 338 | if (drum2_stt1 == 0) |
fxanhkhoa | 22:65f63e2d06bd | 339 | { |
fxanhkhoa | 22:65f63e2d06bd | 340 | pc.printf("drum 2_2\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 341 | drum1_stt1 = 1; |
fxanhkhoa | 22:65f63e2d06bd | 342 | hrService.updateHeartRate((uint8_t)88); |
fxanhkhoa | 22:65f63e2d06bd | 343 | } |
fxanhkhoa | 22:65f63e2d06bd | 344 | else if ((yaw > drum2_max[0]) && (pitch > drum2_max[1]) /*&& (roll > drum2_max[2])*/) { |
fxanhkhoa | 22:65f63e2d06bd | 345 | stt1 = 0 ; |
fxanhkhoa | 22:65f63e2d06bd | 346 | drum1_stt1 = 0; |
fxanhkhoa | 22:65f63e2d06bd | 347 | pc.printf("up\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 348 | } |
fxanhkhoa | 22:65f63e2d06bd | 349 | break; |
fxanhkhoa | 22:65f63e2d06bd | 350 | case 3: |
fxanhkhoa | 22:65f63e2d06bd | 351 | pc.printf("%d",stt1); |
fxanhkhoa | 22:65f63e2d06bd | 352 | if (drum3_stt1 == 0) |
fxanhkhoa | 22:65f63e2d06bd | 353 | { |
fxanhkhoa | 22:65f63e2d06bd | 354 | pc.printf("drum 3_3\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 355 | drum3_stt1 = 1; |
fxanhkhoa | 22:65f63e2d06bd | 356 | hrService.updateHeartRate((uint8_t)3); |
fxanhkhoa | 22:65f63e2d06bd | 357 | } |
fxanhkhoa | 22:65f63e2d06bd | 358 | else if ((yaw > drum3_max[0]) && (pitch > drum3_max[1]) /*&& (roll > drum2_max[2])*/) { |
fxanhkhoa | 22:65f63e2d06bd | 359 | stt1 = 0 ; |
fxanhkhoa | 22:65f63e2d06bd | 360 | drum3_stt1 = 0; |
fxanhkhoa | 22:65f63e2d06bd | 361 | pc.printf("up\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 362 | } |
fxanhkhoa | 22:65f63e2d06bd | 363 | break; |
fxanhkhoa | 22:65f63e2d06bd | 364 | case 4: |
fxanhkhoa | 22:65f63e2d06bd | 365 | pc.printf("%d",stt1); |
fxanhkhoa | 22:65f63e2d06bd | 366 | if (drum4_stt1 == 0) |
fxanhkhoa | 22:65f63e2d06bd | 367 | { |
fxanhkhoa | 22:65f63e2d06bd | 368 | pc.printf("drum 4_4\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 369 | drum4_stt1 = 1; |
fxanhkhoa | 22:65f63e2d06bd | 370 | hrService.updateHeartRate((uint8_t)4); |
fxanhkhoa | 22:65f63e2d06bd | 371 | } |
fxanhkhoa | 22:65f63e2d06bd | 372 | else if ((yaw > drum4_max[0]) && (pitch > drum4_max[1]) /*&& (roll > drum2_max[2])*/) { |
fxanhkhoa | 22:65f63e2d06bd | 373 | stt1 = 0 ; |
fxanhkhoa | 22:65f63e2d06bd | 374 | drum4_stt1 = 0; |
fxanhkhoa | 22:65f63e2d06bd | 375 | pc.printf("up\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 376 | } |
fxanhkhoa | 22:65f63e2d06bd | 377 | break; |
fxanhkhoa | 22:65f63e2d06bd | 378 | case 5: |
fxanhkhoa | 22:65f63e2d06bd | 379 | pc.printf("%d",stt1); |
fxanhkhoa | 22:65f63e2d06bd | 380 | if (drum5_stt1 == 0) |
fxanhkhoa | 22:65f63e2d06bd | 381 | { |
fxanhkhoa | 22:65f63e2d06bd | 382 | pc.printf("drum 4_4\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 383 | drum5_stt1 = 1; |
fxanhkhoa | 22:65f63e2d06bd | 384 | hrService.updateHeartRate((uint8_t)5); |
fxanhkhoa | 22:65f63e2d06bd | 385 | } |
fxanhkhoa | 22:65f63e2d06bd | 386 | else if ((yaw > drum5_max[0]) && (pitch > drum5_max[1]) /*&& (roll > drum2_max[2])*/) { |
fxanhkhoa | 22:65f63e2d06bd | 387 | stt1 = 0 ; |
fxanhkhoa | 22:65f63e2d06bd | 388 | drum5_stt1 = 0; |
fxanhkhoa | 22:65f63e2d06bd | 389 | pc.printf("up\r\n"); |
fxanhkhoa | 22:65f63e2d06bd | 390 | } |
fxanhkhoa | 22:65f63e2d06bd | 391 | break; |
fxanhkhoa | 22:65f63e2d06bd | 392 | }; |
fxanhkhoa | 22:65f63e2d06bd | 393 | } |
fxanhkhoa | 22:65f63e2d06bd | 394 | } |
fxanhkhoa | 22:65f63e2d06bd | 395 | //} |
fxanhkhoa | 22:65f63e2d06bd | 396 | else { |
screamer | 0:eb7f02ad28a7 | 397 | ble.waitForEvent(); // low power wait for event |
screamer | 0:eb7f02ad28a7 | 398 | } |
screamer | 0:eb7f02ad28a7 | 399 | } |
screamer | 0:eb7f02ad28a7 | 400 | } |
apalmieri | 13:227a0149b677 | 401 | |
apalmieri | 13:227a0149b677 | 402 | int main(void) |
apalmieri | 13:227a0149b677 | 403 | { |
apalmieri | 13:227a0149b677 | 404 | Ticker ticker; |
fxanhkhoa | 22:65f63e2d06bd | 405 | ticker.attach(periodicCallback, 0.01); // blink LED every second |
fxanhkhoa | 22:65f63e2d06bd | 406 | mybutton.fall(get); |
fxanhkhoa | 22:65f63e2d06bd | 407 | |
apalmieri | 13:227a0149b677 | 408 | |
apalmieri | 13:227a0149b677 | 409 | BLE::Instance().init(bleInitComplete); |
apalmieri | 13:227a0149b677 | 410 | } |
apalmieri | 14:f715c13eb84f | 411 | |
fxanhkhoa | 22:65f63e2d06bd | 412 | void get() |
fxanhkhoa | 22:65f63e2d06bd | 413 | { |
fxanhkhoa | 22:65f63e2d06bd | 414 | j++; |
fxanhkhoa | 22:65f63e2d06bd | 415 | if (j == 1){ |
fxanhkhoa | 22:65f63e2d06bd | 416 | drum1_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 417 | drum1_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 418 | drum1_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 419 | |
fxanhkhoa | 22:65f63e2d06bd | 420 | drum1_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 421 | drum1_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 422 | drum1_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 423 | } |
fxanhkhoa | 22:65f63e2d06bd | 424 | else if (j == 2){ |
fxanhkhoa | 22:65f63e2d06bd | 425 | drum2_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 426 | drum2_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 427 | drum2_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 428 | |
fxanhkhoa | 22:65f63e2d06bd | 429 | drum2_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 430 | drum2_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 431 | drum2_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 432 | } |
fxanhkhoa | 22:65f63e2d06bd | 433 | else if (j == 3){ |
fxanhkhoa | 22:65f63e2d06bd | 434 | drum3_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 435 | drum3_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 436 | drum3_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 437 | |
fxanhkhoa | 22:65f63e2d06bd | 438 | drum3_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 439 | drum3_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 440 | drum3_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 441 | } |
fxanhkhoa | 22:65f63e2d06bd | 442 | else if (j == 4){ |
fxanhkhoa | 22:65f63e2d06bd | 443 | drum4_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 444 | drum4_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 445 | drum4_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 446 | |
fxanhkhoa | 22:65f63e2d06bd | 447 | drum4_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 448 | drum4_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 449 | drum4_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 450 | } |
fxanhkhoa | 22:65f63e2d06bd | 451 | else if (j == 5){ |
fxanhkhoa | 22:65f63e2d06bd | 452 | drum5_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 453 | drum5_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 454 | drum5_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 455 | |
fxanhkhoa | 22:65f63e2d06bd | 456 | drum5_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 457 | drum5_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 458 | drum5_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 459 | } |
fxanhkhoa | 22:65f63e2d06bd | 460 | else if (j == 6){ |
fxanhkhoa | 22:65f63e2d06bd | 461 | drum6_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 462 | drum6_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 463 | drum6_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 464 | |
fxanhkhoa | 22:65f63e2d06bd | 465 | drum6_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 466 | drum6_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 467 | drum6_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 468 | } |
fxanhkhoa | 22:65f63e2d06bd | 469 | else if (j == 7){ |
fxanhkhoa | 22:65f63e2d06bd | 470 | drum7_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 471 | drum7_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 472 | drum7_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 473 | |
fxanhkhoa | 22:65f63e2d06bd | 474 | drum7_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 475 | drum7_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 476 | drum7_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 477 | } |
fxanhkhoa | 22:65f63e2d06bd | 478 | else if (j == 8){ |
fxanhkhoa | 22:65f63e2d06bd | 479 | drum8_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 480 | drum8_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 481 | drum8_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 482 | |
fxanhkhoa | 22:65f63e2d06bd | 483 | drum8_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 484 | drum8_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 485 | drum8_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 486 | } |
fxanhkhoa | 22:65f63e2d06bd | 487 | else if (j == 9){ |
fxanhkhoa | 22:65f63e2d06bd | 488 | drum9_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 489 | drum9_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 490 | drum9_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 491 | |
fxanhkhoa | 22:65f63e2d06bd | 492 | drum9_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 493 | drum9_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 494 | drum9_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 495 | } |
fxanhkhoa | 22:65f63e2d06bd | 496 | else if (j == 10){ |
fxanhkhoa | 22:65f63e2d06bd | 497 | drum10_min[0] = yaw - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 498 | drum10_min[1] = pitch - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 499 | drum10_min[2] = roll - ratio; |
fxanhkhoa | 22:65f63e2d06bd | 500 | |
fxanhkhoa | 22:65f63e2d06bd | 501 | drum10_max[0] = yaw + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 502 | drum10_max[1] = pitch + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 503 | drum10_max[2] = roll + ratio; |
fxanhkhoa | 22:65f63e2d06bd | 504 | } |
fxanhkhoa | 22:65f63e2d06bd | 505 | if (j == 10) j = 0; |
fxanhkhoa | 22:65f63e2d06bd | 506 | pc.printf("x,y,z: %f %f %f \r\n",yaw,pitch,roll); |
fxanhkhoa | 22:65f63e2d06bd | 507 | } |
fxanhkhoa | 22:65f63e2d06bd | 508 |