红外遥控模块

哎,,图便宜买了个三个针(数据线,接地线,电源线)的,,给我整吐了。。。

原理:

按下遥控器的某一个键,遥控器会发出一连串经过调制后的信号,这个信号经过红外一体化模块接收后,输出解调后的数字脉冲,每个按键对应不同的脉冲,故识别出不同的脉冲就能识别出不同的按键。

反正就是测量高电平的时间,长的就是1,短的就是0。我查的是高电平1.685ms,低电平就是0.56ms,但是不对啊,,,我试了一下分界是10ms,,这差的有点多。。这是为什么呢。。。

下面就是遥控器发送数据的格式,也就是说我们就要那八位数据码就行,引导码9ms , 后面的高电平是结果码 4.5ms (也不知道是不是真的),然后就是遥控器按键发送的数据码(二进制)

from pyb import *
from time import sleep  x=Pin('X1')        # 数据线连到了x1 口def test():         # 逻辑挺简单的,就是试了很多很多次,,,,n=0N=32global list1list1=[]while(x.value()):   # 等待信号出现sleep(0.0001)while(not x.value()):   # 跳过引导码sleep(0.0001)   while N:while(x.value()):   # 跳过结果码sleep(0.0001)while(not x.value()):sleep(0.0001)while(x.value()):    # 高电平计时sleep(0.0001)n+=1if(n>=100):list1.append('1')else:list1.append('0')#  print(n)n=0N-=1   def aaa():               # 反正我试的系统码1全是0,如果出现1,,我也不知道咋回事,偶尔会出现吧。。if(list1[0]=='0'):list2=list1[16:24]else:list2=list1[17:25]list2.reverse()         # 研究了很多次,得到的数据是反的,,,啊,,这是为什么return int(''.join(list2),2)def led():a=aaa()          # 控制一下灯吧,,if(a==69):LED(1).toggle()elif(a==70):LED(2).toggle()else:LED(3).toggle()while 1:test()sleep(1)led()

然后又买了个四个线的(VCC GND RXD TXD),使用UART串行总线控制,,,这个就简单很多很多很多了。。。

import pyb,time
x=pyb.Pin('X1',pyb.Pin.OUT_PP)
uart=pyb.UART(3,9600,timeout=50)            # 使用 Y9 Y10 ..注意不要把TX  RX 插反啊。。。while True:if uart.any() > 0:val = uart.read()[-1]              # 使用uart.any() 我们获得三个数据,前两个固定的,系统码之类的吧 ,后面就是需要的数据码了。      N=10                               # 按下 |<< 键就逆时针转三秒, >>| 键就顺时针if val == 68:while N:x.high()pyb.udelay(24200)x.low()pyb.delay(300) N-=1elif val == 64:while N:x.high()pyb.udelay(10000)x.low()pyb.delay(300)N-=1print('end')

class UART 双工串行通信总线

作为一个小白我是一个字都不认识的。。。

串行并行:并行通信就是一个时刻可以传输多个位,需要的线多。串行就是一个时间就能传一位,一根线就行

双工:通信允许数据在两个方向上同时传输。(A-B, B-A),单工嘛,就是只能传一个方向。

接口:TX数据发送,RX数据接收。两个设备间将TX与RX相连,RX与TX相连即可正常工作。最常用到的就是我们电脑上的USB那就是个最典型的UART接口。将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部并行数据的器件使用。

通信协议:

  • 空闲位:总线处于空闲时信号线为高电平,
  • 起始位:0表示开始。
  • 数据位 5-9位,构成一个字符。
  • 奇偶校验位:就不用把。。
  • 停止位:可以是1/1.5/2位的高电平。
  • 波特率:数据传输速率(bits per second bps) 常见的5900 115200.

9600 8N1(9600波特率,8个数据位,没有校验位,1位停止位)。。。

from pyb import UART   # 实例化,,python就是简洁清楚啊。。。
uart=UART(1,9600)
uart.init(9600,bits=8,parity=None,stop=1)  # 数据位可以是7 8 9 奇偶校验位就None, 停止位可以是1 2
# 如果奇偶校验位是NOne,就只支持8 9 如果启用奇偶校验支持7 8

类方法

class pyb.UART(bus ,,,,,,)

使用给定的总线构建一个UART对象,Pyboard 的 bus 可以是 1-4,6 XA XB YA YB.Pyboard Lite bus can be 1, 2, 6, ‘XB’, or ‘YA’. For Pyboard D bus can be 1-4, ‘XA’, ‘YA’ or ‘YB’。没有其他参数就只创建但不初始化。给了别的参数就用来初始化

