|
|
@ -3,35 +3,31 @@ |
|
|
|
// Functions called from the setup menu |
|
|
|
// Functions called from the setup menu |
|
|
|
static int8_t setup_radio (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_radio (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_motors (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_motors (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_show (uint8_t argc, const Menu::arg *argv); |
|
|
|
|
|
|
|
static int8_t setup_accel (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_accel (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_accel_flat (uint8_t argc, const Menu::arg *argv); |
|
|
|
|
|
|
|
static int8_t setup_factory (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_factory (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_erase (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_erase (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_flightmodes (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_flightmodes (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_pid (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_pid (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_frame (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_frame (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_declination (uint8_t argc, const Menu::arg *argv); |
|
|
|
|
|
|
|
static int8_t setup_compass (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_compass (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_compass_enable (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_mag_offset (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_compass_disable (uint8_t argc, const Menu::arg *argv); |
|
|
|
static int8_t setup_declination (uint8_t argc, const Menu::arg *argv); |
|
|
|
|
|
|
|
static int8_t setup_show (uint8_t argc, const Menu::arg *argv); |
|
|
|
|
|
|
|
|
|
|
|
// Command/function table for the setup menu |
|
|
|
// Command/function table for the setup menu |
|
|
|
const struct Menu::command setup_menu_commands[] PROGMEM = { |
|
|
|
const struct Menu::command setup_menu_commands[] PROGMEM = { |
|
|
|
// command function called |
|
|
|
// command function called |
|
|
|
// ======= =============== |
|
|
|
// ======= =============== |
|
|
|
{"reset", setup_factory}, |
|
|
|
|
|
|
|
{"erase", setup_erase}, |
|
|
|
{"erase", setup_erase}, |
|
|
|
|
|
|
|
{"reset", setup_factory}, |
|
|
|
|
|
|
|
{"pid", setup_pid}, |
|
|
|
{"radio", setup_radio}, |
|
|
|
{"radio", setup_radio}, |
|
|
|
{"motors", setup_motors}, |
|
|
|
{"motors", setup_motors}, |
|
|
|
{"level", setup_accel}, |
|
|
|
{"level", setup_accel}, |
|
|
|
{"flat", setup_accel_flat}, |
|
|
|
|
|
|
|
{"modes", setup_flightmodes}, |
|
|
|
{"modes", setup_flightmodes}, |
|
|
|
{"pid", setup_pid}, |
|
|
|
|
|
|
|
{"frame", setup_frame}, |
|
|
|
{"frame", setup_frame}, |
|
|
|
{"enable_mag", setup_compass_enable}, |
|
|
|
|
|
|
|
{"disable_mag", setup_compass_disable}, |
|
|
|
|
|
|
|
{"compass", setup_compass}, |
|
|
|
{"compass", setup_compass}, |
|
|
|
|
|
|
|
{"mag_offset", setup_mag_offset}, |
|
|
|
{"declination", setup_declination}, |
|
|
|
{"declination", setup_declination}, |
|
|
|
{"show", setup_show} |
|
|
|
{"show", setup_show} |
|
|
|
}; |
|
|
|
}; |
|
|
@ -70,7 +66,7 @@ setup_show(uint8_t argc, const Menu::arg *argv) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// frame |
|
|
|
// frame |
|
|
|
print_blanks(3); |
|
|
|
print_blanks(2); |
|
|
|
Serial.printf_P(PSTR("Frame\n")); |
|
|
|
Serial.printf_P(PSTR("Frame\n")); |
|
|
|
print_divider(); |
|
|
|
print_divider(); |
|
|
|
|
|
|
|
|
|
|
@ -83,7 +79,7 @@ setup_show(uint8_t argc, const Menu::arg *argv) |
|
|
|
Serial.printf_P(PSTR("(%d)\n"), (int)frame_type); |
|
|
|
Serial.printf_P(PSTR("(%d)\n"), (int)frame_type); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print_blanks(3); |
|
|
|
print_blanks(2); |
|
|
|
Serial.printf_P(PSTR("Gains\n")); |
|
|
|
Serial.printf_P(PSTR("Gains\n")); |
|
|
|
print_divider(); |
|
|
|
print_divider(); |
|
|
|
|
|
|
|
|
|
|
@ -110,11 +106,13 @@ setup_show(uint8_t argc, const Menu::arg *argv) |
|
|
|
// Nav |
|
|
|
// Nav |
|
|
|
Serial.printf_P(PSTR("Nav:\npitch:\n")); |
|
|
|
Serial.printf_P(PSTR("Nav:\npitch:\n")); |
|
|
|
print_PID(&pid_nav); |
|
|
|
print_PID(&pid_nav); |
|
|
|
Serial.printf_P(PSTR("throttle:\n")); |
|
|
|
Serial.printf_P(PSTR("baro throttle:\n")); |
|
|
|
print_PID(&pid_throttle); |
|
|
|
print_PID(&pid_baro_throttle); |
|
|
|
|
|
|
|
Serial.printf_P(PSTR("sonar throttle:\n")); |
|
|
|
|
|
|
|
print_PID(&pid_sonar_throttle); |
|
|
|
Serial.println(" "); |
|
|
|
Serial.println(" "); |
|
|
|
|
|
|
|
|
|
|
|
print_blanks(3); |
|
|
|
print_blanks(2); |
|
|
|
Serial.printf_P(PSTR("User Configs\n")); |
|
|
|
Serial.printf_P(PSTR("User Configs\n")); |
|
|
|
print_divider(); |
|
|
|
print_divider(); |
|
|
|
// Crosstrack |
|
|
|
// Crosstrack |
|
|
@ -131,13 +129,13 @@ setup_show(uint8_t argc, const Menu::arg *argv) |
|
|
|
Serial.printf_P(PSTR("throttle_failsafe_value: %d\n"), throttle_failsafe_value); |
|
|
|
Serial.printf_P(PSTR("throttle_failsafe_value: %d\n"), throttle_failsafe_value); |
|
|
|
Serial.printf_P(PSTR("log_bitmask: %d\n"), log_bitmask); |
|
|
|
Serial.printf_P(PSTR("log_bitmask: %d\n"), log_bitmask); |
|
|
|
|
|
|
|
|
|
|
|
print_blanks(3); |
|
|
|
print_blanks(2); |
|
|
|
Serial.printf_P(PSTR("IMU\n")); |
|
|
|
Serial.printf_P(PSTR("IMU\n")); |
|
|
|
print_divider(); |
|
|
|
print_divider(); |
|
|
|
imu.print_gyro_offsets(); |
|
|
|
imu.print_gyro_offsets(); |
|
|
|
imu.print_accel_offsets(); |
|
|
|
imu.print_accel_offsets(); |
|
|
|
|
|
|
|
|
|
|
|
print_blanks(3); |
|
|
|
print_blanks(2); |
|
|
|
Serial.printf_P(PSTR("Compass\n")); |
|
|
|
Serial.printf_P(PSTR("Compass\n")); |
|
|
|
print_divider(); |
|
|
|
print_divider(); |
|
|
|
|
|
|
|
|
|
|
@ -532,10 +530,15 @@ setup_pid(uint8_t argc, const Menu::arg *argv) |
|
|
|
pid_nav.kD(NAV_D); |
|
|
|
pid_nav.kD(NAV_D); |
|
|
|
pid_nav.imax(NAV_IMAX * 100); |
|
|
|
pid_nav.imax(NAV_IMAX * 100); |
|
|
|
|
|
|
|
|
|
|
|
pid_throttle.kP(THROTTLE_P); |
|
|
|
pid_baro_throttle.kP(THROTTLE_BARO_P); |
|
|
|
pid_throttle.kI(THROTTLE_I); |
|
|
|
pid_baro_throttle.kI(THROTTLE_BARO_I); |
|
|
|
pid_throttle.kD(THROTTLE_D); |
|
|
|
pid_baro_throttle.kD(THROTTLE_BARO_D); |
|
|
|
pid_throttle.imax(THROTTLE_IMAX * 100); |
|
|
|
pid_baro_throttle.imax(THROTTLE_BARO_IMAX * 100); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pid_sonar_throttle.kP(THROTTLE_SONAR_P); |
|
|
|
|
|
|
|
pid_sonar_throttle.kI(THROTTLE_SONAR_I); |
|
|
|
|
|
|
|
pid_sonar_throttle.kD(THROTTLE_SONAR_D); |
|
|
|
|
|
|
|
pid_sonar_throttle.imax(THROTTLE_SONAR_IMAX * 100); |
|
|
|
|
|
|
|
|
|
|
|
save_EEPROM_PID(); |
|
|
|
save_EEPROM_PID(); |
|
|
|
print_done(); |
|
|
|
print_done(); |
|
|
@ -591,7 +594,6 @@ setup_flightmodes(uint8_t argc, const Menu::arg *argv) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int8_t |
|
|
|
static int8_t |
|
|
|
setup_declination(uint8_t argc, const Menu::arg *argv) |
|
|
|
setup_declination(uint8_t argc, const Menu::arg *argv) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -610,26 +612,41 @@ setup_erase(uint8_t argc, const Menu::arg *argv) |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int8_t |
|
|
|
static int8_t |
|
|
|
setup_compass_enable(uint8_t argc, const Menu::arg *argv) |
|
|
|
setup_compass(uint8_t argc, const Menu::arg *argv) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Serial.printf_P(PSTR("\nCompass enabled:\n")); |
|
|
|
Serial.printf_P(PSTR("Compass ")); |
|
|
|
|
|
|
|
if (!strcmp_P(argv[1].str, PSTR("on"))) { |
|
|
|
|
|
|
|
Serial.printf_P(PSTR("Enabled\n")); |
|
|
|
compass_enabled = true; |
|
|
|
compass_enabled = true; |
|
|
|
save_EEPROM_mag(); |
|
|
|
|
|
|
|
init_compass(); |
|
|
|
init_compass(); |
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int8_t |
|
|
|
save_EEPROM_mag(); |
|
|
|
setup_compass_disable(uint8_t argc, const Menu::arg *argv) |
|
|
|
print_done(); |
|
|
|
{ |
|
|
|
|
|
|
|
Serial.printf_P(PSTR("\nCompass disabled:\n")); |
|
|
|
} else if (!strcmp_P(argv[1].str, PSTR("off"))) { |
|
|
|
|
|
|
|
Serial.printf_P(PSTR("Disabled\n")); |
|
|
|
compass_enabled = false; |
|
|
|
compass_enabled = false; |
|
|
|
|
|
|
|
|
|
|
|
save_EEPROM_mag(); |
|
|
|
save_EEPROM_mag(); |
|
|
|
|
|
|
|
print_done(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
if (compass_enabled) { |
|
|
|
|
|
|
|
Serial.printf_P(PSTR("en")); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
Serial.printf_P(PSTR("dis")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
Serial.printf_P(PSTR("abled\n\n")); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Serial.printf_P(PSTR("\nUsage:\nEnabled =>compass 1\nDisabled =>compass 0\n\n")); |
|
|
|
|
|
|
|
} |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int8_t |
|
|
|
static int8_t |
|
|
|
setup_frame(uint8_t argc, const Menu::arg *argv) |
|
|
|
setup_frame(uint8_t argc, const Menu::arg *argv) |
|
|
|
{ |
|
|
|
{ |
|
|
@ -637,22 +654,21 @@ setup_frame(uint8_t argc, const Menu::arg *argv) |
|
|
|
Serial.printf_P(PSTR("\nUsage:\nPlus frame =>frame 1\nX frame =>frame 2\nTRI frame =>frame 3\n\n")); |
|
|
|
Serial.printf_P(PSTR("\nUsage:\nPlus frame =>frame 1\nX frame =>frame 2\nTRI frame =>frame 3\n\n")); |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
|
} |
|
|
|
} |
|
|
|
Serial.printf_P(PSTR("\nSaving ")); |
|
|
|
print_done(); |
|
|
|
|
|
|
|
|
|
|
|
if(argv[1].i == 1){ |
|
|
|
if(argv[1].i == 1){ |
|
|
|
Serial.printf_P(PSTR("Plus ")); |
|
|
|
Serial.printf_P(PSTR("Plus ")); |
|
|
|
frame_type = PLUS_FRAME; |
|
|
|
frame_type = PLUS_FRAME; |
|
|
|
|
|
|
|
|
|
|
|
}else if(argv[1].i == 2){ |
|
|
|
}else if(argv[1].i == 2){ |
|
|
|
|
|
|
|
|
|
|
|
Serial.printf_P(PSTR("X ")); |
|
|
|
Serial.printf_P(PSTR("X ")); |
|
|
|
frame_type = X_FRAME; |
|
|
|
frame_type = X_FRAME; |
|
|
|
|
|
|
|
|
|
|
|
}else if(argv[1].i == 3){ |
|
|
|
}else if(argv[1].i == 3){ |
|
|
|
|
|
|
|
|
|
|
|
Serial.printf_P(PSTR("Tri ")); |
|
|
|
Serial.printf_P(PSTR("Tri ")); |
|
|
|
frame_type = TRI_FRAME; |
|
|
|
frame_type = TRI_FRAME; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Serial.printf_P(PSTR("frame\n\n")); |
|
|
|
Serial.printf_P(PSTR("frame\n\n")); |
|
|
|
save_EEPROM_frame(); |
|
|
|
save_EEPROM_frame(); |
|
|
|
return 0; |
|
|
|
return 0; |
|
|
@ -660,7 +676,7 @@ setup_frame(uint8_t argc, const Menu::arg *argv) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static int8_t |
|
|
|
static int8_t |
|
|
|
setup_compass(uint8_t argc, const Menu::arg *argv) |
|
|
|
setup_mag_offset(uint8_t argc, const Menu::arg *argv) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Serial.printf_P(PSTR("\nRotate/Pitch/Roll your ArduCopter until the offset variables stop changing.\n")); |
|
|
|
Serial.printf_P(PSTR("\nRotate/Pitch/Roll your ArduCopter until the offset variables stop changing.\n")); |
|
|
|
print_hit_enter(); |
|
|
|
print_hit_enter(); |
|
|
|