update servo trim settings

This commit is contained in:
Laila van Reenen 2024-12-05 21:28:44 +01:00
parent 3fecb101b7
commit c84d17a4d9
4 changed files with 43 additions and 36 deletions

View File

@ -68,6 +68,37 @@ int cmd_contrl(char* line, void* cli)
return out;
}
int cmd_servotrim(char* line, void* cli)
{
uint8_t ch;
int out = 0;
char msg[40];
char* arg = getNextArg(line, ':');
if (arg == NULL)
{
snprintf(&msg[0], 40, "no arguments given, expect at least one\n");
CLI_stringOut((CLI_t*)cli, &msg[0]);
out = -1;
}
else
{
readInt(arg, &ch);
arg = getNextArg(arg, ' ');
if (arg != NULL)
{
readInt(arg, &Servos[ch].pulse_min);
arg = getNextArg(arg, ':');
readInt(arg, &Servos[ch].pulse_mid);
arg = getNextArg(arg, ':');
readInt(arg, &Servos[ch].pulse_max);
}
snprintf(&msg[0], 40, "servo ch %d: %d:%d:%d\n", Servos[ch].pulse_min, Servos[ch].pulse_mid, Servos[ch].pulse_max);
CLI_stringOut((CLI_t*)cli, &msg[0]);
}
return out;
}
extern volatile bool running;
int cmd_shutdown(char* line, void* cli)
{
@ -161,6 +192,7 @@ const CMD_t Commands[] = {
#if TARGET == TARGET_RX
{ "d", &cmd_contrl },
{ "status", &cmd_status },
{ "servotrim", &cmd_servotrim},
#elif TARGET == TARGET_TX
{ "led", &setLed },
#endif

View File

@ -111,7 +111,7 @@ void app_main() {
#if TARGET == TARGET_RX
CLI_t cli_ws_client;
#elif TARGET == TARGET_TX
CLI_t cli_ws_client[3];
CLI_t cli_ws_client[3];
#endif
LOG_D("main: main loop starting in state %d", MainState);

View File

@ -28,21 +28,15 @@ void servo_init(void)
Servos[0].pulse_min = SERVO_DUTY_MIN;
Servos[0].pulse_mid = SERVO_DUTY_MID;
Servos[0].pulse_max = SERVO_DUTY_MAX;
Servos[0].in_min = 0;
Servos[0].in_mid = 128;
Servos[0].in_max = 255;
Servos[0].mid_delay = 0;
Servos[0].mid_delay_timer = 0;
Servos[0].reversed = false;
Servos[1].pin = SERVOS_CH1_PIN;
Servos[1].ledc_ch = LEDC_CHANNEL_1;
Servos[1].pulse_min = SERVO_DUTY_MIN-35;
Servos[1].pulse_mid = SERVO_DUTY_MID-35;
Servos[1].pulse_max = SERVO_DUTY_MAX-35;
Servos[1].in_min = 0;
Servos[1].in_mid = 103;
Servos[1].in_max = 255;
Servos[1].pulse_min = SERVO_DUTY_MIN;
Servos[1].pulse_mid = SERVO_DUTY_MID;
Servos[1].pulse_max = SERVO_DUTY_MAX;
Servos[1].mid_delay = 5;
Servos[1].mid_delay_timer = 0;
Servos[1].reversed = true;
@ -85,27 +79,11 @@ void servo_deinit(void)
void servo_set(uint8_t ch, uint8_t pos)
{
if (Servos_ch_swap)
{
if (ch == 0)
{
ch = 1;
}
else
{
ch = 0;
}
{
ch = (ch == 0) ? 1 : 0;
}
double pos_double = ((double) pos) - Servos[ch].in_mid;
if (pos_double > 0.0)
{
pos_double = pos_double/(Servos[ch].in_max - Servos[ch].in_mid);
}
else
{
pos_double = pos_double/(Servos[ch].in_mid - Servos[ch].in_min);
}
double pos_double = ((int16_t)pos - 128) / 128.0;
if (Servos[ch].reversed)
{
@ -113,7 +91,7 @@ void servo_set(uint8_t ch, uint8_t pos)
}
if (pos_double < 0)
if (pos_double < 0.0)
{
if (Servos[ch].mid_delay_timer > 0)
{
@ -125,7 +103,7 @@ void servo_set(uint8_t ch, uint8_t pos)
Servos[ch].mid_delay_timer = -Servos[ch].mid_delay;
}
}
else if (pos_double > 0)
else if (pos_double > 0.0)
{
if (Servos[ch].mid_delay_timer < 0)
{
@ -145,8 +123,8 @@ void servo_set(uint8_t ch, uint8_t pos)
}
else
{
duty = (pos_double * (Servos[ch].pulse_mid - Servos[ch].pulse_min)) + Servos[ch].pulse_mid;
}
duty = (pos_double * (Servos[ch].pulse_mid - Servos[ch].pulse_min)) + Servos[ch].pulse_mid;
}
if (duty < SERVO_DUTY_MIN)
{

View File

@ -12,9 +12,6 @@ typedef struct {
uint16_t pulse_min;
uint16_t pulse_mid;
uint16_t pulse_max;
uint8_t in_min;
uint8_t in_mid;
uint8_t in_max;
uint8_t mid_delay;
int16_t mid_delay_timer;
bool reversed;