【STM32】电容触摸按键

电容按键就是酷,但据我使用过电容按键版的洗澡计费机子后,一生黑(湿手优化没做好的电容按键简直稀碎)。

大部分图片来源:正点原子HAL库课程

 专栏目录:记录自己的嵌入式学习之路-CSDN博客


目录

1    触摸按键原理

2    测量是否触摸的原理

3    关键点

3.1    充电时间测量

3.2    开机校准

3.3    轮询充电时间

3.4    阻止多次按下的响应


1    触摸按键原理

触摸按键可以理解为一个电容。


2    测量是否触摸的原理


3    关键点

3.1    充电时间测量

(1)    放电并进入充电状态:

        a)    GPIO设置为推挽输出,并输出低电平,延时个几毫秒让电容放电;

        b)    将输入捕获的标志位清空;

        c)    将计数器的值清空;

        d)    GPIO设置为浮空输入,这里注意上下拉一定要设置为无,否则默认是上拉输入,就不是浮空了。

(2)    获取充电上升沿产生时间:

        a)    循环检测输入捕获标志位;

        b)    若标志为RESET,则在循环中一次次获取计数器的值,若计数器的值快溢出了,就视为超时,返回计数器的值;

        c)    若标志位SET则不进入循环,直接输出输入捕获的比较值,该值则为充电过程中的计数次数。

3.2    开机校准

开发板上电的时候就需要测试一次没有触摸时的充电时间,可以在定时器初始化后调用测量。

校准时可以考虑多次测量,去掉最大值,去掉最小值,再平均,以获得较为准确的无触摸充电时间。

3.3    轮询充电时间

使用定时器或者在main函数while循环中定期调用充电时间测量函数进行测量,若测出来的充电时间大于初始的无触摸充电时间一定程度(注意⚠️!是大于一定程度,而不是仅仅大于,因为无触摸时充电时间也有一定的跳动,因此应该大于其一定程度才能算触摸了),则可以判定触摸按键被触摸。

此处,轮询的每一次都可以考虑多次测量,去掉最大值,去掉最小值,再平均,以获得较为准确的触摸充电时间。

3.4    阻止多次按下的响应

使用一个标志,在按下后置1,且每次按下后当且仅当该标志为0时才发生按键响应动作,而在检测到没按下的状态将该标志置0。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/51664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zookeeper官网Java示例代码解读(一)

2024-08-22 1. 基本信息 官网地址: https://zookeeper.apache.org/doc/r3.8.4/javaExample.html 示例设计思路 Conventionally, ZooKeeper applications are broken into two units, one which maintains the connection, and the other which monitors data. I…

【C++ Primer Plus习题】7.5

问题: 解答: #include <iostream> using namespace std;int function(int n) {if (n 0)return 1;if (n 1)return 1;return n* function(n - 1); }int main() {int value 0;while (true){cout << "请输入数字:";cin >> value;cout << val…

华为Huawei路由器交换机SSH配置

华为设备的SSH登录配置需要5个步骤&#xff0c;示例如下&#xff1a; 一、配置命令 使能SSH功能 stelnet server enable生成公钥 rsa local-key-pair create 1024配置AAA用户密码及相应授权 aaalocal-user xxx password cipher xxxyyy1234local-user xxx privilege level …

ADB 获取屏幕坐标,并模拟滑动和点击屏幕

本文声明:本文是参考https://blog.csdn.net/beyond702/article/details/69258932编制。同时,补充了在windows系统模式下,详细的获取屏幕坐标的步骤。 1.判断设备与windows电脑USB连接是否正常 在CMD窗口输入命令:ADB devices,按ENTER键,输出如下结果,则表示连接正常。 …

Prometheus+Grafana监控数据可视化

上一篇文章讲了prometheus的简单使用&#xff0c;这一篇就先跳过中间略显枯燥的内容&#xff0c;来到监控数据可视化。 一方面&#xff0c;可视化的界面看着更带劲&#xff0c;另一方面&#xff0c;也更方便我们直观的查看监控数据&#xff0c;方便后面的学习。 Grafana安装与…

【qml实现TCP服务器】

Question qml实现TCP服务器 Answer 在QML中实现TCP服务器需要借助C来处理底层的网络通信&#xff0c;因为QML本身并不直接支持TCP服务器功能。我们可以通过在C中实现TCP服务器&#xff0c;然后在QML中通过Qt Quick的Connections元素与C对象进行交互。以下是一个简单的示例&a…

DIFFUSION 系列笔记| Latent Diffusion Model、Stable Diffusion基础概念、数学原理、代码分析、案例展示

目录 Latent Diffusion Model LDM 主要思想 LDM使用示例 LDM Pipeline LDM 中的 UNET 准备时间步 time steps 预处理阶段 pre-process 下采样过程 down sampling 中间处理 mid processing 上采样 upsampling 后处理 post-process LDM Super Resolution Pipeline…

