最近在玩树莓派PICO,写了一个micropython程序用于接收遥控器数据

废话不多说,上代码

#author#======================================
#file:HX1838ReceiveDemo.py
#OneT1me 2022.03.19 Ver1.0
#link https://blog.csdn.net/OneT1me
#=============================================import machine
import utime
from machine import Pin#定义NEC编码解码步骤,必须符合NEC编码才能走到下一步
STEP_CHECK_0 = 0 #未检测到前导9ms电平
STEP_CHECK_1 = 1 #检测到9ms电平,如果状态为此标志,若下一次中断计算时间符合4.5ms则判断为nec编码。开始后续解码流程
STEP_CHECK_2 = 2 #检测0.45ms高电平
STEP_CHECK_3 = 3 #检测0.5ms或者1.7ms电平indexStep = STEP_CHECK_0 #记录当前步骤
recordList = [0 for x in range(1000)] #使用list记录中断时间参数
index = 0 #当前记录所在位置
lastComeInTime = 0 #用于记录上一次中断的时间#定义中断函数
#中断函数中不要做太多的事情,但是也不要用信号量然后在loop主循环中记录时间,测试发现使用信号量在loop中记录时间会有几百微秒的差距导致不能成功解码,在这里只记录每次下降沿的时间差即可
def irqRecord(source):global recordListglobal lastComeInTimeglobal indexirqTime = utime.ticks_us()if lastComeInTime == 0:lastComeInTime = irqTimeindex = 0returngapTime = utime.ticks_diff(irqTime,lastComeInTime) #计算时间差lastComeInTime = irqTimerecordList[index] = gapTimeindex = index + 1gpioNum = 28 #HX1838信号检测引脚
irRecv = machine.Pin(gpioNum, machine.Pin.IN, machine.Pin.PULL_UP)
irRecv.irq(trigger = machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING,handler = irqRecord)#处理电平数据
def resolveNecData(recordListLocal):indexStep = STEP_CHECK_0b = ""for x in range(0,index):gapTime = recordListLocal[x]if gapTime > 120_000 or gapTime < 350:#判断数据是否合法indexStep = STEP_CHECK_0b = ""continueif(indexStep == STEP_CHECK_0 and gapTime > 8000 and gapTime < 9000):#判断9ms电平,符合则下一个进入STEP_CHECK_1判断#print("step0 next go step1 timeGap =" ,gapTime )indexStep = STEP_CHECK_1continueif(indexStep == STEP_CHECK_1 and gapTime > 4000 and gapTime < 5000):#print("step1 next go step2 timeGap =" ,gapTime )indexStep = STEP_CHECK_2continueif(indexStep == STEP_CHECK_2):if(gapTime > 450 and gapTime < 650):#print("step2 timeGap ", gapTime)indexStep = STEP_CHECK_3else:indexStep = STEP_CHECK_0b = ""continueif(indexStep == STEP_CHECK_3):indexStep = STEP_CHECK_2#print("step3 timeGap =",timeGap)if( gapTime > 350 and gapTime < 650):#电平时间在0区间#print("b add 0")b = b + str(0)elif(gapTime > 1600 and gapTime < 1800):#电平时间在1区间#print("b add 1")b = b + str(1)if(len(b) == 32):#数据解码到32位则完成解码返回十六进制数据decodeData = hex(int(b,2))#print(decodeData)return decodeData#测试数据,解码结果为 0x55aa38c7
#testData = [8441, 4325, 469, 597, 469, 1733, 499, 546, 500, 1705, 497, 572, 497, 1707, 521, 573, 472, 1707, 522, 1705, 478, 568, 526, 1704, 472, 597, 475, 1703, 496, 600, 499, 1703, 500, 570, 473, 578, 519, 577, 470, 1728, 498, 1682, 493, 1733, 525, 545, 473, 569, 554, 519, 501, 1727, 475, 1707, 523, 573, 469, 598, 476, 595, 474, 1704, 500, 1729, 471, 1704, 494, 0]
#index = len(testData)#本例程未对数据做校验,可以自行实现,例如测试数据的解码数据为 0x55aa38c7  简单校验只需要0x55 + 0xaa = 0xff  以及 0x38 + 0xc7 = 0xff即可
while True:utime.sleep_ms(200)#index = len(testData)#测试数据#data = resolveNecData(testData)#测试数据data = resolveNecData(recordList)if( data == None):continueprint("this nec data is",data)recordList = [0 for x in range(1000)]index = 0

