“红外接收”的版本间的差异
来自Labplus盛思维基百科
Tangliufeng(讨论 | 贡献) (创建页面,内容为“ == 概述 == UART通讯,接收红外遥控信号,能解析NEC协议数据。有效距离8米,波特率115200bps == 技术参数 == * 工作电压:3.3V or 5…”) |
(→使用教程) |
||
(未显示2个用户的18个中间版本) | |||
第1行: | 第1行: | ||
− | + | [[文件:黑色传感器最终版12.20-35.png|350px|缩略图|右]] | |
== 概述 == | == 概述 == | ||
− | + | 接收红外遥控信号,能解析NEC协议数据并UART输出数据。有效距离8米,波特率115200bps。 | |
== 技术参数 == | == 技术参数 == | ||
− | * | + | * 工作电压:VCC 3.3-5V |
− | * | + | * 通讯方式:UART |
− | + | * 输出字节长度:1字节 | |
− | + | * 有效距离:8米 | |
− | * | ||
− | * | ||
* 模块尺寸:24x46x7.5mm | * 模块尺寸:24x46x7.5mm | ||
第17行: | 第15行: | ||
| <small>VCC</small> || <small>电源</small> | | <small>VCC</small> || <small>电源</small> | ||
|- | |- | ||
− | | <small> | + | | <small>RXD</small> || <small>串口接收</small> |
|- | |- | ||
− | | <small> | + | | <small>TXD</small> || <small>串口发送</small> |
|- | |- | ||
| <small>GND</small> || <small>地</small> | | <small>GND</small> || <small>地</small> | ||
第25行: | 第23行: | ||
== 使用教程 == | == 使用教程 == | ||
− | + | 1.串口波特率设置115200bps。程序在定义串口引脚时,注意模块端的RX、TX需要和主板上的RX、TX交叉!<br/> | |
− | === < | + | 2.当接收到红外调制信号,模块上的指示灯会闪烁。<br/><br/> |
− | === < | + | |
+ | ''下表为附件遥控器的按键对应值表'' | ||
+ | <br /> | ||
+ | {|style="background-color:#FCF8E3;color:#8A6D3B;" | ||
+ | |- | ||
+ | |width="25%" rowspan="19"|[[File:遥控器.png|100px]] ||遥控按键 || HEX(16进制)||DEC(10进制) | ||
+ | |-valign="center" align="center" | ||
+ | |-valign="center" align="center" | ||
+ | |"1"|| 0x00 ||00 | ||
+ | |-valign="center" align="center" | ||
+ | |"2"|| 0x80 ||128 | ||
+ | |-valign="center" align="center" | ||
+ | |"3"|| 0x40 ||64 | ||
+ | |-valign="center" align="center" | ||
+ | |"4"|| 0x20 ||32 | ||
+ | |-valign="center" align="center" | ||
+ | |"5"|| 0xA0 ||160 | ||
+ | |-valign="center" align="center" | ||
+ | |"6"|| 0x60||96 | ||
+ | |-valign="center" align="center" | ||
+ | |"7"|| 0x10||16 | ||
+ | |-valign="center" align="center" | ||
+ | |"8"|| 0x90||144 | ||
+ | |-valign="center" align="center" | ||
+ | |"9"|| 0x50||80 | ||
+ | |-valign="center" align="center" | ||
+ | |"0"|| 0xB0||176 | ||
+ | |-valign="center" align="center" | ||
+ | |"*"|| 0x30||48 | ||
+ | |-valign="center" align="center" | ||
+ | |"#"|| 0x70||112 | ||
+ | |-valign="center" align="center" | ||
+ | |"↑"|| 0x88||136 | ||
+ | |-valign="center" align="center" | ||
+ | |"↓"|| 0x98||152 | ||
+ | |-valign="center" align="center" | ||
+ | |"←"|| 0x28||40 | ||
+ | |-valign="center" align="center" | ||
+ | |"→"|| 0x68||104 | ||
+ | |-valign="center" align="center" | ||
+ | |"Ok"|| 0xA8||168 | ||
+ | |} | ||
+ | |||
+ | |||
+ | === <font size="3">掌控板</font> === | ||
+ | {| | ||
+ | |- | ||
+ | | [[文件:红外接收2.png |900px|居中|无框]] | ||
+ | |} | ||
+ | |||
+ | |||
+ | ===<font size="3"> Python示例 </font>=== | ||
+ | {| border="0" cellpadding="2" width="60%" | ||
+ | |- | ||
+ | | width="20%"| | ||
+ | |[[文件:红外接收 连接图.png|600px|无框]] | ||
+ | |- | ||
+ | | | ||
+ | | style="text-align:center;" |红外接收模块接收,数码管模块显示数据 | ||
+ | |} | ||
+ | |||
<pre style="color:blue"> | <pre style="color:blue"> | ||
from microbit import * | from microbit import * | ||
− | def | + | _TubeTab = [ |
− | i2c.write( | + | 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: | while True: | ||
− | + | if uart.any(): | |
− | + | _word=uart.read() | |
− | + | ||
+ | tm1650DisplayInt(_word[0]) | ||
+ | |||
+ | |||
</pre> | </pre> | ||
− | === < | + | === <font size="3">图形化示例 </font> === |
+ | 连接图同上 | ||
+ | {| | ||
+ | |- | ||
+ | | [[文件:红外接收 3.png|1000px|无框|左]] | ||
+ | |} | ||
+ | |||
+ | == 版本历史记录 == | ||
+ | |||
+ | {| border="1" cellspacing="0" align="left" cellpadding="0" width="60%" style="text-align:center;" | ||
+ | |- style="text-align:center;background-color:#6fa8dc;color:#fffff;" | ||
+ | !width="10%"|Version !!width="15%"| Date !! Note <small>[+]新增[-]删除[^]修复</small> | ||
+ | |- | ||
+ | | V2.0 || || style="text-align:left"| | ||
+ | |} |
2020年6月30日 (二) 17:00的最新版本
概述
接收红外遥控信号,能解析NEC协议数据并UART输出数据。有效距离8米,波特率115200bps。
技术参数
- 工作电压:VCC 3.3-5V
- 通讯方式:UART
- 输出字节长度:1字节
- 有效距离:8米
- 模块尺寸:24x46x7.5mm
引脚定义
VCC | 电源 |
RXD | 串口接收 |
TXD | 串口发送 |
GND | 地 |
使用教程
1.串口波特率设置115200bps。程序在定义串口引脚时,注意模块端的RX、TX需要和主板上的RX、TX交叉!
2.当接收到红外调制信号,模块上的指示灯会闪烁。
下表为附件遥控器的按键对应值表
掌控板
Python示例
红外接收模块接收,数码管模块显示数据 |
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])
图形化示例
连接图同上
版本历史记录
Version | Date | Note [+]新增[-]删除[^]修复 |
---|---|---|
V2.0 |