108个传感器之3:红外线接收点灯

序言

最近在用 arduino uno 开发智能小车,红外线无线操作的时候碰到了一些问题,参照网上的教程基本都是老掉牙的很丑代码或者方案... 

好好好,既然没有现成的,那就自己参考官方案例琢磨,通过本文记录一下,也希望能对更多人有所帮助。

前期准备

  1. arduino 开发板 x 1

  2. 红外线遥控器 x 1

    ee01f02180fe56e375918132459c5f36.jpeg

  3. Ky-022 红外线接收模块 x 1

  4. 杜邦线若干

环境配置

这个项目我是基于 platformIO + vscode 的形式开发,更符合时代的进步(arduino-ide是什么玩意儿...界面看吐了都)

我愿称这个搭配为最强生产力,至少对于做前端的我来说很好上手。

1. 安装 IRremote 依赖

这个库主要是来负责接收红外线信号,使用起来也是相当的方便。首先去到 platformIO 的首页,进入 library 找到这个库下载就行。

### 使用 STM32 和 HX1838 实现红外遥控控制 LED 灯 #### 准备工作 为了实现这一目标,需要准备如下硬件组件: - STM32 开发板一块 - HX1838 红外接收头一个 - WS2812B 或其他类型的可编程 RGB LED 模块若干 - 连接线若干根 确保开发环境已经配置好,并安装了必要的库文件用于处理红外信号和驱动LED。 #### 接口连接说明 HX1838 的 VCC 引脚接到 5V 电源上;GND 引脚接地;OUT 输出引脚则需连至 STM32 上的一个 GPIO 输入捕获端口。对于WS2812B来说,则将其 DIN 数据输入引脚与另一个GPIO相连作为PWM输出来发送数据给LED条带[^1]。 #### 软件设计思路 程序主要分为两大部分:一是对接收到的红外编码进行解码分析得到按键信息;二是依据解析后的命令去操作相应的LED状态变化逻辑。 针对上述需求编写C语言源代码如下所示: ```c #include "stm32f1xx_hal.h" #include "irremote.h" #define LED_PIN GPIO_PIN_13 #define LED_PORT GPIOD // 初始化函数 void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); IRrecv irrecv(GPIO_PIN_IR); // 假设IR传感器连接到了定义好的PIN decode_results results; while (true) { if(irrecv.decode(&results)){ switch(results.value){ // 对应不同的键值执行不同动作 case KEY_ONOFF:// 关机/开机键 Toggle_LED(LED_PIN, LED_PORT); break; default: break; } irrecv.resume(); // Continue receiving } } } // 切换LED开关状态 void Toggle_LED(uint16_t pin, GPIO_TypeDef* port){ HAL_GPIO_TogglePin(port,pin); } ``` 这段代码实现了基本的功能框架,在`main()`循环里不断监听来自HX1838传来的脉冲序列,并尝试匹配预存于内部表中的标准协议模板。一旦成功识别出特定模式下的按压事件就会触发相应分支内的指令集完成实际的任务——这里是改变指定IO管脚上的高低电平从而达到点亮或熄灭外部负载的目的[^2]。 #### 注意事项 由于某些品牌的产品可能采用了私有的加密算法或者其他复杂机制使得其发出的信息难以被第三方解读模仿,所以在实践中可能会遇到兼容性方面的问题。因此建议先从小型家电如风扇、简易电视机等开始测试再逐步扩大适用范围。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值