English | 简体中文 | 繁體中文 | 日本語 | Deutsch | 한국어
NEC 红外传输协议使用消息比特的脉冲距离编码,每个脉冲串的长度为562.5μs,载波频率为38kHz(26.3μs)。逻辑位的传输方式如下: 逻辑“0”–562.5μs脉冲,然后是562.5μs间隔,总传输时间为1.125ms; 逻辑“1”–562.5μs的脉冲,然后是1.6875ms间隔,总传输时间为2.25ms。 当按下遥控器上的键时,传输的信息按顺序包括以下内容:
- 9ms的前导脉冲串(用于逻辑数据位的脉冲串长度的16倍)。
- 4.5ms的间隔。
- 用于接收设备的8位地址。
- 地址的8位逻辑逆。
- 8位命令。
- 该命令的8位逻辑逆。
- 最后的562.5μs脉冲,表示消息传输结束。
LibDriver IR_REMOTE是LibDriver推出的IR_REMOTE全功能驱动,该驱动提供NEC红外遥控解码功能并且它符合MISRA标准。
/src目录包含了LibDriver IR_REMOTE的源文件。
/interface目录包含了LibDriver IR_REMOTE与平台无关的GPIO总线模板。
/test目录包含了LibDriver IR_REMOTE驱动测试程序,该程序可以简单的测试芯片必要功能。
/example目录包含了LibDriver IR_REMOTE编程范例。
/doc目录包含了LibDriver IR_REMOTE离线文档。
/datasheet目录包含了IR_REMOTE数据手册。
/project目录包含了常用Linux与单片机开发板的工程样例。所有工程均采用shell脚本作为调试方法,详细内容可参考每个工程里面的README.md。
/misra目录包含了LibDriver MISRA代码扫描结果。
参考/interface目录下与平台无关的GPIO总线模板,完成指定平台的GPIO总线驱动。
将/src目录,/interface目录和/example目录加入工程。
#include "driver_ir_remote_basic.h"
volatile uint8_t g_flag;
uint8_t (*g_gpio_irq)(void) = NULL;
uint8_t res;
uint32_t i;
uint16_t timeout;
static void a_receive_callback(ir_remote_t *data)
{
switch (data->status)
{
case IR_REMOTE_STATUS_OK :
{
ir_remote_interface_debug_print("ir_remote: irq ok.\n");
ir_remote_interface_debug_print("ir_remote: add is 0x%02X and cmd is 0x%02X.\n", data->address, data->command);
g_flag = 1;
break;
}
case IR_REMOTE_STATUS_REPEAT :
{
break;
}
case IR_REMOTE_STATUS_ADDR_ERR :
{
ir_remote_interface_debug_print("ir_remote: irq addr error.\n");
break;
}
case IR_REMOTE_STATUS_CMD_ERR :
{
ir_remote_interface_debug_print("ir_remote: irq cmd error.\n");
break;
}
case IR_REMOTE_STATUS_FRAME_INVALID :
{
ir_remote_interface_debug_print("ir_remote: irq frame invalid.\n");
break;
}
default :
{
ir_remote_interface_debug_print("ir_remote: irq unknown status.\n");
break;
}
}
}
...
/* gpio init */
res = gpio_interrupt_init();
if (res != 0)
{
return 1;
}
/* set the irq */
g_gpio_irq = ir_remote_basic_irq_handler;
...
/* basic init */
res = ir_remote_basic_init(a_receive_callback);
if (res != 0)
{
(void)gpio_interrupt_deinit();
g_gpio_irq = NULL;
}
...
/* loop */
for (i = 0; i < times; i++)
{
/* output */
ir_remote_interface_debug_print("%d/%d.\n", i + 1, times);
/* 5s timeout */
timeout = 500;
/* init 0 */
g_flag = 0;
/* check timeout */
while (timeout != 0)
{
/* check the flag */
if (g_flag != 0)
{
break;
}
/* timeout -- */
timeout--;
/* delay 10ms */
ir_remote_interface_delay_ms(10);
}
/* check the timeout */
if (timeout == 0)
{
/* receive timeout */
ir_remote_interface_debug_print("ir_remote: receive timeout.\n");
(void)ir_remote_basic_deinit();
(void)gpio_interrupt_deinit();
g_gpio_irq = NULL;
return 1;
}
....
}
...
/* basic deinit */
(void)ir_remote_basic_deinit();
/* gpio deinit */
(void)gpio_interrupt_deinit();
g_gpio_irq = NULL;
return 0;
在线文档: https://www.libdriver.com/docs/ir_remote/index.html。
离线文档: /doc/html/index.html。
请参考CONTRIBUTING.md。
版权 (c) 2015 - 现在 LibDriver 版权所有
MIT 许可证(MIT)
特此免费授予任何获得本软件副本和相关文档文件(下称“软件”)的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、转授许可和/或出售该软件副本,以及再授权被配发了本软件的人如上的权利,须在下列条件下:
上述版权声明和本许可声明应包含在该软件的所有副本或实质成分中。
本软件是“如此”提供的,没有任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人都不对任何索赔、损害或其他责任负责,无论这些追责来自合同、侵权或其它行为中,还是产生于、源于或有关于本软件以及本软件的使用或其它处置。