diff --git a/MDK-ARM/AUTO_CHASSIS.uvoptx b/MDK-ARM/AUTO_CHASSIS.uvoptx index 528face..9f552dc 100644 --- a/MDK-ARM/AUTO_CHASSIS.uvoptx +++ b/MDK-ARM/AUTO_CHASSIS.uvoptx @@ -163,17 +163,27 @@ 1 1 - rc_ctrl,0x0A + aaaaaaa,0x0A 2 1 - cmd,0x0A + cmd_rc,0x0A 3 1 - chassis,0x0A + cmd,0x0A + + + 4 + 1 + rc_ctrl,0x0A + + + 5 + 1 + buf0ready,0x0A diff --git a/MDK-ARM/ELE_CHASSIS/AUTO_CHASSIS.axf b/MDK-ARM/ELE_CHASSIS/AUTO_CHASSIS.axf index 4ba7c53..516a8b7 100644 Binary files a/MDK-ARM/ELE_CHASSIS/AUTO_CHASSIS.axf and b/MDK-ARM/ELE_CHASSIS/AUTO_CHASSIS.axf differ diff --git a/User/device/cmd.c b/User/device/cmd.c index bc481bc..973711c 100644 --- a/User/device/cmd.c +++ b/User/device/cmd.c @@ -38,10 +38,12 @@ return 0; static void CMD_RcLogic(const CMD_RC_t *rc, CMD_t *cmd) { /* 将操纵杆的对应值转换为底盘的控制向量和云台变化的欧拉角 */ - - +// RC_dr16 , +// RC_r12ds +// #ifdef r12ds_t /*乐迪反馈值转换(-1 -- 1 )范围*/ + if(rc->ch_x<0) cmd->Vx =map_fp32(rc->ch_x,-337,0,-1,0); else cmd->Vx =map_fp32(rc->ch_x,0,310,0,1); @@ -55,7 +57,10 @@ static void CMD_RcLogic(const CMD_RC_t *rc, CMD_t *cmd) { cmd->key_ctrl_l = rc->key [0]; cmd->key_ctrl_r = rc->key [1]; + #elif defined(dr16_t) + + cmd->Vx = rc->ch_r_x; cmd->Vy = -rc->ch_r_y; @@ -66,14 +71,14 @@ static void CMD_RcLogic(const CMD_RC_t *rc, CMD_t *cmd) { cmd->key_ctrl_l = rc->sw_l; cmd->key_ctrl_r = rc->sw_r ; - - #endif + + } @@ -90,15 +95,15 @@ static void CMD_RcLostLogic(CMD_t *cmd){ int8_t CMD_ParseRc(CMD_t *cmd,CMD_RC_t *rc){ if (cmd == NULL) return -1; if (rc == NULL) return -1; -#ifdef dr16_t +//#ifdef dr16_t /*c当rc丢控时,恢复机器人至默认状态 */ - if ((rc->ch_w == CMD_SW_ERR) || (rc->ch_y == CMD_SW_ERR)) { - CMD_RcLostLogic(cmd); - } else { +// if ((rc->ch_w == CMD_SW_ERR) || (rc->ch_y == CMD_SW_ERR)) { +// CMD_RcLostLogic(cmd); +// } else { CMD_RcLogic(rc, cmd); - } +// } -#endif +//#endif return 0; } diff --git a/User/device/cmd.h b/User/device/cmd.h index d4d80c3..dd0a713 100644 --- a/User/device/cmd.h +++ b/User/device/cmd.h @@ -71,16 +71,10 @@ typedef enum { CMD_SW_DOWN = 2, } CMD_SwitchPos_t; -typedef enum -{ - RC_dr16 , - RC_r12ds -}remote_type; /*遥控器值,使用CMD_RcLogic函数传入CMD_t结构体*/ typedef struct { - remote_type RC_type; #ifdef dr16_t float ch_l_x; /* 遥控器左侧摇杆横轴值,上为正 */ diff --git a/User/device/dr16.c b/User/device/dr16.c index e6d316b..a632fc3 100644 --- a/User/device/dr16.c +++ b/User/device/dr16.c @@ -60,7 +60,7 @@ static bool DR16_DataCorrupted(const DR16_t *dr16) { int8_t DR16_Init(DR16_t *dr16) { if (dr16 == NULL) return DEVICE_ERR_NULL; if ((thread_alert = osThreadGetId()) == NULL) return DEVICE_ERR_NULL; - + BSP_UART_RegisterCallback(BSP_UART_REMOTE, BSP_UART_IDLE_LINE_CB, DR16_RxCpltCallback); return DEVICE_OK; @@ -106,7 +106,7 @@ int8_t DR16_ParseRC(const DR16_t *dr16, CMD_RC_t *rc) { } else { memset(rc, 0, sizeof(*rc)); } - + rc->RC_type = RC_dr16; float full_range = (float)(DR16_CH_VALUE_MAX - DR16_CH_VALUE_MIN); rc->ch_r_x = 2 * ((float)dr16->data.ch_r_x - DR16_CH_VALUE_MID) / full_range; diff --git a/User/device/dr16.h b/User/device/dr16.h index db37183..0eca50c 100644 --- a/User/device/dr16.h +++ b/User/device/dr16.h @@ -49,4 +49,5 @@ int8_t DR16_HandleOffline(const DR16_t *dr16, CMD_RC_t *rc); #endif -#endif \ No newline at end of file +#endif + diff --git a/User/device/r12ds.c b/User/device/r12ds.c index 3bc7b8e..e5bbe97 100644 --- a/User/device/r12ds.c +++ b/User/device/r12ds.c @@ -21,7 +21,7 @@ extern DMA_HandleTypeDef hdma_usart3_rx; osThreadId_t thread_alert; -int buf0ready =0; +int buf0ready =0; /*不起作用*/ int buf1ready =0; /* Private function -------------------------------------------------------- */ @@ -124,6 +124,7 @@ int8_t R12ds_DMA_Init(uint8_t *rx1_buf, uint8_t *rx2_buf, uint16_t dma_buf_num) } + int8_t sbus_to_rc(volatile const uint8_t *sbus_buf, CMD_RC_t *rc_ctrl) { if (sbus_buf == NULL || rc_ctrl == NULL) @@ -131,6 +132,7 @@ int8_t sbus_to_rc(volatile const uint8_t *sbus_buf, CMD_RC_t *rc_ctrl) return 0; } + rc_ctrl->ch_x = (sbus_buf[1] | (sbus_buf[2] << 8)) & 0x07ff; //Channel 1 x rc_ctrl->ch_y = ((sbus_buf[2] >> 3) | (sbus_buf[3] << 5)) & 0x07ff; //Channel 2 mul rc_ctrl->mul= ((sbus_buf[3] >> 6) | (sbus_buf[4] << 2) | //Channel 3 y @@ -172,10 +174,19 @@ int8_t sbus_to_rc(volatile const uint8_t *sbus_buf, CMD_RC_t *rc_ctrl) if(rc_ctrl->ch_y>-15&&rc_ctrl->ch_y<15) rc_ctrl->ch_y=0; if(rc_ctrl->ch_x>-15&&rc_ctrl->ch_x<15) rc_ctrl->ch_x=0; if(rc_ctrl->mul>=0&&rc_ctrl->mul<=3) rc_ctrl->mul=0; - if(rc_ctrl->ch_w>-15&&rc_ctrl->ch_w<15) rc_ctrl->ch_w=0; + if(rc_ctrl->ch_w>-15&&rc_ctrl->ch_w<15) rc_ctrl->ch_w=0; + + + if( (((int16_t)sbus_buf[16] >> 1 | ((int16_t)sbus_buf[17] << 7 )) & 0x07FF )<380) rc_ctrl->offline =1; //遥控器掉线 + else rc_ctrl->offline =0; + return 0; } + + + + #endif diff --git a/User/device/r12ds.h b/User/device/r12ds.h index 389aa59..111c3bc 100644 --- a/User/device/r12ds.h +++ b/User/device/r12ds.h @@ -21,8 +21,6 @@ int8_t R12ds_DMA_Init(uint8_t *rx1_buf, uint8_t *rx2_buf, uint16_t dma_buf_num); int8_t sbus_to_rc(volatile const uint8_t *sbus_buf,CMD_RC_t *rc_ctrl); -//void R12ds_HandleOffline(void); - diff --git a/User/task/r12ds_task.c b/User/task/r12ds_task.c index d12f02c..5dd5771 100644 --- a/User/task/r12ds_task.c +++ b/User/task/r12ds_task.c @@ -25,13 +25,11 @@ CMD_RC_t *R12ds_DataGet(){ } -//void R12ds_HandleOffline(void) { -// CMD_RC_t *rc; -// rc = R12ds_DataGet(); - -// memset(rc, 0, sizeof(*rc)); -// rc->offline = 1;//用作遥控器断电后急停使用 -//} +void R12ds_HandleOffline(void) { + CMD_RC_t *rc; + rc = R12ds_DataGet(); + memset(rc, 0, sizeof(rc->ch_x) + sizeof(rc->mul) + sizeof(rc->ch_y) + sizeof(rc->ch_w) + sizeof(rc->key)); +} #endif @@ -54,19 +52,17 @@ void Task_r12ds(void *argument) #endif -// if(R12Buf0_WaitDmaCplt(1)) -// { - sbus_to_rc(sbus_rx_buf[0],&cmd_rc); -// R12ds_HandleOffline(); -// } -// else if(R12Buf1_WaitDmaCplt(1)) -// { -// sbus_to_rc(sbus_rx_buf[1],&cmd_rc); -// } + sbus_to_rc(sbus_rx_buf[0],&cmd_rc); + + if(cmd_rc.offline ==1) + { + R12ds_HandleOffline(); + } + osMessageQueueReset(task_runtime.msgq.cmd.raw.rc); osMessageQueuePut(task_runtime.msgq.cmd.raw.rc,(&cmd_rc),0,0); - tick += delay_tick; /* 计算下一个唤醒时刄1ķ*/ + tick += delay_tick; /* 计算下一个唤醒时*/ osDelay(10); }