如何在Elecfreaks Cutebot机器人上解码红外遥控器及第三方设备按键?
解码第三方红外遥控器按键(Elecfreaks Cutebot / micro:bit)
完全可以解码电视、LED灯串等第三方红外遥控器的按键,核心是先捕获目标遥控器的红外编码,再修改程序匹配这些编码。以下是具体操作步骤:
1. 捕获第三方遥控器的红外编码
Cutebot的红外接收引脚为P1,编写简单程序即可捕获任意红外按键的脉冲序列或编码:
// 初始化红外接收引脚 let irPin = pins.createDigitalPin(DigitalPin.P1) let pulseTimes = [] // 捕获脉冲时长 irPin.onPulsed(DigitalPin.P1, PulseValue.Low, function () { let duration = input.runningTime() - pulseTimes[pulseTimes.length - 1] pulseTimes.push(duration) // 捕获足够数据后输出到串口 if (pulseTimes.length > 64) { serial.writeLine(pulseTimes.toString()) basic.showString("OK") pulseTimes = [] } }) basic.forever(function () { if (pulseTimes.length === 0) { pulseTimes.push(input.runningTime()) } })
将micro:bit通过USB连接电脑,打开MakeCode的串口监视器,按下第三方遥控器的每个按键,记录输出的脉冲序列;也可以直接调用cutebot.irRead()函数读取转好的十六进制编码(官方库已支持基础转码)。
2. 修改程序匹配第三方编码
拿到编码后,替换官方示例中的按键判断逻辑即可。比如捕获到电视遥控器音量+键的编码为0x10EF,代码示例如下:
cutebot.onIrButtonPressed(CutebotIrButton.Any, function () { let code = cutebot.irRead() // 匹配第三方遥控器按键 if (code === 0x10EF) { cutebot.setMotorSpeed(50, 50) // 示例:机器人前进 } else if (code === 0x11EE) { cutebot.setMotorSpeed(0, 0) // 示例:机器人停止 } })
如果官方库的irRead()无法识别非配套遥控器的编码,直接用第一步捕获的脉冲序列进行对比判断即可。
官方参考内容翻译
原参考链接的核心信息翻译如下:
材料准备
- Elecfreaks Cutebot机器人 ×1
- BBC micro:bit主板 ×1
- Cutebot配套红外遥控器 ×1
- USB数据线 ×1
原理说明
Cutebot的红外模块采用NEC红外协议,这是目前家电遥控器最常用的标准之一。多数电视、LED灯串遥控器都遵循该协议,只要目标遥控器采用NEC协议,就可以被Cutebot解码。
注意事项
- 测试时避免强光直射红外接收器,防止干扰信号捕获
- 少数小众遥控器可能采用RC5等其他协议,这种情况需要修改程序中的脉冲解析逻辑,适配对应协议的时序规则
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

