红外接收

来自Labplus盛思维基百科
Tangliufeng讨论 | 贡献2018年8月15日 (三) 10:07的版本 使用教程
跳转至: 导航搜索
黑色传感器最终版12.20-35.png

概述

接收红外遥控信号,能解析NEC协议数据并UART输出数据。有效距离8米,波特率115200bps。

技术参数

  • 工作电压:VCC 3.3-5V
  • 通讯方式:UART
  • 输出字节长度:1字节
  • 有效距离:8米
  • 模块尺寸:24x46x7.5mm

引脚定义

VCC 电源
RXD 串口接收
TXD 串口发送
GND

使用教程

1.串口波特率设置115200bps。程序在定义串口引脚时,注意模块端的RX、TX需要和主板上的RX、TX交叉!
2.当接收到红外调制信号,模块上的指示灯会闪烁。

下表为附件遥控器的按键对应值表

遥控器.png 遥控按键 HEX(16进制) DEC(10进制)
"1" 0x00 00
"2" 0x80 128
"3" 0x40 64
"4" 0x20 32
"5" 0xA0 160
"6" 0x60 96
"7" 0x10 16
"8" 0x90 144
"9" 0x50 80
"0" 0xB0 176
"*" 0x30 48
"#" 0x70 112
"↑" 0x88 136
"↓" 0x98 152
"←" 0x28 40
"→" 0x68 104
"Ok" 0xA8 168



Python示例

红外接收 连接图.png
红外接收模块接收,数码管模块显示数据
from microbit import *

_TubeTab = [
    0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 
    0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00, 0x40]

def tm1650Init():
  i2c.write(0x24, bytearray([0x01]))
def tm1650DisplayUint(x):
  charTemp = [0, 0, 0, 0]
  x = (x if x < 10000 else 9999)
  charTemp[3] = x%10
  charTemp[2] = (x//10)%10
  charTemp[1] = (x//100)%10
  charTemp[0] = (x//1000)%10
  if x < 1000:
    charTemp[0] = 0x10
    if x < 100:
      charTemp[1] = 0x10
      if x < 10:
        charTemp[2] = 0x10
  for i in range(0, 4):
    i2c.write(0x34+i, bytearray([_TubeTab[charTemp[i]]]))
def tm1650DisplayInt(x):
  x = round(x)
  if x >= 0:
    tm1650DisplayUint(x)
  else:
    temp = (x if x > -999 else -999)
    temp = abs(temp)
    tm1650DisplayUint(temp)
    if temp < 10:
      i2c.write(0x36, bytearray([_TubeTab[0x11]]))
    elif temp < 100:
      i2c.write(0x35, bytearray([_TubeTab[0x11]]))
    elif temp < 1000:
      i2c.write(0x34, bytearray([_TubeTab[0x11]]))

display.off()
tm1650Init()
uart.init(baudrate=115200, bits=8, parity=None, stop=1, tx=pin1, rx=pin0)
while True:
    if uart.any():
        _word=uart.read()
        
        tm1650DisplayInt(_word[0])
   

图形化示例

连接图同上

红外接收 3.png

版本历史记录

Version Date Note [+]新增[-]删除[^]修复
V2.0