Interface for DX6i RC Quadcopter controller
DX6iController.cpp@0:6374902c761b, 2015-03-30 (annotated)
- Committer:
- randrews33
- Date:
- Mon Mar 30 19:26:24 2015 +0000
- Revision:
- 0:6374902c761b
Initial commit - basic, but untested functionality
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
randrews33 | 0:6374902c761b | 1 | /** |
randrews33 | 0:6374902c761b | 2 | * Institution: Georgia Institute of Technology - ECE Department - Senior Design II |
randrews33 | 0:6374902c761b | 3 | * Team: AH3 |
randrews33 | 0:6374902c761b | 4 | * Created: 3/24/2015 |
randrews33 | 0:6374902c761b | 5 | * Last Edit: 3/26/2015 |
randrews33 | 0:6374902c761b | 6 | * By: Taylor Andrews, Luke Panayioto |
randrews33 | 0:6374902c761b | 7 | **/ |
randrews33 | 0:6374902c761b | 8 | |
randrews33 | 0:6374902c761b | 9 | #include "DX6iController.h" |
randrews33 | 0:6374902c761b | 10 | |
randrews33 | 0:6374902c761b | 11 | DX6iController::DX6iController(pwmPin) : _pwmPin(pwmPin) { |
randrews33 | 0:6374902c761b | 12 | pulseInterval = 0; |
randrews33 | 0:6374902c761b | 13 | nChannels = 9; |
randrews33 | 0:6374902c761b | 14 | |
randrews33 | 0:6374902c761b | 15 | Throttle_Uptime = 700; //1 700 / 1100 / 1500 // Throttle |
randrews33 | 0:6374902c761b | 16 | Roll_Uptime = 1100; //2 700 / 1100 / 1500 (R/L) // Roll |
randrews33 | 0:6374902c761b | 17 | Pitch_Uptime = 1100; //3 770 / 1170 / 1550 (B/F) // Pitch |
randrews33 | 0:6374902c761b | 18 | Yaw_Uptime = 1100; //4 700 / 1090 / 1500 (R/L) // Yaw |
randrews33 | 0:6374902c761b | 19 | Stabilize_Uptime = 1100; //5 LLLL / MMMM / 1500 (3,2,1) |
randrews33 | 0:6374902c761b | 20 | Enable_Uptime = 1500; //6 700 / ---- / 1500 (Off/On) Note: Bind I Button |
randrews33 | 0:6374902c761b | 21 | Extra_Uptime = 1100; //7 LLLL / 1100 / HHHH // IDK |
randrews33 | 0:6374902c761b | 22 | Extra2_Uptime = 1100; //8 LLLL / 1100 / HHHH // IDK |
randrews33 | 0:6374902c761b | 23 | Remainder_Uptime = 22000 - ((pulseInterval * nChannels) + Throttle_Uptime + Roll_Uptime + Pitch_Uptime + Yaw_Uptime + Enable_Uptime + Stabilize_Uptime + Extra_Uptime + Extra2_Uptime); |
randrews33 | 0:6374902c761b | 24 | |
randrews33 | 0:6374902c761b | 25 | mThrottleTrim = 0; |
randrews33 | 0:6374902c761b | 26 | mRollTrim = 0; |
randrews33 | 0:6374902c761b | 27 | mPitchTrim = 0; |
randrews33 | 0:6374902c761b | 28 | mYawTrim = 0; |
randrews33 | 0:6374902c761b | 29 | } |
randrews33 | 0:6374902c761b | 30 | |
randrews33 | 0:6374902c761b | 31 | void DX6iController::generateSignal(int externalDelay) { |
randrews33 | 0:6374902c761b | 32 | //Big pulse |
randrews33 | 0:6374902c761b | 33 | // long remainder uptime (0) |
randrews33 | 0:6374902c761b | 34 | _pwmPin = 1; //Soft pwm |
randrews33 | 0:6374902c761b | 35 | wait_us(Remainder_Uptime - externalDelay); |
randrews33 | 0:6374902c761b | 36 | _pwmPin = 0; |
randrews33 | 0:6374902c761b | 37 | wait_us(pulseInterval); |
randrews33 | 0:6374902c761b | 38 | |
randrews33 | 0:6374902c761b | 39 | // Throttle pulse (1) |
randrews33 | 0:6374902c761b | 40 | _pwmPin = 1; |
randrews33 | 0:6374902c761b | 41 | wait_us(Throttle_Uptime + mThrottleTrim); |
randrews33 | 0:6374902c761b | 42 | _pwmPin = 0; |
randrews33 | 0:6374902c761b | 43 | wait_us(pulseInterval); |
randrews33 | 0:6374902c761b | 44 | |
randrews33 | 0:6374902c761b | 45 | // Roll pulse (2) |
randrews33 | 0:6374902c761b | 46 | _pwmPin = 1; |
randrews33 | 0:6374902c761b | 47 | wait_us(Roll_Uptime + mRollTrim); |
randrews33 | 0:6374902c761b | 48 | _pwmPin = 0; |
randrews33 | 0:6374902c761b | 49 | wait_us(pulseIntervalDelay); |
randrews33 | 0:6374902c761b | 50 | |
randrews33 | 0:6374902c761b | 51 | // Pitch pulse (3) |
randrews33 | 0:6374902c761b | 52 | _pwmPin = 1; |
randrews33 | 0:6374902c761b | 53 | wait_us(Pitch_Uptime + mPitchTrim); |
randrews33 | 0:6374902c761b | 54 | _pwmPin = 0; |
randrews33 | 0:6374902c761b | 55 | wait_us(pulseIntervalDelay); |
randrews33 | 0:6374902c761b | 56 | |
randrews33 | 0:6374902c761b | 57 | // Yaw pulse (4) |
randrews33 | 0:6374902c761b | 58 | _pwmPin = 1; |
randrews33 | 0:6374902c761b | 59 | wait_us(Yaw_Uptime + mYawTrim); |
randrews33 | 0:6374902c761b | 60 | _pwmPin = 0; |
randrews33 | 0:6374902c761b | 61 | wait_us(pulseInterval); |
randrews33 | 0:6374902c761b | 62 | |
randrews33 | 0:6374902c761b | 63 | // Stability pulse (5) |
randrews33 | 0:6374902c761b | 64 | _pwmPin = 1; |
randrews33 | 0:6374902c761b | 65 | wait_us(Stabilize_Uptime); |
randrews33 | 0:6374902c761b | 66 | _pwmPin = 0; |
randrews33 | 0:6374902c761b | 67 | wait_us(pulseInterval); |
randrews33 | 0:6374902c761b | 68 | |
randrews33 | 0:6374902c761b | 69 | // Enable pulse (6) |
randrews33 | 0:6374902c761b | 70 | _pwmPin = 1; |
randrews33 | 0:6374902c761b | 71 | wait_us(Enable_Uptime); |
randrews33 | 0:6374902c761b | 72 | _pwmPin = 0; |
randrews33 | 0:6374902c761b | 73 | wait_us(pulseInterval); |
randrews33 | 0:6374902c761b | 74 | |
randrews33 | 0:6374902c761b | 75 | _pwmPin = 1; |
randrews33 | 0:6374902c761b | 76 | wait_us(Extra_Uptime); |
randrews33 | 0:6374902c761b | 77 | _pwmPin = 0; |
randrews33 | 0:6374902c761b | 78 | wait_us(pulseInterval); |
randrews33 | 0:6374902c761b | 79 | |
randrews33 | 0:6374902c761b | 80 | _pwmPin = 1; |
randrews33 | 0:6374902c761b | 81 | wait_us(Extra2_Uptime); |
randrews33 | 0:6374902c761b | 82 | _pwmPin = 0; |
randrews33 | 0:6374902c761b | 83 | wait_us(pulseInterval); |
randrews33 | 0:6374902c761b | 84 | } |
randrews33 | 0:6374902c761b | 85 | |
randrews33 | 0:6374902c761b | 86 | // TODO: ensure that new values are in an acceptable range |
randrews33 | 0:6374902c761b | 87 | void DX6iController::updateThrottle(int newThrottle) { |
randrews33 | 0:6374902c761b | 88 | Throttle_Uptime = newThrottle; |
randrews33 | 0:6374902c761b | 89 | updateRemainder(); |
randrews33 | 0:6374902c761b | 90 | } |
randrews33 | 0:6374902c761b | 91 | |
randrews33 | 0:6374902c761b | 92 | void DX6iController::updateRoll(int newRoll) { |
randrews33 | 0:6374902c761b | 93 | Roll_Uptime = newRoll; |
randrews33 | 0:6374902c761b | 94 | updateRemainder(); |
randrews33 | 0:6374902c761b | 95 | } |
randrews33 | 0:6374902c761b | 96 | |
randrews33 | 0:6374902c761b | 97 | void DX6iController::updatePitch(int newPitch) { |
randrews33 | 0:6374902c761b | 98 | Pitch_Uptime = newPitch; |
randrews33 | 0:6374902c761b | 99 | updateRemainder(); |
randrews33 | 0:6374902c761b | 100 | } |
randrews33 | 0:6374902c761b | 101 | |
randrews33 | 0:6374902c761b | 102 | void DX6iController::updateYaw(int newYaw) { |
randrews33 | 0:6374902c761b | 103 | Yaw_Uptime = newYaw; |
randrews33 | 0:6374902c761b | 104 | updateRemainder(); |
randrews33 | 0:6374902c761b | 105 | } |
randrews33 | 0:6374902c761b | 106 | |
randrews33 | 0:6374902c761b | 107 | void DX6iController::updateRemainder() { |
randrews33 | 0:6374902c761b | 108 | Remainder_Uptime = 22000 - (pulseInterval*nChannels + Throttle_Uptime + Roll_Uptime + Pitch_Uptime + Yaw_Uptime |
randrews33 | 0:6374902c761b | 109 | + Enable_Uptime + Stabilize_Uptime + Extra_Uptime + Extra2_Uptime |
randrews33 | 0:6374902c761b | 110 | + mThrottleTrim + mRollTrim + mPitchTrim + mYawTrim); |
randrews33 | 0:6374902c761b | 111 | } |
randrews33 | 0:6374902c761b | 112 | |
randrews33 | 0:6374902c761b | 113 | void DX6iController::updateThrottleTrim(int newThrottleTrim) { |
randrews33 | 0:6374902c761b | 114 | mThrottleTrim = newThrottleTrim; |
randrews33 | 0:6374902c761b | 115 | } |
randrews33 | 0:6374902c761b | 116 | |
randrews33 | 0:6374902c761b | 117 | void DX6iController::updateRollTrim(int newRollTrim) { |
randrews33 | 0:6374902c761b | 118 | mRollTrim = newRollTrim; |
randrews33 | 0:6374902c761b | 119 | } |
randrews33 | 0:6374902c761b | 120 | |
randrews33 | 0:6374902c761b | 121 | void DX6iController::updatePitchTrim(int newPitchTrim) { |
randrews33 | 0:6374902c761b | 122 | mPitchTrim = newPitchTrim; |
randrews33 | 0:6374902c761b | 123 | } |
randrews33 | 0:6374902c761b | 124 | |
randrews33 | 0:6374902c761b | 125 | void DX6iController::updateYawTrim(int newYawTrim) { |
randrews33 | 0:6374902c761b | 126 | mYawTrim = newYawTrim; |
randrews33 | 0:6374902c761b | 127 | } |