void writeMotors(void) { uint8_t i; for (i = 0; i < numberMotor; i++) pwmEscWrite(i, (uint16_t)motor[i]); if (eepromConfig.mixerConfiguration == MIXERTYPE_TRI) pwmEscWrite(7, (uint16_t)motor[7]); }
void writeMotors(void) { uint8_t i; for (i = 0; i < numberMotor; i++) pwmEscWrite(i, (uint16_t)motor[i]); }
void mixerCLI() { float tempFloat; uint8_t index; uint8_t rows, columns; uint8_t mixerQuery = 'x'; uint8_t validQuery = false; cliBusy = true; cliPortPrint("\nEntering Mixer CLI....\n\n"); while(true) { cliPortPrint("Mixer CLI -> "); while ((cliPortAvailable() == false) && (validQuery == false)); if (validQuery == false) mixerQuery = cliPortRead(); cliPortPrint("\n"); switch(mixerQuery) { /////////////////////////// case 'a': // Mixer Configuration cliPortPrint("\nMixer Configuration: "); switch (eepromConfig.mixerConfiguration) { case MIXERTYPE_TRI: cliPortPrint(" MIXERTYPE TRI\n"); break; case MIXERTYPE_QUADX: cliPortPrint("MIXERTYPE QUAD X\n"); break; case MIXERTYPE_HEX6X: cliPortPrint(" MIXERTYPE HEX X\n"); break; case MIXERTYPE_FREE: cliPortPrint(" MIXERTYPE FREE\n"); break; } cliPortPrintF("Number of Motors: %1d\n", numberMotor); cliPortPrintF("ESC PWM Rate: %3ld\n", eepromConfig.escPwmRate); cliPortPrintF("Servo PWM Rate: %3ld\n", eepromConfig.servoPwmRate); if (eepromConfig.yawDirection == 1.0f) cliPortPrintF("Yaw Direction: Normal\n\n"); else if (eepromConfig.yawDirection == -1.0f) cliPortPrintF("Yaw Direction: Reverse\n\n"); else cliPortPrintF("Yaw Direction: Undefined\n\n"); if (eepromConfig.mixerConfiguration == MIXERTYPE_TRI) { cliPortPrintF("TriCopter Yaw Servo PWM Rate: %3ld\n", eepromConfig.triYawServoPwmRate); cliPortPrintF("TriCopter Yaw Servo Min PWM: %4ld\n", (uint16_t)eepromConfig.triYawServoMin); cliPortPrintF("TriCopter Yaw Servo Mid PWM: %4ld\n", (uint16_t)eepromConfig.triYawServoMid); cliPortPrintF("TriCopter Yaw Servo Max PWM: %4ld\n\n", (uint16_t)eepromConfig.triYawServoMax); cliPortPrintF("Tricopter Yaw Cmd Time Constant: %5.3f\n\n", eepromConfig.triCopterYawCmd500HzLowPassTau); } if (eepromConfig.mixerConfiguration == MIXERTYPE_FREE) { cliPortPrintF("\nNumber of Free Mixer Motors: %1d\n Roll Pitch Yaw\n\n", eepromConfig.freeMixMotors); for ( index = 0; index < eepromConfig.freeMixMotors; index++ ) { cliPortPrintF("Motor%1d %6.3f %6.3f %6.3f\n", index, eepromConfig.freeMix[index][ROLL ], eepromConfig.freeMix[index][PITCH], eepromConfig.freeMix[index][YAW ]); } cliPortPrint("\n"); } validQuery = false; break; /////////////////////////// case 'x': cliPortPrint("\nExiting Mixer CLI....\n\n"); cliBusy = false; return; break; /////////////////////////// case 'A': // Read Mixer Configuration eepromConfig.mixerConfiguration = (uint8_t)readFloatCLI(); initMixer(); pwmEscInit(); mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'B': // Read ESC and Servo PWM Update Rates eepromConfig.escPwmRate = (uint16_t)readFloatCLI(); eepromConfig.servoPwmRate = (uint16_t)readFloatCLI(); pwmEscInit(); pwmServoInit(); mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'D': // Read yaw direction tempFloat = readFloatCLI(); if (tempFloat >= 0.0) tempFloat = 1.0; else tempFloat = -1.0; eepromConfig.yawDirection = tempFloat; mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'E': // Read TriCopter Servo PWM Rate if (eepromConfig.mixerConfiguration == MIXERTYPE_TRI) { eepromConfig.triYawServoPwmRate = (uint16_t)readFloatCLI(); pwmEscInit(); } else { tempFloat = readFloatCLI(); cliPortPrintF("\nTriCopter Mixing not Selected....\n\n"); } mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'F': // Read TriCopter Servo Min Point if (eepromConfig.mixerConfiguration == MIXERTYPE_TRI) { eepromConfig.triYawServoMin = readFloatCLI(); pwmEscWrite(7, (uint16_t)eepromConfig.triYawServoMin); } else { tempFloat = readFloatCLI(); cliPortPrintF("\nTriCopter Mixing not Selected....\n\n"); } mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'G': // Read TriCopter Servo Mid Point if (eepromConfig.mixerConfiguration == MIXERTYPE_TRI) { eepromConfig.triYawServoMid = readFloatCLI(); pwmEscWrite(7, (uint16_t)eepromConfig.triYawServoMid); } else { tempFloat = readFloatCLI(); cliPortPrintF("\nTriCopter Mixing not Selected....\n\n"); } mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'H': // Read TriCopter Servo Max Point if (eepromConfig.mixerConfiguration == MIXERTYPE_TRI) { eepromConfig.triYawServoMax = readFloatCLI(); pwmEscWrite(7, (uint16_t)eepromConfig.triYawServoMax); } else { tempFloat = readFloatCLI(); cliPortPrintF("\nTriCopter Mixing not Selected....\n\n"); } mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'I': // Read TriCopter Yaw Command Time Constant if (eepromConfig.mixerConfiguration == MIXERTYPE_TRI) { eepromConfig.triCopterYawCmd500HzLowPassTau = readFloatCLI(); initFirstOrderFilter(); } else { tempFloat = readFloatCLI(); cliPortPrintF("\nTriCopter Mixing not Selected....\n\n"); } mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'J': // Read Free Mix Motor Number if (eepromConfig.mixerConfiguration == MIXERTYPE_FREE) { eepromConfig.freeMixMotors = (uint8_t)readFloatCLI(); initMixer(); } else { tempFloat = readFloatCLI(); cliPortPrintF("\nFree Mix not Selected....\n\n"); } mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'K': // Read Free Mix Matrix Element if (eepromConfig.mixerConfiguration == MIXERTYPE_FREE) { rows = (uint8_t)readFloatCLI() - 1; columns = (uint8_t)readFloatCLI() - 1; eepromConfig.freeMix[rows][columns] = readFloatCLI(); } else { tempFloat = readFloatCLI(); tempFloat = readFloatCLI(); tempFloat = readFloatCLI(); cliPortPrintF("\nFree Mix not Selected....\n\n"); } mixerQuery = 'a'; validQuery = true; break; /////////////////////////// case 'W': // Write EEPROM Parameters cliPortPrint("\nWriting EEPROM Parameters....\n\n"); writeEEPROM(); validQuery = false; break; /////////////////////////// case '?': cliPortPrint("\n"); cliPortPrint("'a' Mixer Configuration Data 'A' Set Mixer Configuration A0 thru 3, see aq32Plus.h\n"); cliPortPrint(" 'B' Set PWM Rates BESC;Servo\n"); cliPortPrint(" 'D' Set Yaw Direction D1 or D-1\n"); if (eepromConfig.mixerConfiguration == MIXERTYPE_TRI) { cliPortPrint(" 'E' Set TriCopter Servo PWM Rate ERate\n"); cliPortPrint(" 'F' Set TriCopter Servo Min Point FMin\n"); cliPortPrint(" 'G' Set TriCopter Servo Mid Point GMid\n"); cliPortPrint(" 'H' Set TriCopter Servo Max Point HMax\n"); cliPortPrint(" 'I' Set TriCopter Yaw Cmd Time Constant ITimeConstant\n"); } if (eepromConfig.mixerConfiguration == MIXERTYPE_FREE) { cliPortPrint(" 'J' Set Number of FreeMix Motors JNumb\n"); cliPortPrint(" 'K' Set FreeMix Matrix Element KRow;Col;Value\n"); } cliPortPrint(" 'W' Write EEPROM Parameters\n"); cliPortPrint("'x' Exit Mixer CLI '?' Command Summary\n\n"); break; /////////////////////////// } } }
void escCalibration(void) { escCalibrating = true; armed = false; cliPrint("\nESC Calibration:\n\n"); cliPrint("!!!! CAUTION - Remove all propellers and disconnect !!!!\n"); cliPrint("!!!! flight battery before proceeding any further !!!!\n\n"); cliPrint("Type 'Y' to continue, anything other character exits\n\n"); while (cliAvailable() == false); temp = cliRead(); if (temp != 'Y') { cliPrint("ESC Calibration Canceled!!\n\n"); escCalibrating = false; return; } /////////////////////////////////// cliPrint("For ESC Calibration:\n"); cliPrint(" Enter 'h' for Max Command....\n"); cliPrint(" Enter 'm' for Mid Command....\n"); cliPrint(" Enter 'l' for Min Command....\n"); cliPrint(" Enter 'x' to exit....\n\n"); cliPrint("For Motor Order Verification:\n"); cliPrint(" Enter '0' to turn off all motors....\n"); cliPrint(" Enter '1' to turn on Motor1....\n"); cliPrint(" Enter '2' to turn on Motor2....\n"); cliPrint(" Enter '3' to turn on Motor3....\n"); cliPrint(" Enter '4' to turn on Motor4....\n"); cliPrint(" Enter '5' to turn on Motor5....\n"); cliPrint(" Enter '6' to turn on Motor6....\n"); cliPrint(" Enter '7' to turn on Motor7....\n"); cliPrint(" Enter '8' to turn on Motor8....\n\n"); /////////////////////////////////// while(true) { while (cliAvailable() == false); temp = cliRead(); switch (temp) { case 'h': cliPrint("Applying Max Command....\n\n"); writeAllMotors(eepromConfig.maxThrottle); break; case 'm': cliPrint("Applying Mid Command....\n\n"); writeAllMotors(eepromConfig.midCommand); break; case 'l': cliPrint("Applying Min Command....\n\n"); writeAllMotors(MINCOMMAND); break; case 'x': cliPrint("Applying Min Command, Exiting Calibration....\n\n"); writeAllMotors(MINCOMMAND); escCalibrating = false; return; break; case '0': cliPrint("Motors at Min Command....\n\n"); writeAllMotors(MINCOMMAND); break; case '1': cliPrint("Motor1 at Min Throttle....\n\n"); pwmEscWrite(0, eepromConfig.minThrottle); break; case '2': cliPrint("Motor2 at Min Throttle....\n\n"); pwmEscWrite(1, eepromConfig.minThrottle); break; case '3': cliPrint("Motor3 at Min Throttle....\n\n"); pwmEscWrite(2, eepromConfig.minThrottle); break; case '4': cliPrint("Motor4 at Min Throttle....\n\n"); pwmEscWrite(3, eepromConfig.minThrottle); break; case '5': cliPrint("Motor5 at Min Throttle....\n\n"); pwmEscWrite(4, eepromConfig.minThrottle); break; case '6': cliPrint("Motor6 at Min Throttle....\n\n"); pwmEscWrite(5, eepromConfig.minThrottle); break; case '7': cliPrint("Motor7 at Min Throttle....\n\n"); pwmEscWrite(6, eepromConfig.minThrottle); break; case '8': cliPrint("Motor8 at Min Throttle....\n\n"); pwmEscWrite(7, eepromConfig.minThrottle); break; case '?': cliPrint("For ESC Calibration:\n"); cliPrint(" Enter 'h' for Max Command....\n"); cliPrint(" Enter 'm' for Mid Command....\n"); cliPrint(" Enter 'l' for Min Command....\n"); cliPrint(" Enter 'x' to exit....\n\n"); cliPrint("For Motor Order Verification:\n"); cliPrint(" Enter '0' to turn off all motors....\n"); cliPrint(" Enter '1' to turn on Motor1....\n"); cliPrint(" Enter '2' to turn on Motor2....\n"); cliPrint(" Enter '3' to turn on Motor3....\n"); cliPrint(" Enter '4' to turn on Motor4....\n"); cliPrint(" Enter '5' to turn on Motor5....\n"); cliPrint(" Enter '6' to turn on Motor6....\n"); cliPrint(" Enter '7' to turn on Motor7....\n"); cliPrint(" Enter '8' to turn on Motor8....\n\n"); break; } } }