OpenHarmony轻量系统开发【6】驱动之ADC按键

news/2024/5/16 12:08:11

摘要:本文简单介绍如何操作ADC去读取电压,并且实现开发板上3个ADC按键检测的功能

适合群体:适用于润和Hi3861开发板,L0轻量系统驱动开发

文中所有代码仓库:https://gitee.com/qidiyun/hihope-3861-smart-home-kit

6.1实验效果

查看开发板,可以看到除了复位按键之外,还有3个按键。而查看原理,我们可以看到这个3个按键其实都是接的GPIO5 引脚,而GPIO5引脚又可复用为ADC2引脚。

故而,我们可以猜测出来我们可以使用ADC检测电压,判断出来是哪个引脚被按下了。

看下效果:

当我按下 按键1的时候,串口会打印:

当我按下按键2的时候串口会打印:

当我按下 USER按键的时候串口会打印

其中 vlt_min 表示读取到ADC值的最小值,

vlt_max 表示读取到ADC值的最大值。

由此我们可以看到,按键1被按下的时候,ADC值得范围在 0.563 ~ 0.577

按键2按下后,ADC值在 0.963 ~ 0.970

USER按键按下后 ADC值 在 0.197 ~ 0.204

如果没有按键按下,则ADC值在 3.227 ~ 3.241

vlt_min:3.227, vlt_max:3.241

6.2代码实现

代码实现其实很简单。

(1)引脚初始化

这里由于GPIO5默认被复用为串口引脚,这里我们重新修改为普通GPIO引脚。初始化代码如下:

    (hi_void)hi_gpio_init();hi_io_set_func(HI_IO_NAME_GPIO_5, HI_IO_FUNC_GPIO_5_GPIO); /* uart1 rx */ret = hi_gpio_set_dir(HI_GPIO_IDX_5, HI_GPIO_DIR_IN);if (ret != HI_ERR_SUCCESS) {printf("===== ERROR ======gpio -> hi_gpio_set_dir1 ret:%d\r\n", ret);return;}

(2)读取ADC值

读取ADC值的代码页相对简单,这里,我是重复读取64次,减少误判。

    memset_s(g_adc_buf, sizeof(g_adc_buf), 0x0, sizeof(g_adc_buf));for (i = 0; i < ADC_TEST_LENGTH; i++) {ret = hi_adc_read((hi_adc_channel_index)HI_ADC_CHANNEL_2, &data, HI_ADC_EQU_MODEL_1, HI_ADC_CUR_BAIS_DEFAULT, 0);if (ret != HI_ERR_SUCCESS) {printf("ADC Read Fail\n");return;}g_adc_buf[i] = data;}

(3)对读出来的ADC值进行判断处理

S1对应的是按键1 、 S2对应的是按键2 、 S3对应的是 USER按键

    for (i = 0; i < data_len; i++) {vlt = g_adc_buf[i];float voltage = (float)vlt * 1.8 * 4 / 4096.0;  /* vlt * 1.8 * 4 / 4096.0: Convert code into voltage */vlt_max = (voltage > vlt_max) ? voltage : vlt_max;vlt_min = (voltage < vlt_min) ? voltage : vlt_min;}//printf("vlt_min:%.3f, vlt_max:%.3f \n", vlt_min, vlt_max);vlt_val = (vlt_min + vlt_max)/2.0;if((vlt_val > 0.4) && (vlt_val < 0.6)){if(key_flg == 0){key_flg = 1;key_status = KEY_EVENT_S1;}}if((vlt_val > 0.8) && (vlt_val < 1.1)){if(key_flg == 0){key_flg = 1;key_status = KEY_EVENT_S2;}}if((vlt_val > 0.01) && (vlt_val < 0.3)){if(key_flg == 0){key_flg = 1;key_status = KEY_EVENT_S3;}}if(vlt_val > 3.0){key_flg = 0;key_status = KEY_EVENT_NONE;}

(4)使用

