Browse Source

【已调用】规整三维数组代码

paint_robot_new-v1.5
Lizongdi 1 week ago
parent
commit
6cb97928a6
  1. 11
      controller/include/msp_MK32.h
  2. 40
      controller/msp_MK32.c
  3. 10
      project/paint_robot_new/paint_robot_new.c

11
controller/include/msp_MK32.h

@ -109,6 +109,17 @@ typedef enum {
typedef void (*ActionFunc)(void); typedef void (*ActionFunc)(void);
extern const ActionFunc g_ActionTable[KEY_MAX][MODE_MAX][SUB_MODE_MAX];
#define SAFE_DISPATCH(key) \
do { \
if ((key) < KEY_MAX) \
{ \
ActionFunc _fn = g_ActionTable[(key)][(_iMode)][(_iSubMode)]; \
if (_fn) _fn(); \
} \
} while (0)
/*==============================================* /*==============================================*
* project-wide global variables * * project-wide global variables *
*----------------------------------------------*/ *----------------------------------------------*/

40
controller/msp_MK32.c

@ -145,53 +145,41 @@ void controller_init(void)
(void)osThreadNew(Read_MK32, NULL, &MK32_Task_attributes); (void)osThreadNew(Read_MK32, NULL, &MK32_Task_attributes);
} }
extern const ActionFunc g_ActionTable[KEY_MAX][MODE_MAX][SUB_MODE_MAX];
#define SAFE_DISPATCH(key, mode, submode) \
do { \
if ((key) < KEY_MAX && \
(mode) < MODE_MAX && \
(submode) < SUB_MODE_MAX) { \
ActionFunc _fn = g_ActionTable[(key)][(mode)][(submode)]; \
if (_fn) _fn(); \
} \
} while (0)
WEAK void MK32_Key_Func(SP_MSP_MK32_Button *_pstMK32, int _iMode, int _iSubMode) WEAK void MK32_Key_Func(SP_MSP_MK32_Button *_pstMK32, int _iMode, int _iSubMode)
{ {
if (_iMode <= MODE_NULL || _iMode >= MODE_MAX) return; if (_iMode <= MODE_NULL || _iMode >= MODE_MAX) return;
// 急停 // 急停
if (_pstMK32->CH8_SE == -1000 && _pstMK32->CH9_SF == -1000) if (_pstMK32->CH8_SE == -1000 && _pstMK32->CH9_SF == -1000)
{ {
SAFE_DISPATCH(E_STOP, _iMode, _iSubMode); SAFE_DISPATCH(E_STOP);
return; return;
} }
// 根据模式判断换道(仅在竖直向左或向右生效) // 根据模式判断换道(仅在竖直向左或向右生效)
if (_pstMK32->CH4_SA == 1000) if (_pstMK32->CH4_SA == 1000)
{ {
SAFE_DISPATCH(KEY_SA_UP, _iMode, _iSubMode); SAFE_DISPATCH(KEY_SA_UP);
return; return;
} }
else if (_pstMK32->CH4_SA == -1000) else if (_pstMK32->CH4_SA == -1000)
{ {
SAFE_DISPATCH(KEY_SA_DOWN, _iMode, _iSubMode); SAFE_DISPATCH(KEY_SA_DOWN);
return; return;
} }
else // 重置前进计时器以便下一次换道重新计数 else // 重置前进计时器以便下一次换道重新计数
{ {
SAFE_DISPATCH(KEY_SA_DEFAULT, _iMode, _iSubMode); SAFE_DISPATCH(KEY_SA_DEFAULT);
} }
// 自动巡航 // 自动巡航
if (_pstMK32->CH5_SB == -1000) if (_pstMK32->CH5_SB == -1000)
{ {
SAFE_DISPATCH(KEY_SB_UP, _iMode, _iSubMode); SAFE_DISPATCH(KEY_SB_UP);
return; return;
} }
else if(_pstMK32->CH5_SB == 1000) else if(_pstMK32->CH5_SB == 1000)
{ {
SAFE_DISPATCH(KEY_SB_DOWN, _iMode, _iSubMode); SAFE_DISPATCH(KEY_SB_DOWN);
return; return;
} }
@ -199,21 +187,21 @@ WEAK void MK32_Key_Func(SP_MSP_MK32_Button *_pstMK32, int _iMode, int _iSubMode)
// 开关喷枪 // 开关喷枪
if (_pstMK32->CH6_SC == -1000) if (_pstMK32->CH6_SC == -1000)
{ {
SAFE_DISPATCH(KEY_SC_UP, _iMode, _iSubMode); SAFE_DISPATCH(KEY_SC_UP);
} }
else if (_pstMK32->CH6_SC == 1000) else if (_pstMK32->CH6_SC == 1000)
{ {
SAFE_DISPATCH(KEY_SC_DOWN, _iMode, _iSubMode); SAFE_DISPATCH(KEY_SC_DOWN);
} }
else else
{ {
SAFE_DISPATCH(KEY_SC_DEFAULT, _iMode, _iSubMode); SAFE_DISPATCH(KEY_SC_DEFAULT);
} }
// 【注意!!!】摇杆行程死区判断开始,除摇杆以外按键在上边都处理完,不然走不下去 // 【注意!!!】摇杆行程死区判断开始,除摇杆以外按键在上边都处理完,不然走不下去
if (abs(_pstMK32->CH2_LY_V) <= g_stCV.Joy_Sticker_Value_Allowance && abs(_pstMK32->CH3_LY_H) <= g_stCV.Joy_Sticker_Value_Allowance) if (abs(_pstMK32->CH2_LY_V) <= g_stCV.Joy_Sticker_Value_Allowance && abs(_pstMK32->CH3_LY_H) <= g_stCV.Joy_Sticker_Value_Allowance)
{ {
SAFE_DISPATCH(JOY_DEFAULT, _iMode, _iSubMode); SAFE_DISPATCH(JOY_DEFAULT);
return; return;
} }
// 【注意!!!】摇杆行程死区判断结束,摇杆处理都放在这以后,否则行程死区可能不生效 // 【注意!!!】摇杆行程死区判断结束,摇杆处理都放在这以后,否则行程死区可能不生效
@ -223,19 +211,19 @@ WEAK void MK32_Key_Func(SP_MSP_MK32_Button *_pstMK32, int _iMode, int _iSubMode)
if (abs(angle - 90) <= g_stCV.Joy_Sticker_Angle_Allowance) if (abs(angle - 90) <= g_stCV.Joy_Sticker_Angle_Allowance)
{ {
SAFE_DISPATCH(JOY_LEFT_UP, _iMode, _iSubMode); SAFE_DISPATCH(JOY_LEFT_UP);
} }
else if (abs(angle - (-90)) <= g_stCV.Joy_Sticker_Angle_Allowance) else if (abs(angle - (-90)) <= g_stCV.Joy_Sticker_Angle_Allowance)
{ {
SAFE_DISPATCH(JOY_LEFT_DWON, _iMode, _iSubMode); SAFE_DISPATCH(JOY_LEFT_DWON);
} }
else if (abs(angle - 0) <= g_stCV.Joy_Sticker_Angle_Allowance) else if (abs(angle - 0) <= g_stCV.Joy_Sticker_Angle_Allowance)
{ {
SAFE_DISPATCH(JOY_LEFT_RIGHT, _iMode, _iSubMode); SAFE_DISPATCH(JOY_LEFT_RIGHT);
} }
else if (abs(angle - 180) <= g_stCV.Joy_Sticker_Angle_Allowance || abs(angle - (-180)) <= g_stCV.Joy_Sticker_Angle_Allowance) else if (abs(angle - 180) <= g_stCV.Joy_Sticker_Angle_Allowance || abs(angle - (-180)) <= g_stCV.Joy_Sticker_Angle_Allowance)
{ {
SAFE_DISPATCH(JOY_LEFT_LEFT, _iMode, _iSubMode); SAFE_DISPATCH(JOY_LEFT_LEFT);
} }
else else
{ {

10
project/paint_robot_new/paint_robot_new.c

@ -50,6 +50,7 @@ static PV_struct_define g_stPV;
static IV_struct_define g_stIV; static IV_struct_define g_stIV;
static int g_Is_All_Button_Reset = 0; // 1表示按钮正常工作,0表示需要复位 static int g_Is_All_Button_Reset = 0; // 1表示按钮正常工作,0表示需要复位
static int g_ichangLineState = 0; // 换道状态,0表示起始状态,1表示第一次旋转完成,2表示计时行走 完成 static int g_ichangLineState = 0; // 换道状态,0表示起始状态,1表示第一次旋转完成,2表示计时行走 完成
static int g_bNotTable = 0;
static int g_iLeft_Compensation = 0; static int g_iLeft_Compensation = 0;
static int g_iRight_Compensation = 0; static int g_iRight_Compensation = 0;
@ -294,6 +295,10 @@ static void Robot_Stop_After(void)
{ {
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_CMD_STOP_AFTER, NULL, 0); MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_CMD_STOP_AFTER, NULL, 0);
} }
else
{
MsgCenter_SendTo(MODULE_NAME_MOTOR, CMD_STOP_ALL, NULL, 0);
}
} }
static void Robot_Stop(void) static void Robot_Stop(void)
@ -493,6 +498,7 @@ static void Move_Halt_AngleError(void)
void MK32_Key_Func(SP_MSP_MK32_Button *_pstMK32, int _iMode, int _iSubMode) void MK32_Key_Func(SP_MSP_MK32_Button *_pstMK32, int _iMode, int _iSubMode)
{ {
if (0 == g_bNotTable) g_bNotTable = 1;
// 急停 // 急停
if (_pstMK32->CH8_SE == -1000 && _pstMK32->CH9_SF == -1000) if (_pstMK32->CH8_SE == -1000 && _pstMK32->CH9_SF == -1000)
{ {
@ -925,8 +931,8 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
lua_print("PV Info\n"); lua_print("PV Info\n");
lua_print("{%d, %d, %d, %d, %d, %ld}\n", lua_print("{%d, %d, %d, %d, %d, %ld}\n",
g_stPV.RunMode, g_stPV.RobotSpeed, g_stPV.LaneChangeDistance, (int)g_stPV.Vertical_Calibration, g_stPV.IV_IsRestart_Notified, (long long)g_stPV.TimeStamp); g_stPV.RunMode, g_stPV.RobotSpeed, g_stPV.LaneChangeDistance, (int)g_stPV.Vertical_Calibration, g_stPV.IV_IsRestart_Notified, (long long)g_stPV.TimeStamp);
lua_print("\niPaint = %d\ng_stAngleError_Ctl.m_iPaintState = %d\ng_stAngleError_Ctl.m_iAnglelock = %d\ng_stAngleError_Ctl.m_ipaintOffCount = %d\ng_Is_All_Button_Reset = %d\n", lua_print("\niPaint = %d\ng_stAngleError_Ctl.m_iPaintState = %d\ng_stAngleError_Ctl.m_iAnglelock = %d\ng_stAngleError_Ctl.m_ipaintOffCount = %d\ng_Is_All_Button_Reset = %d\ng_bNotTable = %d\n",
g_iPaint, g_stAngleError_Ctl.m_iPaintState, g_stAngleError_Ctl.m_iAnglelock, g_stAngleError_Ctl.m_ipaintOffCount, g_Is_All_Button_Reset); g_iPaint, g_stAngleError_Ctl.m_iPaintState, g_stAngleError_Ctl.m_iAnglelock, g_stAngleError_Ctl.m_ipaintOffCount, g_Is_All_Button_Reset, g_bNotTable);
break; break;
} }
default: default:

Loading…
Cancel
Save