|
#每日话题# CW32L012 帅照: 不说废话,先上资料~ CW32L012用户手册下载: 官方系统教学文档:
开箱介绍
小车功能实现:红外遥控
char oled_disbuff[25];
uint32_t ir_cmd = 0; // 红外指令码
uint8_t car_state, last_car_state;
int16_t speed = 0;
uint8_t change_car_state_flag;
// 函数声明
static void decode_ir_control(void);
static void update_car_state(void);
static void update_display(void);
static void initialize_hardware(void);
/**
* @brief 主函数
*/
int32_t main(void)
{
// 硬件初始化
initialize_hardware();
// 设置初始状态
car_state = 0; // 上电默认停止
speed = 200; // 默认速度
// 主循环
while (1)
{
// 核心:解码红外指令并控制小车
decode_ir_control();
// 更新小车运动状态
update_car_state();
// 更新OLED显示,实时反馈
update_display();
}
}
/**
* @brief 硬件初始化
*/
static void initialize_hardware(void)
{
SYSCTRL_Configuration();
LED_Init();
Buz_Init();
IR_Init(); // 红外接收初始化
OLED_Init();
Motor_Init();
ADC_Init(); // 用于电源监测
}
/**
* @brief 解码红外指令并执行相应动作
*/
static void decode_ir_control(void)
{
// 获取红外码值,使用常见的NEC编码格式
if(IR_GetDecodeResult(&ir_cmd)) {
// 根据不同的红外码值执行不同功能
switch(ir_cmd) {
case 0xFF02FD: // [电源]键:急停
car_state = 0;
Buz_PlayTone(1500, 200); // 高音提示音
break;
case 0xFF629D: // [VOL+]:前进
car_state = 1;
break;
case 0xFFA857: // [VOL-]:后退
car_state = 2;
break;
case 0xFF22DD: // [|<<]:左转
car_state = 3;
break;
case 0xFFC23D: // [>>|]:右转
car_state = 4;
break;
case 0xFF6897: // [1]键:低速
speed = 150;
break;
case 0xFF9867: // [2]键:中速
speed = 200;
break;
case 0xFFB04F: // [3]键:高速
speed = 250;
Buz_PlayTone(800, 100); // 高速警告音
break;
default:
break;
}
// 每次有效按键都让LED闪烁一下,提供触觉反馈
LED_Toggle();
}
}
/**
* @brief 更新小车状态
*/
static void update_car_state(void)
{
switch(car_state) {
case 0: // 停止
Car_Stop();
LED_Off();
break;
case 1: // 前进
Car_Run(speed);
break;
case 2: // 后退
Car_Run(-speed);
break;
case 3: // 左转
Car_Left(speed);
break;
case 4: // 右转
Car_Right(speed);
break;
}
}
/**
* @brief 更新OLED显示
*/
static void update_display(void)
{
OLED_Printf(1, 0, OLED_6X8, "IR Control Ready");
OLED_Printf(1, 16, OLED_6X8, "State:%d", car_state);
OLED_Printf(1, 32, OLED_6X8, "Speed:%d", speed);
OLED_Printf(1, 48, OLED_6X8, "CMD:%08lX", ir_cmd); // 显示最新红外码
OLED_Update();
}
简单来说,小车上电后即进入红外监听模式。我用的是一款通用的NEC编码红外遥控器,无需额外配置,代码已经将常见的按键(如音量键、曲目切换键)映射为了小车的行进指令。按键响应迅速,控制精准,几乎没有延迟。
总结通过这次测评,红外遥控这种经典的控制方式给了我很大的惊喜。它不需要复杂的蓝牙配对或网络配置,即按即控,稳定可靠,非常适合在实验室或者家中固定场所进行演示和调试。灵眸小车完善的红外解码库使得这一功能的实现变得异常简单。对于初学者而言,从红外遥控入门来理解中断、解码和状态机这些概念,是再合适不过的了。这台小车再一次证明,强大的底层框架能让开发者专注于功能与创意。如果你也想体验这种“指哪打哪”的经典控制乐趣,CW32社区的灵眸小车绝对是一个不会让你失望的选择。 友情链接(【CW32L012小车测评】到手小车测评其中基本功能 - 哔哩哔哩) 参考博客:STM32F103正点原子学习笔记系列——REMOTE - 知乎 红外收发通信模块-IR333-IRM3638,———EEWorld参考设计中心
|