玩转X-CTR100 l STM32F4 l PS2无线手柄-4WD智能小车
我造轮子,你造车,创客一起造起来!更多塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】
前面已介绍X-CTR100控制器解码PS2无线手柄,本文继续前文,使用PS2无线手柄,实现4WD智能小车的控制,实现两种控制模式,方向模式和坦克模式。
例程-PS2无线手柄-4WD智能小车(方向模式)
使用4个方向按键,实现智能小车前进、后退、原地左转、原地右转四个运动操作。
硬件说明
硬件资源:
- 串口UART1
- LC扩展接口(非串口,作为普通IO口使用)
- RO、RP接口,控制电机
- X-CTR100-MDX2电机驱动模块或自备其它直流电机驱动模块(自备)
- PS2无线手柄(需自备)
PS2手柄连接关系如下,
DATA——LC接口-D6
COMM——LC接口-D5
GND——LC接口-GND
VCC——LC接口-3.3V
ATT——LC接口-D7
CLOCK——LC接口-D4
ACK——LC接口-D3
特别说明,注意左右电机连接顺序和电机正反连接顺序,如果不能按照预期动作,请自行调整,或修改程序代码。
软件说明
主程序代码如下。
int main(void) { //X-CTR100初始化 AX_Init(115200); printf("***X-CTR100 PS2无线手柄例程***\r\n\r\n");
//功能配置 AX_MOTOR_TIM1_MNOP_Init(20); //初始化电机控制端口,PWM频率为20KHz AX_PS2_Init(); //PS2初始化 AX_Delayms(10);
while (1) { AX_PS2_ScanKey(&my_joystick);
//LR按键控制方式(塔克模式) if((my_joystick.btn1|0xEF) == 0xEF) //前 { AX_MOTOR_TIM1_O_SetSpeed(60); AX_MOTOR_TIM1_P_SetSpeed(60); } else if((my_joystick.btn1|0xBF) == 0xBF) //后 { AX_MOTOR_TIM1_O_SetSpeed(-60); AX_MOTOR_TIM1_P_SetSpeed(-60); } else if((my_joystick.btn1|0xDF) == 0xDF) //右 { AX_MOTOR_TIM1_O_SetSpeed(-60); AX_MOTOR_TIM1_P_SetSpeed(60); } else if((my_joystick.btn1|0x7F) == 0x7F) //左 { AX_MOTOR_TIM1_O_SetSpeed(60); AX_MOTOR_TIM1_P_SetSpeed(-60); } else //停止 { AX_MOTOR_TIM1_O_SetSpeed(0); AX_MOTOR_TIM1_P_SetSpeed(0); }
printf("MODE:%2x BTN1:%2x BTN2:%2x RJOY_LR:%2x RJOY_UD:%2x LJOY_LR:%2x LJOY_UD:%2x\r\n", my_joystick.mode, my_joystick.btn1, my_joystick.btn2, my_joystick.RJoy_LR, my_joystick.RJoy_UD, my_joystick.LJoy_LR, my_joystick.LJoy_UD);
AX_Delayms(30); } } |
转速可根据自己的4WD转速调试,支持-200~200转速,负为倒转,0为停止。
例程-PS2无线手柄-4WD智能小车(坦克模式)
像坦克车一样使用左右摇杆控制小车,左摇杆控制左轮前进后退,可调速,右摇杆控制右轮。
硬件说明
硬件资源:
- 串口UART1
- LC扩展接口(非串口,作为普通IO口使用)
- RO、RP接口,控制电机
- X-CTR100-MDX2电机驱动模块或自备其它直流电机驱动模块(自备)
- PS2无线手柄(需自备)
PS2手柄连接关系如下,
DATA——LC接口-D6
COMM——LC接口-D5
GND——LC接口-GND
VCC——LC接口-3.3V
ATT——LC接口-D7
CLOCK——LC接口-D4
ACK——LC接口-D3
特别说明,注意左右电机连接顺序和电机正反连接顺序,如果不能按照预期动作,请自行调整,或修改程序代码。
软件说明
主程序代码如下。
int main(void) { //X-CTR100初始化 AX_Init(115200); printf("***X-CTR100 PS2无线手柄例程***\r\n\r\n");
//功能配置 AX_MOTOR_TIM1_MNOP_Init(20); //初始化电机控制端口,PWM频率为20KHz AX_PS2_Init(); //PS2初始化 AX_Delayms(1);
while (1) { AX_PS2_ScanKey(&my_joystick);
//双摇杆控制方式(塔克模式) //左摇杆控制左轮前进后退,右摇杆控制右轮 AX_MOTOR_TIM1_O_SetSpeed((0x7F-my_joystick.RJoy_UD)/2); AX_MOTOR_TIM1_P_SetSpeed((0x7F-my_joystick.LJoy_UD)/2);
//打印手柄键值 printf("MODE:%2x BTN1:%2x BTN2:%2x RJOY_LR:%2x RJOY_UD:%2x LJOY_LR:%2x LJOY_UD:%2x\r\n", my_joystick.mode, my_joystick.btn1, my_joystick.btn2, my_joystick.RJoy_LR, my_joystick.RJoy_UD, my_joystick.LJoy_LR, my_joystick.LJoy_UD);
AX_Delayms(30); } } |