当前位置: 首页 > news >正文

【STM32】【HAL库】遥控关灯2 分机

相关连接

【STM32】【HAL库】遥控关灯0 概述

【STM32】【HAL库】遥控关灯1主机

【STM32】【HAL库】遥控关灯2 分机

【STM32】【HAL库】遥控关灯3 遥控器

需求

接收RF433和红外信号,根据信号内容控制舵机

硬件设计

主控采用stm32F103c6

STM32

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aTpXZCoT-1676130507363)(picture/1.png)]

433接收

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WsUmue6W-1676130507364)(picture/2.png)]

其他接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YsV5ZBTM-1676130507365)(picture/3.png)]

软件设计

接收RF433/红外的信号,并完成动作即可

相关链接

舵机驱动

NEC

RF433

舵机关灯思路

HAL初始化

定时器1

红外和RF433的计时

设置为分频后1us,默认溢出数,开中断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2OQ8G8J-1676130507366)(picture/4.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XVvEdjgQ-1676130507366)(picture/5.png)]

定时器2

用作舵机控制的PWM生成

每隔20us触发一次中断

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nUCDJHnG-1676130507367)(picture/6.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ev25gVpu-1676130507367)(picture/7.png)]

GPIO

LED:用作指示灯,推挽输出即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gvf7unPe-1676130507368)(picture/8.png)]

GPIO

舵机控制信号

配置为开漏浮空(外部接上拉电阻到5V),配置为最高等级(避免复位时让电机出现误动作)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VH8MdGJy-1676130507369)(picture/9.png)]

GPIO

RF433输入

配置为边沿中断模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fDlh0Fhr-1676130507369)(picture/10.png)]

GPIO

红外输入

配置为下降沿中断模式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nXLOmsyv-1676130507370)(picture/11.png)]

硬件看门狗

32分频,溢出值4000

每(32/40k*4000=3.2s)触发一次

本程序目的是让程序每3.2s重启一次,因此只在需要操作舵机时喂狗,主循环无喂狗

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zbCFn7g3-1676130507370)(picture/12.png)]

程序

中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if (htim == &Steering_Engine_TIM){if (M_EN == 1)Steering_Engine_Action();elseHAL_GPIO_WritePin(Steering_Engine_GPIOx, Steering_Engine_GPIO_Pin, GPIO_PIN_SET);}else if (htim == &htim3){}
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin == GPIO_PIN_2){if (IR_NEC_Read_ins == 0)RF_Read_Decode();}else if (GPIO_Pin == GPIO_PIN_3){IR_NEC_Read_Decode(air);}
}

主循环处理函数

 if (IR_NEC_Read_OK){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);// printf("%02X%02X%02X%02X\r\n", IR_NEC_Read_Dat[0], IR_NEC_Read_Dat[1], IR_NEC_Read_Dat[2], IR_NEC_Read_Dat[3]);if (IR_NEC_Read_Dat[0] == 0x4D && IR_NEC_Read_Dat[1] == 0xb2 && IR_NEC_Read_Dat[2] == 0xa3 && IR_NEC_Read_Dat[3] == 0x5C)OPEN();else if (IR_NEC_Read_Dat[0] == 0x4D && IR_NEC_Read_Dat[1] == 0xb2 && IR_NEC_Read_Dat[2] == 0x59 && IR_NEC_Read_Dat[3] == 0xa6)CLOSE();if (IR_NEC_Read_Dat[0] == 0x84 && IR_NEC_Read_Dat[1] == 0xff && IR_NEC_Read_Dat[2] == 0x81 && IR_NEC_Read_Dat[3] == 0x7e)OPEN();else if (IR_NEC_Read_Dat[0] == 0x84 && IR_NEC_Read_Dat[1] == 0xff && IR_NEC_Read_Dat[2] == 0x01 && IR_NEC_Read_Dat[3] == 0xfe)CLOSE();HAL_IWDG_Refresh(&hiwdg);HAL_Delay(500);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);IR_NEC_Read_Dat[0] = 0;IR_NEC_Read_Dat[1] = 0;IR_NEC_Read_Dat[2] = 0;IR_NEC_Read_Dat[3] = 0;IR_NEC_Read_OK = 0;}if (RF_READ_OK){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET);// printf("%02X%02X%02X\r\n", RF_READ_data[0], RF_READ_data[1], RF_READ_data[2]);if (RF_READ_data[0] == 0xac && RF_READ_data[1] == 0x22 && RF_READ_data[2] == 0x00)OPEN();else if (RF_READ_data[0] == 0xac && RF_READ_data[1] == 0x22 && RF_READ_data[2] == 0xff)CLOSE();HAL_IWDG_Refresh(&hiwdg);HAL_Delay(500);HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET);RF_READ_data[0] = 0;RF_READ_data[1] = 0;RF_READ_data[2] = 0;RF_READ_OK = 0;// __set_FAULTMASK(1);// NVIC_SystemReset();}

