序言
最近在用 arduino 开发智能小车,开发红外线模块的时候碰到了一些问题,参照网上的教程基本都是老掉牙的代码或者方案…,好好好,既然没有现成的,那就自己参考官方案例琢磨,通过本文记录一下,也希望能对更多人有所帮助。
前期准备
arduino 开发板 x 1
红外线遥控器 x 1
Ky-022 红外线接收模块 x 1
杜邦线若干
环境配置
这个项目我是基于 platformIO + vscode 的形式开发,更符合时代的进步(arduino-ide是什么玩意儿…界面看吐了都)
我愿称这个搭配为最强生产力,至少对于做前端的我来说很好上手。
1. 安装 IRremote 依赖
这个库主要是来负责接收红外线信号,使用起来也是相当的方便。首先去到 platformIO 的首页,进入 library 找到这个库下载就行。
2. 线路连接
传感器 GND 连 uno GND,VCC 连接 3.3v 或者 5v,DAT 我这里由于其它端口暂时被占用,连接的是 10 号引脚(理论上2、3、5、6、9、10、11 都可)。
开发流程
记得插上你的开发设备,并通电。
1. 测试红外线设备
把下面的代码烧录进 arduino 设备。然后打开串口监视页面,按下遥控器,看终端是否会打印出值。如果返回,那说明正常连接成功,可以进行下一步了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #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 判断语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <Arduino.h> #include <IRremote.hpp>
int ledPin = A5; int LED_CODE = 22; 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; digitalWrite(ledPin, ledState ? HIGH : LOW); break; default: break; } IrReceiver.resume(); IrReceiver.printIRResultShort(&Serial); IrReceiver.printIRSendUsage(&Serial); } } }
|
把代码上传到uno,不出意外的话,led就会随着点击数字0键,开启关闭切换。
小结
完整案例我加入了控制小车移动的控制,包括蜂鸣器做喇叭的代码,虽然小车移动左右方向还有点问题,但是问题不大,今天先写到这里,晚安,玛卡巴卡。
首发:dev 的艺术空间