108个传感器之3️⃣:红外线接收

362 阅读2分钟

序言

最近在用 arduino uno 开发智能小车,红外线无线操作的时候碰到了一些问题,参照网上的教程基本都是老掉牙的很丑代码或者方案... 好好好,既然没有现成的,那就自己参考官方案例琢磨,通过本文记录一下,也希望能对更多人有所帮助。

前期准备

  1. arduino uno开发板 x 1

  2. 红外线遥控器 x 1

    红外线遥控器

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

  4. 杜邦线若干

环境配置

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

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

1. 安装 IRremote 依赖

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

IRremote

2. 线路连接

传感器 GND 连 uno GND,VCC 连接 3.3v 或者 5v,DAT 我这里由于其它端口暂时被占用,连接的是 10 号引脚(理论上2、3、5、6、9、10、11 都可)。

连接示例

开发流程

记得插上你的开发设备,并通电。

1. 测试红外线设备

把下面的代码烧录进 arduino 设备。然后打开串口监视页面,按下遥控器,看终端是否会打印出值。如果返回,那说明正常连接成功,可以进行下一步了。

#include <Arduino.h>
#include <IRremote.hpp>void setup() {
    Serial.begin(9600);
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
}
​
void loop() {
    if (IrReceiver.decode()) {
        if (IrReceiver.decodedIRData.protocol != UNKNOWN) {
            Serial.println(IrReceiver.decodedIRData.command);    // 打印接收到的值
            IrReceiver.resume();
            IrReceiver.printIRResultShort(&Serial);
            IrReceiver.printIRSendUsage(&Serial);
        } 
    }
}

2. 写入 LED 判断语句

#include <Arduino.h>
#include <IRremote.hpp>int ledPin = A5;  // 我这里给 LED 的引脚是 A5
int LED_CODE = 22;       //  led 对应的按钮,数字0 的code
bool ledState = false; 
​
void setup() {
    Serial.begin(9600);
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);  // 初始化红外线接收模块
}
​
void loop() {
    // 当接收到红外线信号时
    if (IrReceiver.decode()) {
        if (IrReceiver.decodedIRData.protocol != UNKNOWN) {
            switch (IrReceiver.decodedIRData.command) {
              case LED_CODE:
                  ledState = !ledState; // 切换LED的状态
                  digitalWrite(ledPin, ledState ? HIGH : LOW); // 设置LED的状态
                  break;
              default:
                  // 其他情况不作处理
                  break;
            }
            IrReceiver.resume();
            IrReceiver.printIRResultShort(&Serial);
            IrReceiver.printIRSendUsage(&Serial);
        } 
    }
}

把代码上传到uno,不出意外的话,led就会随着点击数字0键,开启关闭切换。

小结

完整案例我加入了控制小车移动的控制,包括蜂鸣器做喇叭的代码,虽然小车移动左右方向还有点问题,但是问题不大,今天先写到这里。

首发:dev 的艺术空间