|
|
#include "encoder.h"
#include "zboard.h"
#include <stdio.h>
#include "zport.h"
#include "udpclient.h"
static uint32_t camera_encoder_lastprocess = 0; static uint32_t driven_encoder_gear_lastprocess = 0;
static encoder_t m_encoders[] = { {&camera_encoder, TIM_CHANNEL_1 | TIM_CHANNEL_2, 0, 0}, // 相机编码器
{&driven_encoder_gear, TIM_CHANNEL_1 | TIM_CHANNEL_2, 0, 0} // 从动编码器
};
void encoder_all_start(void) { for (uint8_t i = 0; i < (sizeof(m_encoders) / sizeof(encoder_t)); i++) { HAL_TIM_Encoder_Start(m_encoders[i].tim_handler, m_encoders[i].tim_channel); } }
void encoder_all_stop(void) { for (uint8_t i = 0; i < (sizeof(m_encoders) / sizeof(encoder_t)); i++) { HAL_TIM_Encoder_Stop(m_encoders[i].tim_handler, m_encoders[i].tim_channel); } }
void encoder_all_clear_counter(void) { for (uint8_t i = 0; i < (sizeof(m_encoders) / sizeof(encoder_t)); i++) { m_encoders[i].count = 0; } }
void encoder_switch_clear_counter(encoder_usage_t encoder) { m_encoders[encoder].count = 0; }
void encoder_read_with_encoder(encoder_usage_t encoder, uint32_t *encoder_value) { switch (encoder) { case CAMERA_ENCODER: *encoder_value = m_encoders[CAMERA_ENCODER].count; break; case DRIVEN_ENCODER_GEAR: *encoder_value = m_encoders[DRIVEN_ENCODER_GEAR].count; break;
default: break; } }
void encoder_light_schedule(void) { }
/*
R1:tim2-->TIM_CHANNEL_4 G1:tim2-->TIM_CHANNEL_1 B1:tim3-->TIM_CHANNEL_1
R2:tim2-->TIM_CHANNEL_3 G2:tim4-->TIM_CHANNEL_3 B2:tim4-->TIM_CHANNEL_4 */ void encoder_light_switch_set_color(encoder_usage_t encoder, encoder_light_color_table_t color) { if (encoder == CAMERA_ENCODER) { switch (color) { case ENCODER_LIGHT_COLOR_RED: /* 红色 */ HAL_GPIO_WritePin(DIS_R1_GPIO_Port, DIS_R1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(DIS_G1_GPIO_Port, DIS_G1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_B1_GPIO_Port, DIS_B1_Pin, GPIO_PIN_SET); break; case ENCODER_LIGHT_COLOR_GREEN: /* 绿色 */ HAL_GPIO_WritePin(DIS_R1_GPIO_Port, DIS_R1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_G1_GPIO_Port, DIS_G1_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(DIS_B1_GPIO_Port, DIS_B1_Pin, GPIO_PIN_SET); break; case ENCODER_LIGHT_COLOR_BLUE: /* 蓝色 */ HAL_GPIO_WritePin(DIS_R1_GPIO_Port, DIS_R1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_G1_GPIO_Port, DIS_G1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_B1_GPIO_Port, DIS_B1_Pin, GPIO_PIN_RESET); break;
default: /* not find color */ break; } } else if (encoder == DRIVEN_ENCODER_GEAR) { switch (color) { case ENCODER_LIGHT_COLOR_RED: /* 红色 */ HAL_GPIO_WritePin(DIS_R2_GPIO_Port, DIS_R2_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(DIS_G2_GPIO_Port, DIS_G2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_B2_GPIO_Port, DIS_B2_Pin, GPIO_PIN_SET); break; case ENCODER_LIGHT_COLOR_GREEN: /* 绿色 */ HAL_GPIO_WritePin(DIS_R2_GPIO_Port, DIS_R2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_G2_GPIO_Port, DIS_G2_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(DIS_B2_GPIO_Port, DIS_B2_Pin, GPIO_PIN_SET); break; case ENCODER_LIGHT_COLOR_BLUE: /* 蓝色 */ HAL_GPIO_WritePin(DIS_R2_GPIO_Port, DIS_R2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_G2_GPIO_Port, DIS_G2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_B2_GPIO_Port, DIS_B2_Pin, GPIO_PIN_RESET); break;
default: /* not find color */ break; } } else { // error
} }
void encoder_switch_close_light(encoder_usage_t encoder) { if (encoder == CAMERA_ENCODER) { HAL_GPIO_WritePin(DIS_R1_GPIO_Port, DIS_R1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_G1_GPIO_Port, DIS_G1_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_B1_GPIO_Port, DIS_B1_Pin, GPIO_PIN_SET); } else if (encoder == DRIVEN_ENCODER_GEAR) { HAL_GPIO_WritePin(DIS_R2_GPIO_Port, DIS_R2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_G2_GPIO_Port, DIS_G2_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(DIS_B2_GPIO_Port, DIS_B2_Pin, GPIO_PIN_SET); } else { // error
} }
encoder_t *encoder_get_camera_encoder_structer(void) { return &m_encoders[CAMERA_ENCODER]; }
encoder_t *encoder_get_driven_encoder_gear_structer(void) { return &m_encoders[DRIVEN_ENCODER_GEAR]; }
|