Vue面试

1.Vue响应式原理 整体思路是&#xff1a;数据劫持观察者模式 通过Object.defineProperty方法和Proxy对象来劫持各个属性的setter、getter&#xff0c;内部Vue追踪依赖&#xff0c;当数据发生变动时发布消息给订阅者&#xff0c;触发相应的监听回调。 Vue2的响应式原理&#…

完全二叉树的基本操作

二叉树节点类型 typedef struct node { int no; struct node *pleftchild; struct node *prightchild; }treenode; 一.创建完全二叉树 传入起始编号&#xff08;1&#xff09;和结束编号&#xff08;k&#xff09; ptmpnode malloc(sizeof(treenode)); ptmpnode->pl…

Redis基本全局命令

文章目录 get和setkeysexistsdelexpirettltype redis全局命令&#xff1a; redis支持很多种数据结构&#xff0c;整体上来说。redis是键值对结构&#xff0c;key固定就是字符串&#xff0c;value实际上就会有很多种&#xff0c;比如说&#xff1a; 字符串哈希表列表有序集合 …

TCP ISO/OSI模型

OSI参考模型在网络层支持无连接和面向连接的通信&#xff0c;但在传输层仅有面向连接的通信。而TCP/TP模型认为可靠性是端到端的问题&#xff0c;因此它在网络层仅有一种无连接的通信模式&#xff0c;但在传输层支持无连接和面向连接两种模式。 针对上述问题我想再做一点…

C++|初始化自定义结构体的几种方式

在C中&#xff0c;初始化自定义结构体有多种方式&#xff0c;每种方式都有其适用场景。以下是一些常见的初始化方法&#xff1a; 直接初始化&#xff1a; struct MyStruct {int x;double y; };MyStruct s1 {10, 3.14};列表初始化&#xff08;C11及以后版本&#xff09;&#x…

住宅物业满意度计算方式中满意率和满意度指数的区别

满意率和满意度指数是用于计算住宅物业满意度的两种不同方式&#xff0c;它们的区别如下&#xff1a; 1、满意率&#xff1a;满意率是通过计算满意的居民人数与总参与调查的居民人数之间的比例来衡量满意度。它以百分比形式表示&#xff0c;可以直观地了解居民对物业管理的整体…

集运系统如何多维度展现企业业务情况?

在集运行业&#xff0c;数据是企业决策的重要依据。为了在竞争中保持优势&#xff0c;企业需要一套高效、灵活且可靠的管理工具来应对市场的快速变化。易境通集运系统以其全面而精细的统计报表功能&#xff0c;成为企业决策优化和业务增长的重要助手。 易境通集运系统https://…

使用在AMD GPU上运行的ROCm进行大语言模型的自然语言处理任务

Performing natural language processing tasks with LLMs on ROCm running on AMD GPUs — ROCm Blogs 在这篇博客中&#xff0c;您将学习如何使用在AMD的Instinct GPU上运行的ROCm进行一系列流行且有用的自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;使用不同的大…

新手该如何选择与小程序定位相关的关键词

关键词的优化是提高小程序排名的关键步骤之一&#xff0c;所以如何选择与小程序定位相关的关键词是一个很重要的过程&#xff0c;需要考虑多个因素以确保关键词既符合小程序的业务特性&#xff0c;又能吸引目标用户。以下是一些具体的步骤和建议&#xff1a; 1. 深入了解小程序…

Go发布自定义包

1、初始化go.mod go mod init github.com/xumeng03/images2、编写包内容 这里只是一个简单的压缩jpg/jpeg图片例子&#xff0c;代码参考 https://github.com/disintegration/imaging 2.1、fs.go package imagesimport ("image""io""os""p…

Vue3中的defineExpose的认识

文章目录 defineExpose子组件父组件&#xff1a;总结&#xff1a; defineExpose 使用 <script setup> 的组件是默认关闭的——即通过模板引用或者 $parent 链获取到的组件的公开实例&#xff0c;** 不会 **暴露任何在 <script setup> 中声明的绑定。 可以通过 def…

OpenCV几何图像变换(10)透视变换函数warpPerspective()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 warpPerspective 函数使用指定的矩阵对源图像进行透视变换&#xff1a; dst ( x , y ) src ( M 11 x M 12 y M 13 M 31 x M 32 y M 33 , M…

算法练习题04:连续子字符串出现的次数

题目描述 在2021年11月6日&#xff0c;中国战队EDG&#xff08;Edward Gaming&#xff09;在冰岛雷克雅未克举行的《英雄联盟》全球总决赛中&#xff0c;击败了韩国战队DK&#xff08;DWG KIA&#xff09;&#xff0c;首次捧起召唤师杯。 虽然两支队伍在比赛中表现都很出色&a…