编写好上面代码后,就可以直接在while循环中判断按键值了:

    while(1){//读取ADC值app_demo_adc_test();switch(get_key_event()){case KEY_EVENT_NONE:{}break;case KEY_EVENT_S1:{printf("KEY_EVENT_S1 \r\n");}break;case KEY_EVENT_S2:{printf("KEY_EVENT_S2 \r\n");}break;case KEY_EVENT_S3:{printf("KEY_EVENT_S3 \r\n");}break;}usleep(30000);}

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向


http://www.mrgr.cn/p/12452772

相关文章

Pycharm——安装mypy(静态分析器)

pycharm安装mypy mypy是一个静态分析器,为在程序运行前进行代码分析,解决数据类型不一致或数据类型错误的问题。安装插件添加mypy程序:找到自己的目录C:\Users\xuanyongjun\AppData\Roaming\Python\Python312\Scripts\mypy.exe 实参:$FilePath$ 工作目录:$FileDir$使用myp…

CBD

CBD(Central Business District,中央商务区),具体指一个国家或大城市里主要商业活动的聚集区。 美加等地也称商业中心区为“Downtown”(城市商业区),因为过去的住宅区都在山上,而商店街都在山下。而日本和韩国称中心商务区为“都心”或“繁华街”。 CBD概念最早产生于1…

​面试经典150题——LRU 缓存

​ 1. 题目描述 2. 题目分析与解析 首先讲解一下LRU LRU 是“Least Recently Used”的缩写&#xff0c;LRU 算法的基本思想是跟踪最近最少使用的数据&#xff0c;并在缓存已满且需要存储新数据时优先驱逐该数据。 LRU 算法通常的工作原理的简化解释&#xff1a; 当访问或使…

初等双射构造

组合意义好难My Blogs P0对于正整数 \(n\),称 \(a_{1\dots k}\) 是 \(n\) 的有序划分,当且仅当 \(\sum_i a_i=n\)。给定 \(n(\geq 2)\),求满足 \(\sum_{i}[2|a_i]\) 是偶数的有序划分个数。答案:\(2^{n-2}\)。 \(n\) 的所有划分可以看成有 \(n-1\) 个空位,每个空位可以放板…

Go 编译构建的一些细节

Go 编译构建的一些细节 发现自己竟然没有怎么认真研究过 go 的编译构建命令。 结论前置 go run 专门用来运行命令源码文件的命令&#xff0c;一般用来运行单个文件go build 主要是用于测试编译。编译某个包或者项目&#xff0c;在当前目录下生成可执行文件go install 编译并…

【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波(文末附3个算法源码)

效果: MPU6050姿态解算-卡尔曼滤波+四元数+互补滤波 目录 基础知识详解 欧拉角

2024年环境科学,资源与材料化学国际会议(ICESRMC2024)

2024年环境科学&#xff0c;资源与材料化学国际会议(ICESRMC2024) 会议简介 2024年国际环境科学、资源与材料化学会议&#xff08;ICESRMC2024&#xff09;将在中国三亚举行。ICESRMC2024会议主要关注环境科学、资源和材料化学&#xff0c;旨在为环境科学、能源和材料化学领域…

配置nginx访问出现403问题Permission denied

1.配置文件内用户与启动nginx的文件的目录不同(未配置用户)2。nginx的启动user要有操作数据目录的权限本帖子也是纯手工制作,转载请标明出处-----------burukku(づ。◕ᴗᴗ◕。)づ

XILINX 7系列时钟资源

文章目录 前言一、时钟概要1.1、CC1.2、BUFR、BUFIO、BUFMR1.3、CMT1.4、BUFH1.5、BUFG 二、时钟路由资源三、CMT 前言 本文主要参考xilinx手册ug472 一、时钟概要 7系列FPGA时钟资源主要有CC、BUFR、BUFIO、BUFMR、CMT、BUFG、BUFH和GTE_COMMON 1.1、CC “CC”&#xff0…

遇到这3种接口测试问题,其实,你可以这么办~

作为整个软件项目的必经环节&#xff0c;软件测试是不可缺少的“查漏补缺”环节。而作为软件测试中的重要一环——接口测试&#xff0c;几乎串联了整个项目所有的输入和输出环节。 前几年&#xff0c;我在做后端测试时&#xff0c;接触最多的正是接口测试。基于此&#xff0c;我…

Rust gRPC 开发 todo-demo

在這篇文章中,我們將使用 gRPC 創建一個基本的 Todo 應用程序。首先,我們將非常快速的概述一下 gRPC 和 Protocol Buffers。 什麼是 gRPC? gRPC 是一個現代的開源的高性能遠程過程調用 (RPC) 框架,可以在任何環境下運行。RPC 代表遠程過程調用(Remote Procedure Call),開頭…

HoloLens2开发时,VS2022的组件和模块配置

HoloLens2开发的时候&#xff0c;VS2022的安装和配置清单&#xff08;有的模块可能不是必须的模块&#xff09; 一、大的模块配置 二、各模块组件的配置

省钱小妙招

不知道怎么地,房价再跌 物价却高涨起来了,导致在网上购物不得不小心理性购买了。很多小伙伴都不知道我们平时购买买的东西,商品的背后的佣金是非常多的,一单在【5-20】元区间 这是半年节省下来的累计收益,虽不多但能省则省吧每单的具体佣金报酬可扫码下载【支持IOS、安卓】…

甘特图使用小诀窍,项目把控游刃有余

在项目管理过程中,掌握甘特图的使用技巧可以让你事半功倍,高效规划和监控项目进度。作为一种视觉化的工具,甘特图直观地展示了任务的开始和结束时间、持续时间以及任务之间的依赖关系,有助于预测和优化资源分配。掌握以下几个小诀窍,你就能驾驭甘特图,游刃有余地把控整个项目。…

Aigtek电压放大器的使用范围有哪些方面

电压放大器是一种常见的电子设备&#xff0c;用于将输入信号的电压幅度增大到更高的水平。它在各种领域中有广泛的应用&#xff0c;涉及多个方面。 下面是电压放大器的一些主要使用范围&#xff1a; 音频放大器&#xff1a;音频放大器是电压放大器的重要应用之一。它被广泛应用…

windows远程桌面快速切换回本地桌面方法

因为工作经常要用到远程主机,所以经常要切换来切换去,碍于比较难多申请一个屏幕专门用作远程桌面,所以想通过快捷键的方式进行快速切换,但是远程桌面全屏下面本机的快捷键和远程桌面的快捷键没办法很好的兼容,以下是探索的几种实现方式快捷键方式 远程桌面全屏下面,使用c…

【热门话题】OneFlow深度学习框架介绍

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 OneFlow深度学习框架介绍引言一、OneFlow概述1.1 定位与起源1.2 核心特性数据流…

树莓派安装Nginx服务结合内网穿透实现无公网IP远程访问

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx&#xff08;发音为“engine-x”&#xff09;可以将您的树莓派变成一个强大的 Web 服务器&#xff0c;可以用于托管网站或 Web 应用程序。相比其他 Web 服务器&#xff0c;Ngi…

pbootcms百度推广链接打不开显示404错误页面

PbootCMS官方在2023年4月21日的版本更新中&#xff08;对应V3.2.5版本&#xff09;&#xff0c;对URL参数添加了如下判断 if(stripos(URL,?) ! false && stripos(URL,/?tag) false && stripos(URL,/?page) false && stripos(URL,/?ext_) false…

使用 Docker 部署 SurveyKing 调查问卷系统

1)SurveyKing 介绍SurveyKing 是一款功能强大、操作简便的开源问卷系统。它不仅满足了用户对问卷调查的基本需求,还提供了丰富的逻辑设置和灵活的问题设置,使得问卷制作更加智能化和个性化。此外,SurveyKing 还具有快速部署和安全可靠等优点,使得用户能够轻松高效地开展问…