Add commands for switching modes

Make mode simple int instead of enum for simplify using in other subsystems
This commit is contained in:
Oleg Kalachev
2025-08-11 22:35:38 +03:00
parent d5c3b5b5f7
commit 24f7b02ed5
3 changed files with 13 additions and 3 deletions

View File

@@ -8,10 +8,12 @@
#include "util.h" #include "util.h"
extern const int MOTOR_REAR_LEFT, MOTOR_REAR_RIGHT, MOTOR_FRONT_RIGHT, MOTOR_FRONT_LEFT; extern const int MOTOR_REAR_LEFT, MOTOR_REAR_RIGHT, MOTOR_FRONT_RIGHT, MOTOR_FRONT_LEFT;
extern const int ACRO, STAB, AUTO;
extern float loopRate, dt; extern float loopRate, dt;
extern double t; extern double t;
extern uint16_t channels[16]; extern uint16_t channels[16];
extern float controlRoll, controlPitch, controlThrottle, controlYaw, controlArmed, controlMode; extern float controlRoll, controlPitch, controlThrottle, controlYaw, controlArmed, controlMode;
extern int mode;
extern bool armed; extern bool armed;
const char* motd = const char* motd =
@@ -34,6 +36,7 @@ const char* motd =
"imu - show IMU data\n" "imu - show IMU data\n"
"arm - arm the drone (when no armed switch)\n" "arm - arm the drone (when no armed switch)\n"
"disarm - disarm the drone (when no armed switch)\n" "disarm - disarm the drone (when no armed switch)\n"
"stab/acro/auto - set mode (when no mode switch)\n"
"rc - show RC data\n" "rc - show RC data\n"
"mot - show motor output\n" "mot - show motor output\n"
"log - dump in-RAM log\n" "log - dump in-RAM log\n"
@@ -116,6 +119,12 @@ void doCommand(String str, bool echo = false) {
armed = true; armed = true;
} else if (command == "disarm") { } else if (command == "disarm") {
armed = false; armed = false;
} else if (command == "stab") {
mode = STAB;
} else if (command == "acro") {
mode = ACRO;
} else if (command == "auto") {
mode = AUTO;
} else if (command == "rc") { } else if (command == "rc") {
print("channels: "); print("channels: ");
for (int i = 0; i < 16; i++) { for (int i = 0; i < 16; i++) {

View File

@@ -34,7 +34,8 @@
#define TILT_MAX radians(30) #define TILT_MAX radians(30)
#define RATES_D_LPF_ALPHA 0.2 // cutoff frequency ~ 40 Hz #define RATES_D_LPF_ALPHA 0.2 // cutoff frequency ~ 40 Hz
enum { MANUAL, ACRO, STAB, AUTO } mode = STAB; const int MANUAL = 0, ACRO = 1, STAB = 2, AUTO = 3; // flight modes
int mode = STAB;
bool armed = false; bool armed = false;
PID rollRatePID(ROLLRATE_P, ROLLRATE_I, ROLLRATE_D, ROLLRATE_I_LIM, RATES_D_LPF_ALPHA); PID rollRatePID(ROLLRATE_P, ROLLRATE_I, ROLLRATE_D, ROLLRATE_I_LIM, RATES_D_LPF_ALPHA);

View File

@@ -226,8 +226,8 @@ void handleMavlink(const void *_msg) {
} }
if (m.command == MAV_CMD_DO_SET_MODE) { if (m.command == MAV_CMD_DO_SET_MODE) {
if (!(m.param2 >= 0 && m.param2 <= AUTO)) return; if (!(m.param2 >= 0 && m.param2 <= AUTO)) return; // incorrect mode
mode = static_cast<decltype(mode)>(m.param2); mode = m.param2;
mavlink_msg_command_ack_pack(SYSTEM_ID, MAV_COMP_ID_AUTOPILOT1, &ack, m.command, MAV_RESULT_ACCEPTED, UINT8_MAX, 0, msg.sysid, msg.compid); mavlink_msg_command_ack_pack(SYSTEM_ID, MAV_COMP_ID_AUTOPILOT1, &ack, m.command, MAV_RESULT_ACCEPTED, UINT8_MAX, 0, msg.sysid, msg.compid);
sendMessage(&ack); sendMessage(&ack);
} }