Compare commits

...

2 Commits

Author SHA1 Message Date
3fecb101b7
add edits from vesting dagen 2024-09-09 10:17:58 +02:00
4ce7cc1475
fix servo error 2024-08-16 16:09:29 +02:00
4 changed files with 35 additions and 14 deletions

View File

@ -293,7 +293,9 @@ void app_main() {
led_setRGB(0, 0, 0); led_setRGB(0, 0, 0);
#endif #endif
#if TARGET == TARGET_RX
servo_deinit(); servo_deinit();
#endif
CLI_deinit(&cli_uart); CLI_deinit(&cli_uart);
CMDList_deinit(cmdList); CMDList_deinit(cmdList);

View File

@ -27,19 +27,25 @@ void servo_init(void)
Servos[0].ledc_ch = LEDC_CHANNEL_0; Servos[0].ledc_ch = LEDC_CHANNEL_0;
Servos[0].pulse_min = SERVO_DUTY_MIN; Servos[0].pulse_min = SERVO_DUTY_MIN;
Servos[0].pulse_mid = SERVO_DUTY_MID; Servos[0].pulse_mid = SERVO_DUTY_MID;
Servos[0].pulse_max = SERVO_DUTY_MAX - 100; Servos[0].pulse_max = SERVO_DUTY_MAX;
Servos[0].mid_delay = 10; 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].mid_delay_timer = 0;
Servos[0].reversed = false; Servos[0].reversed = false;
Servos[1].pin = SERVOS_CH1_PIN; Servos[1].pin = SERVOS_CH1_PIN;
Servos[1].ledc_ch = LEDC_CHANNEL_1; Servos[1].ledc_ch = LEDC_CHANNEL_1;
Servos[1].pulse_min = SERVO_DUTY_MIN; Servos[1].pulse_min = SERVO_DUTY_MIN-35;
Servos[1].pulse_mid = SERVO_DUTY_MID; Servos[1].pulse_mid = SERVO_DUTY_MID-35;
Servos[1].pulse_max = SERVO_DUTY_MAX; Servos[1].pulse_max = SERVO_DUTY_MAX-35;
Servos[1].mid_delay = 0; Servos[1].in_min = 0;
Servos[1].in_mid = 103;
Servos[1].in_max = 255;
Servos[1].mid_delay = 5;
Servos[1].mid_delay_timer = 0; Servos[1].mid_delay_timer = 0;
Servos[1].reversed = false; Servos[1].reversed = true;
// Prepare and then apply the LEDC PWM timer configuration // Prepare and then apply the LEDC PWM timer configuration
ledc_timer_config_t ledc_timer = { ledc_timer_config_t ledc_timer = {
@ -90,12 +96,22 @@ void servo_set(uint8_t ch, uint8_t pos)
} }
} }
if (Servos[ch].reversed) double pos_double = ((double) pos) - Servos[ch].in_mid;
if (pos_double > 0.0)
{ {
pos = -((int16_t)pos) + 255; 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);
}
if (Servos[ch].reversed)
{
pos_double = -pos_double;
} }
double pos_double = ((double) pos) - 128;
if (pos_double < 0) if (pos_double < 0)
{ {
@ -125,11 +141,11 @@ void servo_set(uint8_t ch, uint8_t pos)
uint32_t duty; uint32_t duty;
if (pos_double > 0.0) if (pos_double > 0.0)
{ {
duty = (pos_double/128.0 * (Servos[ch].pulse_max - Servos[ch].pulse_mid)) + Servos[ch].pulse_mid; duty = (pos_double * (Servos[ch].pulse_max - Servos[ch].pulse_mid)) + Servos[ch].pulse_mid;
} }
else else
{ {
duty = (pos_double/128.0 * (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) if (duty < SERVO_DUTY_MIN)

View File

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

View File

@ -42,7 +42,7 @@ static void ws_event_handler(void* handler_args, esp_event_base_t base, int32_t
break; break;
case WEBSOCKET_EVENT_DATA: case WEBSOCKET_EVENT_DATA:
// LOG_D("ws_event_handler: data recieved opcode %d", data->op_code); LOG_D("ws_event_handler: data recieved opcode %d", data->op_code);
if (data->op_code == 0x02) if (data->op_code == 0x02)
{ {
LOG_D("ws_event_handler: binary data recieved"); LOG_D("ws_event_handler: binary data recieved");
@ -212,7 +212,7 @@ void ws_sendData(ws_client_t client)
{ {
if ((client->txBuffer_wp > 0) && esp_websocket_client_is_connected(client->handle)) if ((client->txBuffer_wp > 0) && esp_websocket_client_is_connected(client->handle))
{ {
// LOG_D("ws_sendData: (%d b) '%.*s'", client->txBuffer_wp, client->txBuffer_wp, (char *)&client->txBuffer[0]); LOG_D("ws_sendData: (%d b) '%.*s'", client->txBuffer_wp, client->txBuffer_wp, (char *)&client->txBuffer[0]);
esp_websocket_client_send_text(client->handle, (char *)&client->txBuffer[0], client->txBuffer_wp, 1000 * portTICK_PERIOD_MS); esp_websocket_client_send_text(client->handle, (char *)&client->txBuffer[0], client->txBuffer_wp, 1000 * portTICK_PERIOD_MS);
client->txBuffer_wp = 0; client->txBuffer_wp = 0;
} }