讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

AniShort
AniShort

AI短剧协同制作平台

立刻MV
立刻MV

低成本歌曲 MV、视频生成

updream

一键生成高质量推广成片

C++怎么调用红外遥控_C++信号解码教程【家电】

阿婷君_7509

阿婷君_7509

发布时间:2026-02-25 15:32:10

|

1017人浏览过

|

来源于php中文网

原创

红外信号需经硬件接收、内核驱动解码(如ir-lirc-codec)后,通过/dev/lirc0或/sys/class/rc/rc0/event传入C++程序;自行解析须处理载波、脉宽容差及协议校验,优先使用lircd服务确保可靠性。

c++怎么调用红外遥控_c++信号解码教程【家电】

红外信号怎么从硬件进到 C++ 程序里

C++ 本身不直接“听”红外,得靠硬件(比如 VS1838B 接 GPIO)+ 驱动层把原始电平变化转成时间戳序列。常见路径是:红外接收头 → GPIO 中断或定时器采样 → 内核驱动(如 ir-lirc-codec)→ 用户态通过 /dev/lirc0 读取解码后的键值,或读 /sys/class/rc/rc0/event 获取原始脉宽数据。

如果你跳过驱动、自己用 GPIO 轮询或中断抓波形,就得处理载波频率(通常 38kHz)、逻辑高/低电平持续时间(比如 NEC 协议中 560μs 脉冲 + 560μs 间隔是“0”,560μs + 1690μs 是“1”),这非常容易因定时精度不足或中断延迟导致误判。

  • 别用 std::this_thread::sleep_for 做延时采样——毫秒级精度根本不够,会漏掉关键边沿
  • Linux 下优先走 lircd 服务,它已适配多数红外接收芯片,ir-ctl -r 可实时查看原始脉宽,比自己写驱动稳妥得多
  • 树莓派等平台若启用了 gpio-ir 内核模块,cat /sys/class/rc/rc0/protocols 应显示 rc-5 nec rc-6 jvc sony 等,说明协议支持已就绪

用 lircd 读键值时为什么总是返回 UNKNOWN

不是 C++ 写错了,大概率是红外协议没对上,或者 lircd 没加载对应解码器。NEC、RC-5、Sony 这些协议的起始码、位数、校验方式全不同,lircd 默认只启用部分协议,且依赖硬件上报的原始脉宽是否落在识别窗口内。

  • 先确认硬件是否真收到信号:mode2 -d /dev/lirc0 —— 如果没输出任何数字,说明物理链路或驱动没通
  • 检查当前启用的协议:ir-keytable -p,若输出里没有 nec,就运行 ir-keytable -p nec 手动开启
  • ir-ctl -r 输出的脉宽序列如果全是 1234 567 1234 567... 这种规律重复值,说明接收头被环境光干扰或供电不稳,不是协议问题
  • C++ 里用 open("/dev/lirc0", O_RDONLY) 后,read() 到的是 struct lirc_scancode,其中 scancode 是厂商码+命令码拼成的整数,别直接当 ASCII 字符打印

自己解析 NEC 脉宽时怎么判断逻辑 0 和 1

NEC 协议里一个比特由“引导脉冲 + 间隔”组成,关键不是绝对时间,而是相对比例。标准定义:脉冲固定约 560μs,之后间隔为 560μs(逻辑 0)或 1690μs(逻辑 1)。但实际硬件有±15% 偏差,所以必须用容差匹配,不能写死 == 560。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

立即学习“C++免费学习笔记(深入)”;

  • 先用 ir-ctl -r 抓一段真实按键输出,观察典型值范围,比如你看到间隔列常在 500–620 和 1500–1800 两簇分布,那就设阈值为 1000μs
  • 起始引导码是 9ms 脉冲 + 4.5ms 间隔,这个必须先识别成功,否则后面全错;很多遥控器发完键值还会发重复码(9ms+2.25ms),要区分避免重复触发
  • C++ 里存脉宽建议用 std::vector<uint32_t></uint32_t>,别用浮点——微秒级整数足够,且避免浮点比较陷阱
  • 别忘了地址码和命令码是反码校验:address + address_inv == 0xFF 且 command + command_inv == 0xFF,这是防误触发的关键一环

为什么同一个遥控器在不同设备上识别结果不一致

根本原因是红外接收电路的滤波特性、GPIO 中断响应延迟、内核驱动采样策略不同。VS1838B 和 IRM-3638 对噪声抑制能力不同,树莓派的 gpio-ir 模块默认用 100μs 分辨率采样,而某些嵌入式平台用 50μs,同样一段波形会被切出不同脉宽序列。

  • 别迷信“标准 NEC”——格力、美的空调遥控器常用自定义 NEC 变种:地址码 16 位、命令码 16 位、无校验,lircd 默认配置不认,得改 /etc/lirc/lirc_options.conf 加 driver = default 和自定义 lircd.conf
  • USB 红外接收器(如 RedRat)自带固件解码,输出已是键值,不经过脉宽阶段,和 GPIO 方案完全不在同一抽象层,混用会导致调试混乱
  • 用 strace -e trace=read,write 跟 C++ 程序读 /dev/lirc0 的行为,能快速确认是数据源问题还是程序解析问题

红外这事,硬件链路比代码难调十倍。脉宽数值漂移、电源纹波、LED 干扰、甚至遥控器电池电量,都可能让 560 变成 490 或 630。先用 mode2 和 ir-ctl -r 把真实波形钉死,再动 C++,不然永远在猜。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

4656

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

326

2025.12.06

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

377

2023.12.07

常见的编码方式
常见的编码方式

常见的编码方式有ASCII编码、Unicode编码、UTF-8编码、UTF-16编码、GBK编码等。想了解更多编码方式相关内容,可以阅读本专题下面的文章。

1548

2023.10.24

a和A对应的ASCII码数值
a和A对应的ASCII码数值

a的ascii码是65,a的ascii码是97;ascii码表中,一个字母的大小写数值相差32,一般知道大写字母的ascii码数值,其对应的小写字母的ascii码数值就算出来了,是大写字母的ascii码数值“+32”。想了解更多相关的内容,可阅读本专题下面的相关文章。

5747

2024.10.24

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

4570

2023.06.21

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

3813

2023.06.29

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

3153

2023.06.30

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn