durongze 发表于 2025-2-5 11:01:40

官方红外程序 如何在实际的产品中应用呢?




---------------------------------------------------

u16 rawDataOff = {8996, 4510,588, 1674,564, 516,564, 540,564, 594,562, 542,538, 542,586, 568,540, 568,584, 520,586, 1646,540, 1670,538, 1648,588, 1622,564, 1670,564, 1622,590, 1646,562, 1674,538, 566,540, 566,562, 1646,514, 590,542, 590,564, 594,510, 544,588, 542,564, 1646,566, 1644,540, 590,538, 1648,586, 1646,536, 1700,536, 1620,590, 39706,8966, 2272,590};// NEC 807F906F


u16 rawDataOff0 = {9122, 4482,594, 1670,594, 540,594, 540,594, 540,594, 540,594, 540,594, 540,594, 540,594, 540,594, 1670,594, 1672,592, 1670,594, 1670,594, 1670,594, 1670,594, 1672,594, 1670,594, 540,594, 540,594, 1670,594, 540,594, 540,594, 542,592, 540,594, 540,594, 1672,594, 1670,594, 540,594, 1670,596, 1670,594, 1672,594, 1670,594, 39566,9068, 2246,594};
u16 rawDataOff1 = {8996, 4510,588, 1674,564, 516,564, 540,564, 594,562, 542,538, 542,586, 568,540, 568,584, 520,586, 1646,540, 1670,538, 1648,588, 1622,564, 1670,564, 1622,590, 1646,562, 1674,538, 566,540, 566,562, 1646,514, 590,542, 590,564, 594,510, 544,588, 542,564, 1646,566, 1644,540, 590,538, 1648,586, 1646,536, 1700,536, 1620,590, 39706,8966, 2272,590};// NEC 807F906F
u16 rawDataOff2 = {9042, 4508,540, 1670,566, 564,516, 588,518, 614,516, 588,538, 566,540, 590,540, 590,538, 566,564, 1644,516, 1694,540, 1670,566, 1644,516, 1692,542, 1668,566, 1642,540, 1696,538, 566,538, 566,566, 1642,538, 566,542, 588,540, 590,538, 566,564, 566,538, 1670,516, 1666,564, 566,542, 1668,566, 1644,540, 1696,538, 1644,566, 39698,8988, 2248,590};// NEC 807F906F

u16 rawDataOn = {9046, 4460,588, 1648,564, 540,590, 542,564, 566,538, 566,566, 566,538, 542,562, 568,562, 542,588, 1648,564, 1620,562, 1674,562, 1672,540, 1620,586, 1648,564, 1670,538, 1646,562, 544,586, 568,538, 542,588, 568,538, 540,564, 566,566, 566,540, 564,538, 1674,562, 1646,564, 1620,590, 1648,564, 1620,590, 1670,538, 1650,562, 39506,8996, 2274,586};// NEC 807F807F


u16 rawDataOn0 = {9124, 4482,594, 1672,594, 538,596, 540,594, 538,596, 538,596, 538,596, 540,594, 538,596, 538,594, 1670,594, 1670,596, 1670,596, 1670,594, 1670,594, 1670,596, 1670,596, 1668,596, 540,594, 540,594, 540,594, 540,594, 538,596, 540,594, 540,594, 540,596, 1670,596, 1670,596, 1670,594, 1670,594, 1670,594, 1670,594, 1672,594, 39576,9070, 2246,596};
u16 rawDataOn1 = {9046, 4460,588, 1648,564, 540,590, 542,564, 566,538, 566,566, 566,538, 542,562, 568,562, 542,588, 1648,564, 1620,562, 1674,562, 1672,540, 1620,586, 1648,564, 1670,538, 1646,562, 544,586, 568,538, 542,588, 568,538, 540,564, 566,566, 566,540, 564,538, 1674,562, 1646,564, 1620,590, 1648,564, 1620,590, 1670,538, 1650,562, 39506,8996, 2274,586};// NEC 807F807F
u16 rawDataOn2 = {9050, 4482,564, 1670,540, 564,566, 564,538, 590,516, 588,542, 590,514, 590,516, 614,516, 588,540, 1670,540, 1644,538, 1696,538, 1670,538, 1644,564, 1670,540, 1670,538, 1670,540, 590,540, 590,514, 590,540, 590,514, 590,514, 590,540, 590,514, 590,516, 1720,516, 1694,514, 1668,540, 1694,514, 1668,540, 1694,514, 1696,516, 39574,8914, 2348,490};// NEC 807F807F


一般实际的应用中 红外都是71字节。
而官方的例子是4 字节,就像下面这样:



