0

0

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

尼克

尼克

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

|

997人浏览过

|

来源于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

Gatekeep
Gatekeep

Gatekeep AI是一个专注于将文本转化为教学视频的智能教学工具,主要用于数学和物理等学科的教育。

下载

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

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

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

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

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

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

687

2024.01.03

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

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

22

2025.12.06

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

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

232

2023.12.07

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

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

635

2023.10.24

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

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

2212

2024.10.24

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

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

1541

2023.06.21

如何安装LINUX
如何安装LINUX

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

715

2023.06.29

linux find
linux find

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

300

2023.06.30

batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

65

2026.02.25

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 10.2万人学习

C 教程
C 教程

共75课时 | 5万人学习

C++教程
C++教程

共115课时 | 19.4万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号