Pyboard 的UART 总线引脚:

  • UART(4) is on XA: (TX, RX) = (X1, X2) = (PA0, PA1)

  • UART(1) is on XB: (TX, RX) = (X9, X10) = (PB6, PB7)

  • UART(6) is on YA: (TX, RX) = (Y1, Y2) = (PC6, PC7)

  • UART(3) is on YB: (TX, RX) = (Y9, Y10) = (PB10, PB11)

  • UART(2) is on: (TX, RX) = (X3, X4) = (PA2, PA3)

UART.init(baudrate, bits=8, parity=None, stop=1, timeout=0, flow=0, timeout_char=0, read_buf_len=64)

初始化,分别是时钟速率,每个字符的位数,奇偶校验,停止位数,流量控制类型(可以是0,RTS,CTS),等待写入/读取第一个字符的超时(毫秒),写入或读取字符之间等待的超时(毫秒),读取缓存区的字符长度(0就是禁用)

如果奇偶校验=无,则仅支持8位和9位。启用奇偶校验后,仅支持7位和8位。

UART.deinit() 关闭总线

UART.any() 返回等待的字节数(可以为0)

UART.read([nbytes ]) 读取字符。指定了 nbytes 最多就读取这么多。如果nbytes 可以在内存中使用,就立刻返回,没指定就返回尽量多的字符或超时后返回。注意:对于9位字符,每个字符占用两个字节,nbytes 必须是偶数,并且字符数为 nbytes/2

UART.readchar() 在总线上收到一个字符,返回值:读取的字符为整数,超时就返回-1。

UART.readinto( buf, [ nbytes]) 将字符读取到缓冲区中,如果指定了nbytes 就读取这么多字符,否则就读取 len(buf) 字节,返回值:在超时前读取或储存到 buf or None 的字节数

UART.readline()读取一行,以换行符结尾。如果存在这样的行,则立即返回。如果超时过去,则无论是否存在换行符,都会返回所有可用数据。

UART.write(buf) 将字节缓存区写入总线,如果字符为7 或 8位,每个字节位一个字符,如果字符是九位,每个字符使用两个字节。并且 buf 必须包含偶数个字节。返回值:写入的字节数,如果超时或没写入就返回None。

UART.writechar(char) 在总线上写一个字符,char是要写入的整数,返回值: None ,如果使用CTS流量控制参考下面的

UART.sendbreak() 在总线上发送一个停止条件,这将总线拉低持续13位,返回None。

常量 UART.RTS/ UART.CTS 选择流量控制类型。

流量控制

UART(2) and UART(3) 支持 RTS/CTS 硬件流量控制,使用以下引脚:

  • UART(2) is on: (TX, RX, nRTS, nCTS) = (X3, X4, X2, X1) = (PA2, PA3, PA1, PA0)

  • UART(3) is on :(TX, RX, nRTS, nCTS) = (Y9, Y10, Y7, Y6) = (PB10, PB11, PB14, PB13)

UART的 init 方法的 flow 设置了一个或RTS CTS两个全部,相关的流量控制引脚就会被配置。nRTS 是低电平有效输出,nCTS是低电平有效输入,且启用上拉电阻。为了实现流量控制,板子的nCTS 信号连接到目标的nRTS, 将板子的nRTS 连接到目标的nCTS.。

CTS:目标控制板子的发送器

启用了CTS 流量控制,写入行为如下(下面的目标就是跟板子连的器件):

如果板子的UART.write(buf) 方法被调用,当nCTS is False 时,传输可以在任何时间停止。如果在超时时间内没有发送整个缓冲区就会导致超时。。这个方法返回写入的字节数,可以让用户来写入其余的数据,如果发生超时,字符将保留在UART中,等待nCTS。 组成此字符的字节数将包含在返回值中。。。。啊。。什嘛玩意

在nCTS is False 时调用 UART.writechar() ,这个方法会超时,除非目标即时声明 nCTS.。如果超时就引发 OSError 116。只要目标声明nCTS,字符就会被发送。

RTS:板子控制不要的发送器

如果使用缓存区输入(read_buf_len > 0) ,传入的字符将被缓冲。如果缓冲区满了,下一个到达的字符就会导致nRTS 变成 False:目标应该停止传输。在从缓冲中读取完了字符nRTS 就会变成True。

注意,any() 方法返回缓冲中的字节数。假如缓存中有n个字节,如果缓存满了另一个字符来了,nRTS 变成False, any() 会返回数字 n 。读取字符时,附加字符将被放置在缓冲区中,并将包含在之后调用的 any() 方法中。

如果不使用缓冲输入(read_buf_len == 0),则字符的到达将导致nRTS变为False,直到读取字符为止。