开关灯控制函数

void OPEN()
{M_EN = 1;HAL_IWDG_Refresh(&hiwdg);Steering_Engine_360(0, 30);HAL_Delay(500);HAL_IWDG_Refresh(&hiwdg);Steering_Engine_360(1, 40);HAL_Delay(80);HAL_IWDG_Refresh(&hiwdg);Steering_Engine_Stop();M_EN = 0;
}
void CLOSE()
{M_EN = 1;HAL_IWDG_Refresh(&hiwdg);Steering_Engine_360(1, 30);HAL_Delay(500);HAL_IWDG_Refresh(&hiwdg);Steering_Engine_360(0, 30);HAL_Delay(80);HAL_IWDG_Refresh(&hiwdg);Steering_Engine_Stop();M_EN = 0;
}

成品

另外app开发很简单,百度凑凑就行了,源码同样在GitHub上,请自行查看即可

GitHub

相关文章:

【STM32】【HAL库】遥控关灯2 分机

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 接收RF433和红外信号,根据信号内容控制舵机 硬件设计 主控采用stm32F103c6 STM32 433接收 其他接口 软件设计 接…...

代码随想录算法训练营第27天|● 93.复原IP地址 ● 78.子集 ● 90.子集II

93.复原IP地址 看完题后的思路 典型分割问题略lue略剪枝条件 sub&#xff1a; 1&#xff09; 不是一位首字母为0 2&#xff09;大于三位 3&#xff09;介于0-255之间 4) 当已分割得到3个时&#xff0c;第四个直接从startIndex到末尾就行 代码 ArrayList<String> slist…...

Unity UI合批的问题

今天看到一个问题&#xff0c;主要说的是Unity中的UI资源合批的问题之前一直以为主要和UI资源在Hierarchy中的排列顺序有关&#xff0c;但其实这并不是最主要的&#xff0c;因为Unity会对同一个Canvas下的UI进行排序&#xff08;注&#xff1a;不同Canvas下的资源是不能够合批的…...

MWORKS--系统建模与仿真

MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…...

PC端开发GUI

PC端开发GUI 一、搭建PC端环境:常规方式1、Python2、Pycharm二、搭建PC端环境:创建虚拟环境1、创建文件夹存放虚拟环境相关2、配置环境变量3、创建.ui文件4、.ui文件转成.py文件5、打包.py文件来发布.exe一、搭建PC端环境:常规方式 1、Python 注意Python版本不能超过3.9,…...

解读手机拍照的各个参数(拍照时,上面会有6个符号)

1第一个符号是闪光灯符号&#xff0c;如下图所示。有四种模式&#xff0c; 手机的闪光灯分别为关闭、自动、开启和常亮四种状态。 关闭&#xff1a;就是在任何情况下都不会闪光 自动&#xff1a;由手机来判断此时的光线强弱&#xff0c;若手机测光认为光线太弱&#xff0c;则…...

数字钥匙最新进展文章

在未来出行上&#xff0c;智能汽车越来越卷。 新车除了拼高精度激光雷达、堆大算力芯片、标配辅助驾驶、智能语音识别&#xff0c;还在车钥匙上展开了激烈角逐&#xff0c;越来越多的厂商开始在量产车型上搭载数字钥匙&#xff0c;实现无钥匙进入车内。 去年1月蔚来发布轿车E…...

如何在VMware虚拟机上安装运行Mac OS系统(详细图文教程)

一、安装前准备 虚拟机运行软件&#xff1a;VMware Workstation Pro&#xff0c;版本&#xff1a;16.0.0 。VMware Mac OS支持套件&#xff1a;Unlocker。Mac OS系统镜像。 如果VMware 在没有安装Unlocker的情况下启动&#xff0c;在选择客户机操作系统时没有支持Mac OS的选项…...

C++中的强制类型转换