树莓派PICO使用MicroPython + HX1838 接收遥控器数据 NEC解码相关推荐

  1. 树莓派 Pico RP2040 MicroPython 编程 - 软件安装及设置

    使用 MicroPython,仅用 8 行代码,我们就可以实现 LED 闪烁程序. 下载安装 Python IDE:Thonny Thonny 是 一个面向初学者的 Python IDE 环境,自带 ...

  2. 使用树莓派PICO点灯

    使用树莓派PICO点灯 树莓派PICO简介 具体步骤方式 ①下载Thonny软件 ②为PICO烧录MicroPython固件 ①下载UF2文件 ②PICO进入boot模式烧录固件 ③进行点灯 效果 总 ...

  3. 树莓派PICO -oled详细避坑指导

    树莓派PICO-oled避坑指导 一.前文   注意:本教程使用的编辑器为Thonny,语言为micropython   案例将使用096英寸128x64的iicoled屏,库为ssd1306py 二 ...

  4. 使用微软新必应(New Bing)AI机器人生成树莓派Pico W开发板MicroPython应用程序

    微软新必应是一款由人工智能驱动的AI搜索引擎(基于Chat GPT4.0的先进自然语言生成模型),它能与用户进行流畅.自然.有趣的对话,并提供可靠.及时的搜索结果,以及回答用户的各种问题.我们可以使用 ...

  5. 树莓派Pico直流电机接口技术及PWM电机调速控制MicroPython编程

    内容目录: 一.树莓派Pico开发板直流电机接口技术 1.H桥驱动电路的基本工作原理 2.典型H桥驱动电路分析 3.DRV8833双H桥电机驱动模块介绍 4.Pico开发板与直流电机接口 二.Pico ...

  6. 树莓派 PICO基础教程(基于MicroPython)

    文章目录 1 树莓派 PICO 简介 1.1 简介 1.2 配置 [^2] 1.3 引脚图 1.4 尺寸 2 安装 2.1 烧录固件 2.2 安装IDE(Thonny IDE) 2.3 离线运行程序 ...

  7. 物联网开发笔记(69)- 使用Micropython开发树莓派pico开发板raspberry pi pico之控制晶联JLX172104G-590液晶模块

    一.目的 这一节我们学习如何使用我们的树莓派pico开发板raspberry pi pico来控制晶联JLX172104G-590液晶模块. 二.环境 Win10 + 树莓派pico开发板raspbe ...

  8. 树莓派Pico W无线WiFi开发板使用方法及MicroPython网络编程实践

    树莓派Pico W开发板是树莓派基金会于2022年6月底推出的一款无线WiFi开发板,它支持C/C++和MicroPython编程.本文介绍树莓派Pico W无线WiFi开发板的使用方法及MicroP ...

  9. 树莓派Pico迷你开发板MicroPython多线程编程实践

    内容目录: 一.多线程基本知识 二.MicroPython/Python低层多线程API介绍 三.树莓派Pico 开发板MicroPython多线程编程实践举例 3.1 Pico RP2040 MCU ...

  10. [树莓派 PICO(基于MicroPython)]基础教程02-按键测试、按键控制外设LED开关

    最近入手了pico学习. 目录 〇.总的参考 一.函数说明 二.硬件准备 三.程序-按键测试.按键控制外设LED开关 1.按键测试 2.按键控制外设LED开关 四.可能出现的问题 〇.总的参考 ①视频 ...

最新文章

  1. 【puthon】把大量csv文件写入h5文件制作数据集
  2. 比特币现金BCH今日事件
  3. Linux如何查找大文件或目录总结
  4. Exception in thread main java.lang.IncompatibleClassChangeError: net/sf/cglib/core/DebuggingClassW
  5. OpenCV的HSV空间度量与标准HSV不一样,使用的时候需要换算;另附一个调色取色的小工具
  6. Django--django安装和HTTP协议
  7. 实验九 根据材料编程(改变字体颜色)
  8. 【重磅】央行发大招!最全面的支付安全风险大检查来了……
  9. 迭代器自定义遍历对象
  10. php用到的mysql语句_PHP中常用到的一些MySQL语句_php
  11. python线程监控_Python多线程的事件监控
  12. 《学习之道》第六章补充
  13. Forge Viewer 的协作审查如何使用
  14. 基于51单片机智能小车防撞系统系统 代码+protuse仿真
  15. 常见的十二种逻辑谬误
  16. linux定时关闭系统at,『学了就忘』Linux系统管理 — 8.系统定时任务(at命令)
  17. 被国人误解了千年的七句话
  18. libreCAD源码阅读笔记1
  19. 【SQL 中级语法 2】自连接的用法
  20. opencv程序十一:鼠标绘图

热门文章

  1. 免打扰清理微信僵尸好友工具
  2. 【愚公系列】2022年02月 Django商城项目 26-搜索引擎功能实现
  3. V20变频器手自动切换(就地远程切换)的具体方法示例
  4. matlab归一化mapminmax警告,matlab函数mapminmax归一化的问题
  5. RFC2544性能测试64字节实际报告显示为66字节
  6. SVN工具使用及常用操作命令总结
  7. PTES执行内容思维导图
  8. 十八掌教育_徐培成_Hadoop3.0-01.简介
  9. origin2018软件下载和安装教程
  10. CS61A lab 0:getting started