那我要发上面的71字节是不是应该像下面这样:




--------------------------------------------------------------------------
更新一下我上面的说法,是71个数据,每个数据是16bit。 如果按字节计就是142个字节。 这个71个数据我之前理解错误。这个不是类似于键值的那种数据,是脉冲持续时间。
见4楼的大佬给出的解释。

DebugLab 发表于 2025-2-5 11:10:58

标准NEC码就是4字节,持续按下还有个重复码会持续发送
非标准协议按照协议发就可以

durongze 发表于 2025-2-5 12:12:48

https://www.stcaimcu.com/forum.php?mod=redirect&goto=findpost&pid=30597&ptid=4120

VCC 发表于 2025-2-5 12:41:23

首先你有一个严重的理解误区。

红外并不是如你所说,有71个字节。
(如果是71个字节,数据类型应该是u8,而你这里都是u16,所以是142字节?当然也不是)

这里指的是有71次波形跳变
71个数据分别指的是高低电平的持续时间
也就是表达了36次脉冲的波形时间参数

事实上,第1个脉冲是起始脉冲,最后3个是重复码的脉冲

真正的数据是32个脉冲,也就是32bit数据,也就是4个字节。
和你说的NEC标准码是完全相同的!

durongze 发表于 2025-2-5 13:29:42

VCC 发表于 2025-2-5 12:41
首先你有一个严重的理解误区。

红外并不是如你所说,有71个字节。

哇塞,果然是大佬。我反复读了好多遍你这段话,明白了你的意思。感谢。

核心就是这71个字节代表的是电平持续时间,并不是对应官方代码里的键值。




durongze 发表于 2025-2-5 13:31:55

DebugLab 发表于 2025-2-5 11:10
标准NEC码就是4字节,持续按下还有个重复码会持续发送
非标准协议按照协议发就可以 ...

刚刚把71字节的数据含义理解错了。 4楼的大佬猜出了我想表达的意思,给就纠正了。

durongze 发表于 2025-2-5 14:35:15

uint16_t rawDataOn = {9046, 4460,588, 1648,564, 540,590, 542,564, 566,538, 566,566, 566,538, 542,562, 568,562, 542,588, 1648,564, 1620,562, 1674,562, 1672,540, 1620,586, 1648,564, 1670,538, 1646,562, 544,586, 568,538, 542,588, 568,538, 540,564, 566,566, 566,540, 564,538, 1674,562, 1646,564, 1620,590, 1648,564, 1620,590, 1670,538, 1650,562, 39506,8996, 2274,586};

引导码
高电平:9046μs(约9ms)
低电平:4460μs(约4.5ms)

数据位解析
接下来的数据位按照NEC协议的规则进行解析:
逻辑“0”:高电平约560μs,低电平约560μs
逻辑“1”:高电平约560μs,低电平约1690μs

588, 1648 -> 1
564, 540-> 0
590, 542-> 0
564, 566-> 0
538, 566-> 0
566, 566-> 0
538, 542-> 0
562, 568-> 0
562, 542-> 0
588, 1648 -> 1
564, 1620 -> 1
562, 1674 -> 1
562, 1672 -> 1
540, 1620 -> 1
586, 1648 -> 1
564, 1670 -> 1
538, 1646 -> 1
562, 544-> 0
586, 568-> 0
538, 542-> 0
588, 568-> 0
538, 540-> 0
564, 566-> 0
566, 566-> 0
540, 564-> 0
538, 1674 -> 1
562, 1646 -> 1
564, 1620 -> 1
590, 1648 -> 1
564, 1620 -> 1
590, 1670 -> 1
538, 1650 -> 1
562, 39506 -> 结束码
8996, 2274 -> 结束码
586 -> 结束码

1, 0, 0, 0, 0, 0, 0, 0 -> 地址码
1, 1, 1, 1, 1, 1, 1, 1 -> 地址反码
1, 0, 0, 0, 0, 0, 0, 0 -> 命令码
1, 1, 1, 1, 1, 1, 1, 1 -> 命令反码

地址码:0x01(十进制1)
地址反码:0xFE(十进制254)
命令码:0x01(十进制1)
命令反码:0xFE(十进制254)

durongze 发表于 2025-2-23 01:50:26

VCC 发表于 2025-2-5 12:41
首先你有一个严重的理解误区。

红外并不是如你所说,有71个字节。


大佬,我按照你所说的去试了, 我发现好像不行呢?



https://www.stcaimcu.com/forum.php?mod=viewthread&tid=15218&page=1&extra=#pid147446
页: [1]
查看完整版本: 官方红外程序 如何在实际的产品中应用呢?