Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
RTOS-Threads/src/Task3.cpp@45:3847d7bf8b2c, 2014-05-17 (annotated)
- Committer:
- pHysiX
- Date:
- Sat May 17 09:12:20 2014 +0000
- Revision:
- 45:3847d7bf8b2c
- Parent:
- 44:4be5c01c6de2
- Child:
- 47:89a7077a70d3
- Child:
- 48:9dbdc4144f00
Retuned Roll PID to counter CM
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| pHysiX | 22:ef8aa9728013 | 1 | /* File: Task3.cpp |
| pHysiX | 22:ef8aa9728013 | 2 | * Author: Trung Tin Ian HUA |
| pHysiX | 22:ef8aa9728013 | 3 | * Date: May 2014 |
| pHysiX | 36:d95e3d6f2fc4 | 4 | * Purpose: Thread3: RC & BT Command |
| pHysiX | 22:ef8aa9728013 | 5 | * Settings: 50Hz |
| pHysiX | 24:54a8cdf17378 | 6 | */ |
| pHysiX | 1:43f8ac7ca6d7 | 7 | #include "tasks.h" |
| pHysiX | 1:43f8ac7ca6d7 | 8 | #include "setup.h" |
| pHysiX | 4:01921a136f58 | 9 | #include "PwmIn.h" |
| pHysiX | 1:43f8ac7ca6d7 | 10 | |
| pHysiX | 30:d9b988f8d84f | 11 | PwmIn rxModule[] = {p14, p15, p16, p17, p18}; |
| pHysiX | 30:d9b988f8d84f | 12 | AnalogIn voltageSense(p20); |
| pHysiX | 21:b642c18eccd1 | 13 | |
| pHysiX | 3:605fbcb54e75 | 14 | /* [YAW PITCH ROLL THROTTLE AUX] */ |
| pHysiX | 44:4be5c01c6de2 | 15 | volatile int RCCommand[5] = {0, 0, 0, 0, 0}; |
| pHysiX | 22:ef8aa9728013 | 16 | /* Decoded input: [YAW PITCH ROLL] */ |
| pHysiX | 44:4be5c01c6de2 | 17 | volatile int inputYPR[3]; |
| pHysiX | 44:4be5c01c6de2 | 18 | volatile float ypr_offset[3]; |
| pHysiX | 30:d9b988f8d84f | 19 | |
| pHysiX | 30:d9b988f8d84f | 20 | float vIn = 0.0; |
| pHysiX | 1:43f8ac7ca6d7 | 21 | |
| pHysiX | 27:18b6580eb0b1 | 22 | FLIGHT_MODE mode = ATTITUDE; |
| pHysiX | 24:54a8cdf17378 | 23 | |
| pHysiX | 38:ef65533cca32 | 24 | int voltageUpdate = 0; |
| pHysiX | 38:ef65533cca32 | 25 | |
| pHysiX | 34:228d87c45151 | 26 | |
| pHysiX | 34:228d87c45151 | 27 | |
| pHysiX | 34:228d87c45151 | 28 | |
| pHysiX | 34:228d87c45151 | 29 | // ====================================== |
| pHysiX | 34:228d87c45151 | 30 | // === BT & RC COMMAND, AND TELEMETRY === |
| pHysiX | 34:228d87c45151 | 31 | // ====================================== |
| pHysiX | 31:3dde2201e54d | 32 | //Timer |
| pHysiX | 1:43f8ac7ca6d7 | 33 | void Task3(void const *argument) |
| pHysiX | 1:43f8ac7ca6d7 | 34 | { |
| pHysiX | 31:3dde2201e54d | 35 | //Timer |
| pHysiX | 1:43f8ac7ca6d7 | 36 | if (BT.readable()) { |
| pHysiX | 1:43f8ac7ca6d7 | 37 | char data = BT.getc(); |
| pHysiX | 32:7a9be7761c46 | 38 | uartDecoder(data); |
| pHysiX | 32:7a9be7761c46 | 39 | } |
| pHysiX | 20:b193a50a2ba3 | 40 | |
| pHysiX | 32:7a9be7761c46 | 41 | /* Receiver decoder: */ |
| pHysiX | 32:7a9be7761c46 | 42 | RCCommand[2] = rxModule[0].pulsewidth(); // Roll |
| pHysiX | 32:7a9be7761c46 | 43 | RCCommand[1] = rxModule[1].pulsewidth(); // Pitch |
| pHysiX | 32:7a9be7761c46 | 44 | RCCommand[3] = rxModule[2].pulsewidth(); // Throttle |
| pHysiX | 32:7a9be7761c46 | 45 | RCCommand[0] = rxModule[3].pulsewidth(); // Yaw |
| pHysiX | 32:7a9be7761c46 | 46 | RCCommand[4] = rxModule[4].pulsewidth(); // AUX |
| pHysiX | 21:b642c18eccd1 | 47 | |
| pHysiX | 45:3847d7bf8b2c | 48 | /* Lost signal (throttle): */ |
| pHysiX | 45:3847d7bf8b2c | 49 | if (rxModule[2].stallTimer.read_us() > 18820) { |
| pHysiX | 45:3847d7bf8b2c | 50 | for (int i = 0; i < 5; i++) |
| pHysiX | 45:3847d7bf8b2c | 51 | RCCommand[i] = 1000; |
| pHysiX | 45:3847d7bf8b2c | 52 | } else { |
| pHysiX | 45:3847d7bf8b2c | 53 | for (int i = 0; i < 5; i++) |
| pHysiX | 45:3847d7bf8b2c | 54 | RCCommand[i] = constrainRCCommand(RCCommand[i]); |
| pHysiX | 45:3847d7bf8b2c | 55 | } |
| pHysiX | 45:3847d7bf8b2c | 56 | |
| pHysiX | 32:7a9be7761c46 | 57 | /* Mode switching: */ |
| pHysiX | 32:7a9be7761c46 | 58 | if (RCCommand[4] > 1500) { |
| pHysiX | 32:7a9be7761c46 | 59 | if (mode == RATE) { |
| pHysiX | 32:7a9be7761c46 | 60 | } else if (mode == ATTITUDE) { |
| pHysiX | 32:7a9be7761c46 | 61 | mode = RATE; |
| pHysiX | 45:3847d7bf8b2c | 62 | yawPIDrate.reset(); |
| pHysiX | 32:7a9be7761c46 | 63 | //pitchPIDrate.setTunings(KP_PITCH_RATE, TI_PITCH_RATE, 0.0); |
| pHysiX | 32:7a9be7761c46 | 64 | //rollPIDrate.setTunings(KP_ROLL_RATE, TI_ROLL_RATE, 0.0); |
| pHysiX | 32:7a9be7761c46 | 65 | } else {} |
| pHysiX | 32:7a9be7761c46 | 66 | } else { |
| pHysiX | 32:7a9be7761c46 | 67 | if (mode == ATTITUDE) { |
| pHysiX | 32:7a9be7761c46 | 68 | } else if (mode == RATE) { |
| pHysiX | 32:7a9be7761c46 | 69 | mode = ATTITUDE; |
| pHysiX | 45:3847d7bf8b2c | 70 | yawPIDrate.reset(); |
| pHysiX | 32:7a9be7761c46 | 71 | //pitchPIDrate.setTunings(KP_PITCH_RATE, TI_PITCH_RATE, 0.0); |
| pHysiX | 32:7a9be7761c46 | 72 | //rollPIDrate.setTunings(KP_ROLL_RATE, TI_PITCH_RATE, 0.0); |
| pHysiX | 32:7a9be7761c46 | 73 | } |
| pHysiX | 32:7a9be7761c46 | 74 | } |
| pHysiX | 21:b642c18eccd1 | 75 | |
| pHysiX | 32:7a9be7761c46 | 76 | /* Command decoder: */ |
| pHysiX | 32:7a9be7761c46 | 77 | inputYPR[0] = (RCCommand[0]-1500)*9/100*STICK_GAIN_YAW; |
| pHysiX | 32:7a9be7761c46 | 78 | switch (mode) { |
| pHysiX | 32:7a9be7761c46 | 79 | case RATE: |
| pHysiX | 45:3847d7bf8b2c | 80 | inputYPR[1] = (RCCommand[1]-1500)*-1*9/100*STICK_GAIN; |
| pHysiX | 45:3847d7bf8b2c | 81 | inputYPR[2] = (RCCommand[2]-1500)*9/100*STICK_GAIN; |
| pHysiX | 32:7a9be7761c46 | 82 | break; |
| pHysiX | 32:7a9be7761c46 | 83 | case ATTITUDE: |
| pHysiX | 32:7a9be7761c46 | 84 | default: |
| pHysiX | 45:3847d7bf8b2c | 85 | inputYPR[1] = (RCCommand[1]-1500)*-1*9/100*STICK_GAIN; |
| pHysiX | 45:3847d7bf8b2c | 86 | inputYPR[2] = (RCCommand[2]-1500)*-1*9/100*STICK_GAIN; |
| pHysiX | 32:7a9be7761c46 | 87 | break; |
| pHysiX | 32:7a9be7761c46 | 88 | } |
| pHysiX | 21:b642c18eccd1 | 89 | |
| pHysiX | 45:3847d7bf8b2c | 90 | for (int i = 0; i < 3; i++) |
| pHysiX | 45:3847d7bf8b2c | 91 | deadbandInputYPR(inputYPR[i]); |
| pHysiX | 45:3847d7bf8b2c | 92 | |
| pHysiX | 45:3847d7bf8b2c | 93 | inputYPR[0] = constrainInputY(inputYPR[0]); |
| pHysiX | 38:ef65533cca32 | 94 | |
| pHysiX | 45:3847d7bf8b2c | 95 | for (int i = 1; i < 3; i++) |
| pHysiX | 45:3847d7bf8b2c | 96 | inputYPR[i] = constrainInputPR(inputYPR[i]); |
| pHysiX | 37:29feef05d848 | 97 | |
| pHysiX | 45:3847d7bf8b2c | 98 | |
| pHysiX | 45:3847d7bf8b2c | 99 | /* Telemetry: */ |
| pHysiX | 38:ef65533cca32 | 100 | if (voltageUpdate > 3) { |
| pHysiX | 38:ef65533cca32 | 101 | if (box_demo) { |
| pHysiX | 38:ef65533cca32 | 102 | BT.printf("\nV%2.2f\n", voltageSense*VOLTAGE_SCALE); |
| pHysiX | 38:ef65533cca32 | 103 | } |
| pHysiX | 38:ef65533cca32 | 104 | voltageUpdate = 0; |
| pHysiX | 38:ef65533cca32 | 105 | } else { |
| pHysiX | 38:ef65533cca32 | 106 | voltageUpdate++; |
| pHysiX | 37:29feef05d848 | 107 | } |
| pHysiX | 32:7a9be7761c46 | 108 | //Timer |
| pHysiX | 32:7a9be7761c46 | 109 | } |
| pHysiX | 21:b642c18eccd1 | 110 | |
| pHysiX | 34:228d87c45151 | 111 | |
| pHysiX | 34:228d87c45151 | 112 | |
| pHysiX | 34:228d87c45151 | 113 | |
| pHysiX | 34:228d87c45151 | 114 | // ************************ |
| pHysiX | 34:228d87c45151 | 115 | // *** Helper functions *** |
| pHysiX | 34:228d87c45151 | 116 | // ************************ |
| pHysiX | 32:7a9be7761c46 | 117 | int constrainRCCommand(int input) |
| pHysiX | 32:7a9be7761c46 | 118 | { |
| pHysiX | 32:7a9be7761c46 | 119 | if (input < 1000) |
| pHysiX | 32:7a9be7761c46 | 120 | return 1000; |
| pHysiX | 32:7a9be7761c46 | 121 | else if (input > 2000) |
| pHysiX | 32:7a9be7761c46 | 122 | return 2000; |
| pHysiX | 32:7a9be7761c46 | 123 | else |
| pHysiX | 32:7a9be7761c46 | 124 | return input; |
| pHysiX | 32:7a9be7761c46 | 125 | } |
| pHysiX | 21:b642c18eccd1 | 126 | |
| pHysiX | 32:7a9be7761c46 | 127 | int deadbandInputYPR(int input) |
| pHysiX | 32:7a9be7761c46 | 128 | { |
| pHysiX | 45:3847d7bf8b2c | 129 | if (input > -4 && input < 4) // if (input > -2 && input < 4) |
| pHysiX | 32:7a9be7761c46 | 130 | return 0; |
| pHysiX | 32:7a9be7761c46 | 131 | else |
| pHysiX | 32:7a9be7761c46 | 132 | return input; |
| pHysiX | 32:7a9be7761c46 | 133 | } |
| pHysiX | 32:7a9be7761c46 | 134 | |
| pHysiX | 45:3847d7bf8b2c | 135 | int constrainInputY(int input) |
| pHysiX | 38:ef65533cca32 | 136 | { |
| pHysiX | 45:3847d7bf8b2c | 137 | if (input < -720) |
| pHysiX | 45:3847d7bf8b2c | 138 | return -720; |
| pHysiX | 45:3847d7bf8b2c | 139 | else if (input > 720) |
| pHysiX | 45:3847d7bf8b2c | 140 | return 720; |
| pHysiX | 45:3847d7bf8b2c | 141 | else |
| pHysiX | 45:3847d7bf8b2c | 142 | return input; |
| pHysiX | 45:3847d7bf8b2c | 143 | } |
| pHysiX | 45:3847d7bf8b2c | 144 | |
| pHysiX | 45:3847d7bf8b2c | 145 | int constrainInputPR(int input) |
| pHysiX | 45:3847d7bf8b2c | 146 | { |
| pHysiX | 45:3847d7bf8b2c | 147 | if (input < -45) |
| pHysiX | 45:3847d7bf8b2c | 148 | return -45; |
| pHysiX | 45:3847d7bf8b2c | 149 | else if (input > 45) |
| pHysiX | 45:3847d7bf8b2c | 150 | return 45; |
| pHysiX | 38:ef65533cca32 | 151 | else |
| pHysiX | 38:ef65533cca32 | 152 | return input; |
| pHysiX | 38:ef65533cca32 | 153 | } |
| pHysiX | 38:ef65533cca32 | 154 | |
| pHysiX | 32:7a9be7761c46 | 155 | void uartDecoder(char input) |
| pHysiX | 32:7a9be7761c46 | 156 | { |
| pHysiX | 32:7a9be7761c46 | 157 | switch (input) { |
| pHysiX | 32:7a9be7761c46 | 158 | case '9': |
| pHysiX | 32:7a9be7761c46 | 159 | case '0': |
| pHysiX | 32:7a9be7761c46 | 160 | armed = false; |
| pHysiX | 32:7a9be7761c46 | 161 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 162 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 163 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 164 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 165 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 166 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 167 | adjust_check = false; |
| pHysiX | 21:b642c18eccd1 | 168 | |
| pHysiX | 39:02782ad251db | 169 | pitchPIDattitude.reset(); |
| pHysiX | 39:02782ad251db | 170 | rollPIDattitude.reset(); |
| pHysiX | 32:7a9be7761c46 | 171 | yawPIDrate.reset(); |
| pHysiX | 32:7a9be7761c46 | 172 | pitchPIDrate.reset(); |
| pHysiX | 32:7a9be7761c46 | 173 | rollPIDrate.reset(); |
| pHysiX | 32:7a9be7761c46 | 174 | |
| pHysiX | 32:7a9be7761c46 | 175 | armed? BT.printf("ARMED\n") : BT.printf("DISARMED\n"); |
| pHysiX | 32:7a9be7761c46 | 176 | break; |
| pHysiX | 32:7a9be7761c46 | 177 | |
| pHysiX | 32:7a9be7761c46 | 178 | case 'D': |
| pHysiX | 32:7a9be7761c46 | 179 | case 'd': |
| pHysiX | 32:7a9be7761c46 | 180 | armed = false; |
| pHysiX | 32:7a9be7761c46 | 181 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 182 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 183 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 184 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 185 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 186 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 187 | adjust_check = false; |
| pHysiX | 21:b642c18eccd1 | 188 | |
| pHysiX | 32:7a9be7761c46 | 189 | ypr_offset[0] = ypr[0]; |
| pHysiX | 32:7a9be7761c46 | 190 | ypr_offset[1] = ypr[1]; |
| pHysiX | 32:7a9be7761c46 | 191 | ypr_offset[2] = ypr[2]; |
| pHysiX | 32:7a9be7761c46 | 192 | |
| pHysiX | 39:02782ad251db | 193 | pitchPIDattitude.reset(); |
| pHysiX | 39:02782ad251db | 194 | rollPIDattitude.reset(); |
| pHysiX | 32:7a9be7761c46 | 195 | yawPIDrate.reset(); |
| pHysiX | 32:7a9be7761c46 | 196 | pitchPIDrate.reset(); |
| pHysiX | 32:7a9be7761c46 | 197 | rollPIDrate.reset(); |
| pHysiX | 21:b642c18eccd1 | 198 | |
| pHysiX | 32:7a9be7761c46 | 199 | armed? BT.printf("DISARM FAIL\n") : BT.printf("DISARMED\n"); |
| pHysiX | 32:7a9be7761c46 | 200 | break; |
| pHysiX | 32:7a9be7761c46 | 201 | |
| pHysiX | 32:7a9be7761c46 | 202 | case 'B': |
| pHysiX | 32:7a9be7761c46 | 203 | box_demo = true; |
| pHysiX | 32:7a9be7761c46 | 204 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 205 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 206 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 207 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 208 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 209 | adjust_check = false; |
| pHysiX | 32:7a9be7761c46 | 210 | break; |
| pHysiX | 21:b642c18eccd1 | 211 | |
| pHysiX | 32:7a9be7761c46 | 212 | case 'Z': |
| pHysiX | 32:7a9be7761c46 | 213 | ypr_offset[0] = ypr[0]; |
| pHysiX | 32:7a9be7761c46 | 214 | ypr_offset[1] = ypr[1]; |
| pHysiX | 32:7a9be7761c46 | 215 | ypr_offset[2] = ypr[2]; |
| pHysiX | 32:7a9be7761c46 | 216 | break; |
| pHysiX | 32:7a9be7761c46 | 217 | |
| pHysiX | 32:7a9be7761c46 | 218 | case 'R': |
| pHysiX | 32:7a9be7761c46 | 219 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 220 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 221 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 222 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 223 | command_check = true; |
| pHysiX | 32:7a9be7761c46 | 224 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 225 | adjust_check = false; |
| pHysiX | 32:7a9be7761c46 | 226 | break; |
| pHysiX | 32:7a9be7761c46 | 227 | |
| pHysiX | 32:7a9be7761c46 | 228 | case 'r': |
| pHysiX | 32:7a9be7761c46 | 229 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 230 | rc_out = true; |
| pHysiX | 32:7a9be7761c46 | 231 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 232 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 233 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 234 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 235 | adjust_check = false; |
| pHysiX | 32:7a9be7761c46 | 236 | break; |
| pHysiX | 20:b193a50a2ba3 | 237 | |
| pHysiX | 32:7a9be7761c46 | 238 | case 'G': |
| pHysiX | 32:7a9be7761c46 | 239 | case 'g': |
| pHysiX | 32:7a9be7761c46 | 240 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 241 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 242 | gyro_out = true; |
| pHysiX | 32:7a9be7761c46 | 243 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 244 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 245 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 246 | adjust_check = false; |
| pHysiX | 32:7a9be7761c46 | 247 | break; |
| pHysiX | 32:7a9be7761c46 | 248 | |
| pHysiX | 32:7a9be7761c46 | 249 | case '1': |
| pHysiX | 32:7a9be7761c46 | 250 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 251 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 252 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 253 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 254 | KP_YAW_RATE += 0.1; |
| pHysiX | 32:7a9be7761c46 | 255 | yawPIDrate.setKP(KP_YAW_RATE); |
| pHysiX | 32:7a9be7761c46 | 256 | BT.printf("KP Y rate: %2.5f\n", KP_YAW_RATE); |
| pHysiX | 32:7a9be7761c46 | 257 | break; |
| pHysiX | 32:7a9be7761c46 | 258 | case 'Q': |
| pHysiX | 32:7a9be7761c46 | 259 | case 'q': |
| pHysiX | 32:7a9be7761c46 | 260 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 261 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 262 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 263 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 264 | KP_YAW_RATE -= 0.1; |
| pHysiX | 32:7a9be7761c46 | 265 | yawPIDrate.setKP(KP_YAW_RATE); |
| pHysiX | 32:7a9be7761c46 | 266 | BT.printf("KP Y rate: %2.5f\n", KP_YAW_RATE); |
| pHysiX | 32:7a9be7761c46 | 267 | break; |
| pHysiX | 21:b642c18eccd1 | 268 | |
| pHysiX | 32:7a9be7761c46 | 269 | case '2': |
| pHysiX | 32:7a9be7761c46 | 270 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 271 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 272 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 273 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 274 | KP_PITCH_RATE += 0.1; |
| pHysiX | 32:7a9be7761c46 | 275 | pitchPIDrate.setKP(KP_PITCH_RATE); |
| pHysiX | 32:7a9be7761c46 | 276 | BT.printf("KP P rate: %2.5f\n", KP_PITCH_RATE); |
| pHysiX | 32:7a9be7761c46 | 277 | break; |
| pHysiX | 32:7a9be7761c46 | 278 | case 'W': |
| pHysiX | 32:7a9be7761c46 | 279 | case 'w': |
| pHysiX | 32:7a9be7761c46 | 280 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 281 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 282 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 283 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 284 | KP_PITCH_RATE -= 0.1; |
| pHysiX | 32:7a9be7761c46 | 285 | pitchPIDrate.setKP(KP_PITCH_RATE); |
| pHysiX | 32:7a9be7761c46 | 286 | BT.printf("KP P rate: %3.4f\n", KP_PITCH_RATE); |
| pHysiX | 32:7a9be7761c46 | 287 | break; |
| pHysiX | 32:7a9be7761c46 | 288 | |
| pHysiX | 32:7a9be7761c46 | 289 | case '3': |
| pHysiX | 32:7a9be7761c46 | 290 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 291 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 292 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 293 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 294 | KP_ROLL_RATE += 0.1; |
| pHysiX | 32:7a9be7761c46 | 295 | rollPIDrate.setKP(KP_ROLL_RATE); |
| pHysiX | 32:7a9be7761c46 | 296 | BT.printf("KP R rate: %3.4f\n", KP_ROLL_RATE); |
| pHysiX | 32:7a9be7761c46 | 297 | break; |
| pHysiX | 32:7a9be7761c46 | 298 | case 'E': |
| pHysiX | 32:7a9be7761c46 | 299 | case 'e': |
| pHysiX | 32:7a9be7761c46 | 300 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 301 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 302 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 303 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 304 | KP_ROLL_RATE -= 0.1; |
| pHysiX | 32:7a9be7761c46 | 305 | rollPIDrate.setKP(KP_ROLL_RATE); |
| pHysiX | 32:7a9be7761c46 | 306 | BT.printf("KP R rate: %2.5f\n", KP_ROLL_RATE); |
| pHysiX | 32:7a9be7761c46 | 307 | break; |
| pHysiX | 24:54a8cdf17378 | 308 | |
| pHysiX | 32:7a9be7761c46 | 309 | case '6': |
| pHysiX | 32:7a9be7761c46 | 310 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 311 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 312 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 313 | ESC_check = false; |
| pHysiX | 39:02782ad251db | 314 | KP_PITCH_ATTITUDE += 0.1; |
| pHysiX | 39:02782ad251db | 315 | pitchPIDattitude.setKP(KP_PITCH_ATTITUDE); |
| pHysiX | 39:02782ad251db | 316 | BT.printf("KP P attitude: %2.5f\n", KP_PITCH_ATTITUDE); |
| pHysiX | 32:7a9be7761c46 | 317 | break; |
| pHysiX | 32:7a9be7761c46 | 318 | case 'Y': |
| pHysiX | 32:7a9be7761c46 | 319 | case 'y': |
| pHysiX | 32:7a9be7761c46 | 320 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 321 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 322 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 323 | ESC_check = false; |
| pHysiX | 39:02782ad251db | 324 | KP_PITCH_ATTITUDE -= 0.1; |
| pHysiX | 39:02782ad251db | 325 | pitchPIDattitude.setKP(KP_PITCH_ATTITUDE); |
| pHysiX | 39:02782ad251db | 326 | BT.printf("KP P attitude: %2.5f\n", KP_PITCH_ATTITUDE); |
| pHysiX | 32:7a9be7761c46 | 327 | break; |
| pHysiX | 24:54a8cdf17378 | 328 | |
| pHysiX | 32:7a9be7761c46 | 329 | case '7': |
| pHysiX | 32:7a9be7761c46 | 330 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 331 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 332 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 333 | ESC_check = false; |
| pHysiX | 39:02782ad251db | 334 | KP_ROLL_ATTITUDE += 0.1; |
| pHysiX | 39:02782ad251db | 335 | rollPIDattitude.setKP(KP_ROLL_ATTITUDE); |
| pHysiX | 39:02782ad251db | 336 | BT.printf("KP R attitude: %2.5f\n", KP_ROLL_ATTITUDE); |
| pHysiX | 32:7a9be7761c46 | 337 | break; |
| pHysiX | 32:7a9be7761c46 | 338 | case 'U': |
| pHysiX | 32:7a9be7761c46 | 339 | case 'u': |
| pHysiX | 32:7a9be7761c46 | 340 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 341 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 342 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 343 | ESC_check = false; |
| pHysiX | 39:02782ad251db | 344 | KP_ROLL_ATTITUDE -= 0.1; |
| pHysiX | 39:02782ad251db | 345 | rollPIDattitude.setKP(KP_ROLL_ATTITUDE); |
| pHysiX | 39:02782ad251db | 346 | BT.printf("KP R attitude: %2.5f\n", KP_ROLL_ATTITUDE); |
| pHysiX | 32:7a9be7761c46 | 347 | break; |
| pHysiX | 24:54a8cdf17378 | 348 | |
| pHysiX | 32:7a9be7761c46 | 349 | case 'A': |
| pHysiX | 32:7a9be7761c46 | 350 | if (!armed) { |
| pHysiX | 32:7a9be7761c46 | 351 | if (RCCommand[3] < 1001) { |
| pHysiX | 39:02782ad251db | 352 | pitchPIDattitude.reset(); |
| pHysiX | 39:02782ad251db | 353 | rollPIDattitude.reset(); |
| pHysiX | 21:b642c18eccd1 | 354 | yawPIDrate.reset(); |
| pHysiX | 21:b642c18eccd1 | 355 | pitchPIDrate.reset(); |
| pHysiX | 21:b642c18eccd1 | 356 | rollPIDrate.reset(); |
| pHysiX | 21:b642c18eccd1 | 357 | |
| pHysiX | 21:b642c18eccd1 | 358 | ypr_offset[0] = ypr[0]; |
| pHysiX | 21:b642c18eccd1 | 359 | ypr_offset[1] = ypr[1]; |
| pHysiX | 21:b642c18eccd1 | 360 | ypr_offset[2] = ypr[2]; |
| pHysiX | 21:b642c18eccd1 | 361 | |
| pHysiX | 21:b642c18eccd1 | 362 | armed = true; |
| pHysiX | 21:b642c18eccd1 | 363 | } else { |
| pHysiX | 32:7a9be7761c46 | 364 | BT.printf("Check Throttle\n"); |
| pHysiX | 21:b642c18eccd1 | 365 | } |
| pHysiX | 32:7a9be7761c46 | 366 | } else { |
| pHysiX | 32:7a9be7761c46 | 367 | BT.printf("ALREADY ARMED!!!\n"); |
| pHysiX | 32:7a9be7761c46 | 368 | } |
| pHysiX | 32:7a9be7761c46 | 369 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 370 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 371 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 372 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 373 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 374 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 375 | adjust_check = false; |
| pHysiX | 32:7a9be7761c46 | 376 | armed? BT.printf("ARMED\n"): BT.printf("ARM FAIL\n"); |
| pHysiX | 32:7a9be7761c46 | 377 | break; |
| pHysiX | 32:7a9be7761c46 | 378 | case 'a': |
| pHysiX | 32:7a9be7761c46 | 379 | if (armed) { |
| pHysiX | 32:7a9be7761c46 | 380 | armed = false; |
| pHysiX | 32:7a9be7761c46 | 381 | BT.printf("DISARMED\n"); |
| pHysiX | 32:7a9be7761c46 | 382 | ypr_offset[0] = ypr[0]; |
| pHysiX | 32:7a9be7761c46 | 383 | ypr_offset[1] = ypr[1]; |
| pHysiX | 32:7a9be7761c46 | 384 | ypr_offset[2] = ypr[2]; |
| pHysiX | 39:02782ad251db | 385 | pitchPIDattitude.reset(); |
| pHysiX | 39:02782ad251db | 386 | rollPIDattitude.reset(); |
| pHysiX | 32:7a9be7761c46 | 387 | } else { |
| pHysiX | 32:7a9be7761c46 | 388 | BT.printf("ALREADY DISARMED!!!\n"); |
| pHysiX | 32:7a9be7761c46 | 389 | } |
| pHysiX | 32:7a9be7761c46 | 390 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 391 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 392 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 393 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 394 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 395 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 396 | adjust_check = false; |
| pHysiX | 21:b642c18eccd1 | 397 | |
| pHysiX | 32:7a9be7761c46 | 398 | yawPIDrate.reset(); |
| pHysiX | 32:7a9be7761c46 | 399 | pitchPIDrate.reset(); |
| pHysiX | 32:7a9be7761c46 | 400 | rollPIDrate.reset(); |
| pHysiX | 21:b642c18eccd1 | 401 | |
| pHysiX | 32:7a9be7761c46 | 402 | armed? BT.printf("DISARM FAIL\n") : BT.printf("DISARMED\n"); |
| pHysiX | 32:7a9be7761c46 | 403 | break; |
| pHysiX | 21:b642c18eccd1 | 404 | |
| pHysiX | 32:7a9be7761c46 | 405 | case 'P': |
| pHysiX | 32:7a9be7761c46 | 406 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 407 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 408 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 409 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 410 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 411 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 412 | adjust_check = true; |
| pHysiX | 32:7a9be7761c46 | 413 | break; |
| pHysiX | 21:b642c18eccd1 | 414 | |
| pHysiX | 32:7a9be7761c46 | 415 | case 'p': |
| pHysiX | 32:7a9be7761c46 | 416 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 417 | rc_out = false; |
| pHysiX | 32:7a9be7761c46 | 418 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 419 | ESC_check = true; |
| pHysiX | 32:7a9be7761c46 | 420 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 421 | calibration_mode = false; |
| pHysiX | 32:7a9be7761c46 | 422 | adjust_check = false; |
| pHysiX | 32:7a9be7761c46 | 423 | break; |
| pHysiX | 25:a7cfe421cb4a | 424 | |
| pHysiX | 32:7a9be7761c46 | 425 | case 'C': |
| pHysiX | 32:7a9be7761c46 | 426 | case 'c': |
| pHysiX | 32:7a9be7761c46 | 427 | box_demo = false; |
| pHysiX | 32:7a9be7761c46 | 428 | rc_out = true; |
| pHysiX | 32:7a9be7761c46 | 429 | gyro_out = false; |
| pHysiX | 32:7a9be7761c46 | 430 | ESC_check = false; |
| pHysiX | 32:7a9be7761c46 | 431 | calibration_mode = true; |
| pHysiX | 32:7a9be7761c46 | 432 | command_check = false; |
| pHysiX | 32:7a9be7761c46 | 433 | adjust_check = false; |
| pHysiX | 12:953d25061417 | 434 | |
| pHysiX | 32:7a9be7761c46 | 435 | BT.printf("Calibration mode...\n"); |
| pHysiX | 32:7a9be7761c46 | 436 | armed? BT.printf("ARMED\n") : BT.printf("ARM FAILED\n"); |
| pHysiX | 32:7a9be7761c46 | 437 | break; |
| pHysiX | 3:605fbcb54e75 | 438 | |
| pHysiX | 32:7a9be7761c46 | 439 | case 'M': |
| pHysiX | 32:7a9be7761c46 | 440 | case 'm': |
| pHysiX | 32:7a9be7761c46 | 441 | switch (mode) { |
| pHysiX | 32:7a9be7761c46 | 442 | case RATE: |
| pHysiX | 32:7a9be7761c46 | 443 | BT.printf("RATE MODE\n"); |
| pHysiX | 32:7a9be7761c46 | 444 | break; |
| pHysiX | 32:7a9be7761c46 | 445 | case ATTITUDE: |
| pHysiX | 32:7a9be7761c46 | 446 | default: |
| pHysiX | 32:7a9be7761c46 | 447 | BT.printf("ATTITUDE MODE\n"); |
| pHysiX | 32:7a9be7761c46 | 448 | break; |
| pHysiX | 32:7a9be7761c46 | 449 | } |
| pHysiX | 32:7a9be7761c46 | 450 | break; |
| pHysiX | 24:54a8cdf17378 | 451 | |
| pHysiX | 25:a7cfe421cb4a | 452 | default: |
| pHysiX | 25:a7cfe421cb4a | 453 | break; |
| pHysiX | 25:a7cfe421cb4a | 454 | } |
| pHysiX | 1:43f8ac7ca6d7 | 455 | } |