接触过C语言的朋友都知道&#xff0c;C语言中也有强制类型转换&#xff0c;但是C语言中的强制类型转换会有一些问题&#xff0c;比如&#xff1a; int a 0x1234; char b (char)a; 上述的代码出现一个问题就是a 这个int型强制转化成b 这个char型时损失了一些精度&#xff0c…...

任何人都可以学习Rasa之优秀Rasa学习资源推荐

任何人都可以学习Rasa之优秀Rasa学习资源推荐 欢迎同学们报名Gavin老师的Rasa系列课程&#xff0c;任何人都可以学习Rasa之优秀Rasa学习资源推荐&#xff1a; 1.NLP on Transformers高手之路137课 2 .Rasa 3.X 智能对话机器人案例开发硬核实战高手之路 &#xff08;7大项目Ex…...

数据中心的 TCP-Delay ACK 与 RTO, RACK

TCP 对 RTO 有个最小值限制&#xff0c;一般限制为 MIN_RTO 200ms。之所以有这个限制&#xff0c;在于要适应 Delay ACK&#xff0c;而 Delay ACK 的意义&#xff0c;不多说&#xff0c;摘自 RFC1122&#xff1a; MIN_RTO 应该足够大&#xff0c;以覆盖 Delay ACK 的影响&…...

MySQL与常见面试题

目录 事务概述ACIDAUTOCOMMIT总结并发一致性问题丢失修改读脏数据不可重复读幻读原因和解决方法隔离级别未提交读(READ UNCOMMITTED)提交读(READ COMMITTED)可重复读(REPEATABLE READ)可串行化(SERIALIZABLE)加锁封锁粒度封锁类型读写锁意向锁...

FFmpeg进阶: 采用音频滤镜对音频进行转码

文章目录采样位数采样率声道布局码率使用FFmpeg音频滤镜进行转码参考链接很多时候为了让视频文件适应不同的播放领域&#xff0c;我们需要对音频文件进行转码操作&#xff0c;转码操作其实主要就是修改音频文件的各种参数包括:采样位数、采样率、音频布局、码率等等。下面分别介…...

C++:AVL树

AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中搜索元素&#xff0c;效率低下&#xff0c;时间复杂度为O&#xff08;N&#xff09;&#xff1b; 两位俄罗斯的数学家G.M.Ade…...

Docker中安装Oracle-12c

前言 MySQL和Oracle是开发中常用到的两个关系型数据库管理系统&#xff0c;接上一期内容&#xff0c;这一期在Docker中完成oracle-12c的安装和配置。 安装oracle-12c 1、拉取oracle-12c镜像 启动Docker Desktop后在cmd窗口中执行docker search oracle命令&#xff0c;搜索O…...

教你如何用Python分析出选注双色球号码

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 数据集介绍 找从19年到现在的开奖历史数据&#xff0c;我们首先要把这个历史数据拿到&#xff0c; 拿到我们再进行做分析&#xff0c;分析每个号码出现的频率是多少&#xff0c; 哪个多&#x…...

elasticsearch映射及字段类型

查询映射关系类型上对字段的类型进行映射&#xff0c;我们前面知道可以通过get方法请求_mapping查询指定类型的映射关系&#xff1a;此语句可以查询get-together索引下的group类型的映射关系更新映射关系使用put方法可以更新类型的映射这里指定了new-events类型的字段映射关系&…...

1493围圈报数(队列)

题目描述 有&#xff4e;个人依次围成一圈&#xff0c;从第&#xff11;个人开始报数&#xff0c;数到第&#xff4d;个人出列&#xff0c;然后从出列的下一个人开始报数&#xff0c;数到第&#xff4d;个人又出列&#xff0c;…&#xff0c;如此反复到所有的人全部出列为止。…...

【ArcGIS Pro二次开发】(2):创建一个Add-in项目

Add-In即模块加载项&#xff0c;是一种能够快速扩展桌面应用程序功能的全新扩展方式。 一、创建新项目 1、打开VS2002&#xff0c;选择创建新项目。 2、在搜索框中输入“arcgis pro”&#xff0c;在搜索结果中选择【ArcGIS Pro 模块加载项】创建项目&#xff0c;注意选择语言应…...

浏览器缓存是如何提升网站访问速度的

提升速度&#xff0c;降低负载 浏览器访问一个页面时&#xff0c;会请求加载HTML、CSS和JS等静态资源&#xff0c;并把这些内容渲染到屏幕上。 对浏览器来说&#xff0c;如果页面没有更新&#xff0c;每次都去请求服务器是没有必要的。所以&#xff0c;把下载的资源缓存起来&…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...