pyboard :红外遥控模块,class UART相关推荐

  1. REMOTE 红外遥控模块

    D1PRE为1时,APB1总线上的外设和TIM都是1分频. 但当D1PRE不为1时,APB1总线上的外设是1分频,但TIM是2分频. remote.c #include "remote.h& ...

  2. micropython esp8266 红外控制小车

    目录 简述 效果 代码 简述 使用ESP8266+micropython+红外遥控模块+接收头HX1838(NEC编码)实现简单红外遥控小车. 效果 ESP8266 Micropython红外小车 代 ...

  3. 基于红外遥控的arduino遥控小车

    遥控小车是每个人童年的最爱,不仅好奇它的奇妙,更是喜欢它带来的刺激.小编为大家带来几篇博客,来给大家讲讲制作遥控小车的程序. 看大标题可知我们一共有五个方法去制作一款带有遥控功能的小车,小编分开来给大 ...

  4. 【毕业设计】基于超声波与红外的自动调速风扇系统(代码开源) -物联网 嵌入式 stm32

    文章目录 1 简介 1 设计概要 2 系统设计 2.1 系统供电问题 2.2 自动/手动模式的切换 2.3 PWM信号的产生 2.4 单片机内部资源的分配 三.硬件搭建 3.1 单片机最小系统 3.2 ...

  5. 单片机红外通信c语言,用51单片机实现红外通讯源码

    /************************************************************************************** *            ...

  6. S32K1XX调试--irda红外通信

    1.背景 项目需要用到红外模块来通信,考虑到MCU自带irda功能,即确定使用irda通信来完成. 但芯片自带irda功能,官网.手册以及各个论坛均未找到配置irda流程,项目又比较赶,于是决定模拟时 ...

  7. 小爱智能音箱红外控制继电器

    小爱智能音箱红外控制继电器 一.实物图 二.物料准备 1.小爱智能音箱万能遥控版(活动价¥99) 2.红外遥控继电器. 关于红外遥控继电器以下提供二种解决方案: 2.1简单省事版 买现成的红外遥控插排 ...

  8. 毕业设计 超声波红外自动调速风扇系统

    文章目录 1 简介 1 设计概要 2 系统设计 2.1 系统供电问题 2.2 自动/手动模式的切换 2.3 PWM信号的产生 2.4 单片机内部资源的分配 三.硬件搭建 3.1 单片机最小系统 3.2 ...

  9. 基于红外遥控的门禁系统(红外遥控、步进电机)

    基于红外遥控的门禁系统(红外遥控.步进电机) 闲来无事,用手头STM32做个项目. 成品功能: 功能说明 材料 STM32ZET6开发板 TFT显示屏(战舰有我用的2.7寸的) 红外接收器和遥控器 五 ...

  10. 【C51单片机学习笔记----DS18B20温度传感器LCD1602液晶屏直流电机调速与呼吸灯AD模数转换红外外部中断】

    文章目录 一.DS18B20温度传感器 1.DS18B20温度传感器连接原理图 2.DS18B20温度传感器单总线通信时序 3.DS18B20温度传感器代码模块 二.LCD1602液晶屏 1.LCD1 ...

最新文章

  1. windows 系统常用操作
  2. 个推CTO安森:我所理解的数据中台
  3. 如何让图像过渡更自然 python_如何过渡至 Python 3
  4. CString 用法
  5. RFC(一系列以编号排定的文件)
  6. 日语学习-多邻国-平假名2
  7. Go Web 编程--超详细的模板库应用指南
  8. 二级C语言考前学习资料(机试)及C语言程序二十四种大题题型
  9. 华为策略路由,实现双线选路上网
  10. HTTP中的TCP三次握手-详细解析(TCP Connection、TCP的三次握手介绍、为什么创建TCP三次握手)
  11. phpMyAdmin下载
  12. 矩阵行列式的计算及逆矩阵转换
  13. SQL的常见函数的使用方法和举例说明
  14. ERROR command failed: npm install --loglevel error --legacy-peer-deps
  15. request_threaded_irq()参数
  16. 北京工商大学计算机考研818真题,北京工商大学考研真题汇总
  17. 程序员即装逼又实用的Cmd命令行
  18. mysql服务无法启动问题
  19. 出行即服务MAAS专辑(2022)(可下载)
  20. BT——专门为大容量文件的共享而设计的网络协议

热门文章

  1. java native方法使用
  2. 使用express 代理图片下载
  3. 考研日语线上笔记(一):考研日语203大纲陌生、易混词汇本
  4. 飞思卡尔单片机学习记录(一)
  5. Arduino蓝牙无线自动下载程序
  6. Github下载 arduino库下载
  7. springboot通过code获取微信小程序UnionID
  8. Navicat15注册时报错 rsa public key not find
  9. 如何获取小程序前端代码
  10. stata14中文乱码问题