Interface for DX6i RC Quadcopter controller
Diff: DX6iController.cpp
- Revision:
- 0:6374902c761b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DX6iController.cpp Mon Mar 30 19:26:24 2015 +0000 @@ -0,0 +1,127 @@ +/** + * Institution: Georgia Institute of Technology - ECE Department - Senior Design II + * Team: AH3 + * Created: 3/24/2015 + * Last Edit: 3/26/2015 + * By: Taylor Andrews, Luke Panayioto +**/ + +#include "DX6iController.h" + +DX6iController::DX6iController(pwmPin) : _pwmPin(pwmPin) { + pulseInterval = 0; + nChannels = 9; + + Throttle_Uptime = 700; //1 700 / 1100 / 1500 // Throttle + Roll_Uptime = 1100; //2 700 / 1100 / 1500 (R/L) // Roll + Pitch_Uptime = 1100; //3 770 / 1170 / 1550 (B/F) // Pitch + Yaw_Uptime = 1100; //4 700 / 1090 / 1500 (R/L) // Yaw + Stabilize_Uptime = 1100; //5 LLLL / MMMM / 1500 (3,2,1) + Enable_Uptime = 1500; //6 700 / ---- / 1500 (Off/On) Note: Bind I Button + Extra_Uptime = 1100; //7 LLLL / 1100 / HHHH // IDK + Extra2_Uptime = 1100; //8 LLLL / 1100 / HHHH // IDK + Remainder_Uptime = 22000 - ((pulseInterval * nChannels) + Throttle_Uptime + Roll_Uptime + Pitch_Uptime + Yaw_Uptime + Enable_Uptime + Stabilize_Uptime + Extra_Uptime + Extra2_Uptime); + + mThrottleTrim = 0; + mRollTrim = 0; + mPitchTrim = 0; + mYawTrim = 0; +} + +void DX6iController::generateSignal(int externalDelay) { + //Big pulse + // long remainder uptime (0) + _pwmPin = 1; //Soft pwm + wait_us(Remainder_Uptime - externalDelay); + _pwmPin = 0; + wait_us(pulseInterval); + + // Throttle pulse (1) + _pwmPin = 1; + wait_us(Throttle_Uptime + mThrottleTrim); + _pwmPin = 0; + wait_us(pulseInterval); + + // Roll pulse (2) + _pwmPin = 1; + wait_us(Roll_Uptime + mRollTrim); + _pwmPin = 0; + wait_us(pulseIntervalDelay); + + // Pitch pulse (3) + _pwmPin = 1; + wait_us(Pitch_Uptime + mPitchTrim); + _pwmPin = 0; + wait_us(pulseIntervalDelay); + + // Yaw pulse (4) + _pwmPin = 1; + wait_us(Yaw_Uptime + mYawTrim); + _pwmPin = 0; + wait_us(pulseInterval); + + // Stability pulse (5) + _pwmPin = 1; + wait_us(Stabilize_Uptime); + _pwmPin = 0; + wait_us(pulseInterval); + + // Enable pulse (6) + _pwmPin = 1; + wait_us(Enable_Uptime); + _pwmPin = 0; + wait_us(pulseInterval); + + _pwmPin = 1; + wait_us(Extra_Uptime); + _pwmPin = 0; + wait_us(pulseInterval); + + _pwmPin = 1; + wait_us(Extra2_Uptime); + _pwmPin = 0; + wait_us(pulseInterval); +} + +// TODO: ensure that new values are in an acceptable range +void DX6iController::updateThrottle(int newThrottle) { + Throttle_Uptime = newThrottle; + updateRemainder(); +} + +void DX6iController::updateRoll(int newRoll) { + Roll_Uptime = newRoll; + updateRemainder(); +} + +void DX6iController::updatePitch(int newPitch) { + Pitch_Uptime = newPitch; + updateRemainder(); +} + +void DX6iController::updateYaw(int newYaw) { + Yaw_Uptime = newYaw; + updateRemainder(); +} + +void DX6iController::updateRemainder() { + Remainder_Uptime = 22000 - (pulseInterval*nChannels + Throttle_Uptime + Roll_Uptime + Pitch_Uptime + Yaw_Uptime + + Enable_Uptime + Stabilize_Uptime + Extra_Uptime + Extra2_Uptime + + mThrottleTrim + mRollTrim + mPitchTrim + mYawTrim); +} + +void DX6iController::updateThrottleTrim(int newThrottleTrim) { + mThrottleTrim = newThrottleTrim; +} + +void DX6iController::updateRollTrim(int newRollTrim) { + mRollTrim = newRollTrim; +} + +void DX6iController::updatePitchTrim(int newPitchTrim) { + mPitchTrim = newPitchTrim; +} + +void DX6iController::updateYawTrim(int newYawTrim) { + mYawTrim = newYawTrim; +} \ No newline at end of file