ESP32(Micro Python)LVGL 四路ADC

news2024/12/24 9:02:11

本程序布局与上一个程序相同,引脚不重合,可以在不更换外设的情况下切换程序。由于仪表盘显示的数值范围不可调,实际显示的值为测量值占量程的百分比。

269c478b83ba4c28b2e118b950c95473.jpg

 代码如下

import lvgl as lv

import time

from espidf import VSPI_HOST

from ili9XXX import ili9341

from xpt2046 import xpt2046

import fs_driver

from machine import Pin

from machine import ADC

# ------------------------------ 屏幕初始化操作 --start------------------------

# 屏幕宽高

WIDTH = 240

HEIGHT = 320

# 创建显示屏对象

disp = ili9341(miso=19, mosi=23, clk=18, cs=5, dc=26, rst=27, power=14, backlight=-1, backlight_on=0, power_on=0, rot=0x80,

        spihost=VSPI_HOST, mhz=60, factor=16, hybrid=True, width=WIDTH, height=HEIGHT,

        invert=False, double_buffer=True, half_duplex=False, initialize=True)

# 创建触摸屏对象

touch = xpt2046(cs=25, spihost=VSPI_HOST, mosi=-1, miso=-1, clk=-1, cal_y0 = 423, cal_y1=3948)

# ------------------------------ 屏幕初始化操作 --stop------------------------

#定义ADC控制对象

adc1=ADC(Pin(32))

adc1.atten(ADC.ATTN_11DB) #开启衰减,量程增大到3.3V

adc2=ADC(Pin(33))

adc2.atten(ADC.ATTN_11DB) #开启衰减,量程增大到3.3V

adc3=ADC(Pin(34))

adc3.atten(ADC.ATTN_11DB) #开启衰减,量程增大到3.3V

adc4=ADC(Pin(35))

adc4.atten(ADC.ATTN_11DB) #开启衰减,量程增大到3.3V

# 1. 创建显示screen对象。将需要显示的组件添加到这个screen才能显示

scr = lv.obj() # scr====> screen 屏幕

fs_drv = lv.fs_drv_t()

fs_driver.fs_register(fs_drv, 'S')

scr = lv.scr_act()

scr.clean()

# 2. 封装要显示的组件

class Widget1():

    def __init__(self, scr,s,x,y,r1,r2,v1,v2): #尺寸,x轴偏移量,y轴偏移量,动画起始值,动画结束值,开始处蓝色区域最大值,结尾处红色区域最小值

        # 1. 创建仪表盘对象

        self.meter = lv.meter(scr)

        self.meter.align(lv.ALIGN.CENTER,x,y) # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)

        self.meter.set_size(s, s) # width: s height: s

        # 2. 创建刻度线对象

        scale = self.meter.add_scale()

        # -------- 子刻度线 --------

        # 51:短线的个数

        # 1:短线宽度(单位像素)

        # 7:短线长度

        # 最后1个参数:颜色

        self.meter.set_scale_ticks(scale, 21, 1, 7, lv.palette_main(lv.PALETTE.GREY))

        # -------- 主刻度线 --------

        # 10: 多少个子刻度线显示1个主刻度线

        # 2: 宽度

        # 10: 长度

        # 下一个参数:颜色

        # 10: 文字与线的距离 10像素

        self.meter.set_scale_major_ticks(scale, 4, 2, 10, lv.color_black(), 5)

        # 3. 添加警示刻度线

        # 在起点添加蓝色弧

        blue_arc = self.meter.add_arc(scale, 1, lv.palette_main(lv.PALETTE.BLUE), 0)

        self.meter.set_indicator_start_value(blue_arc, r1)

        self.meter.set_indicator_end_value(blue_arc, v1)

        # 在刻度开始处使刻度线为蓝色

        blue_arc_scale = self.meter.add_scale_lines(scale, lv.palette_main(lv.PALETTE.BLUE), lv.palette_main(lv.PALETTE.BLUE), False, 0)

        self.meter.set_indicator_start_value(blue_arc_scale, r1)

        self.meter.set_indicator_end_value(blue_arc_scale, v1)

        # 在末端添加红色弧

        red_arc = self.meter.add_arc(scale, 1, lv.palette_main(lv.PALETTE.RED), 0)

        self.meter.set_indicator_start_value(red_arc, v2)

        self.meter.set_indicator_end_value(red_arc, r2)

        # 使刻度线在刻度末端变为红色

        red_arc_scale = self.meter.add_scale_lines(scale, lv.palette_main(lv.PALETTE.RED), lv.palette_main(lv.PALETTE.RED), False, 0)

        self.meter.set_indicator_start_value(red_arc_scale, v2)

        self.meter.set_indicator_end_value(red_arc_scale, r2)

        # 4. 仪表指针

        # 4: 宽度

        # 下一参数:颜色

        # -10:指针与刻度线距离

        self.indic = self.meter.add_needle_line(scale, 2, lv.palette_main(lv.PALETTE.GREY), -5)

        # 5. 创建动画对象

        a = lv.anim_t()

        a.init()

        a.set_var(self.indic)

        temp = self.timer_cb()

        a.set_values(0, temp)

        a.set_time(500)

        # a.set_repeat_delay(100)

        # a.set_playback_time(500)

        # a.set_playback_delay(100)

        # a.set_repeat_count(lv.ANIM_REPEAT_INFINITE)

        a.set_custom_exec_cb(self.set_value)

        lv.anim_t.start(a)

        # 创建一个标签label

        self.label = lv.label(scr)

        self.label.set_text("ADC_33") # 默认值

        self.label.align_to(self.meter, lv.ALIGN.OUT_BOTTOM_MID, 0, 5) # label的中间与滑块的上外边框中间对齐,然后y向下5像素 x不变

        # 6. 添加定时器

        lv.timer_create(self.timer_cb, 200, None) # 延时

    def set_value(self, anmi_obj, value):

        """动画回调函数"""

        self.meter.set_indicator_value(self.indic, value)

    def timer_cb(self, timer=None):

        """定时器回调函数"""

        ret=round(100*adc1.read()/4095)

        self.meter.set_indicator_value(self.indic, ret)

        return ret

class Widget2():

    def __init__(self, scr,s,x,y,r1,r2,v1,v2): #尺寸,x轴偏移量,y轴偏移量,动画起始值,动画结束值,开始处蓝色区域最大值,结尾处红色区域最小值

        # 1. 创建仪表盘对象

        self.meter = lv.meter(scr)

        self.meter.align(lv.ALIGN.CENTER,x,y) # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)

        self.meter.set_size(s, s) # width: s height: s

        # 2. 创建刻度线对象

        scale = self.meter.add_scale()

        # -------- 子刻度线 --------

        # 51:短线的个数

        # 1:短线宽度(单位像素)

        # 7:短线长度

        # 最后1个参数:颜色

        self.meter.set_scale_ticks(scale, 21, 1, 7, lv.palette_main(lv.PALETTE.GREY))

        # -------- 主刻度线 --------

        # 10: 多少个子刻度线显示1个主刻度线

        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

chatgpt赋能python:Python如何在输入之前等待30秒

Python如何在输入之前等待30秒 作为一名编程工程师,程序的性能和用户体验都是非常重要的。在用户输入数据之前等待一段时间可以帮助我们避免不必要的错误和提高程序的稳定性。本文将介绍如何使用Python等待30秒在输入数据。 使用Python的time模块 Python的time模…

【强烈推荐】 十多款2023年必备国内外王炸级AI工具 (免费 精品 好用) 让你秒变神一样的装逼佬感受10倍生产力 (4) AI办公

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

SLAM实战项目(2) — ROS下运行ORB-SLAM2稠密地图重建

目录 1 运行步骤 (1) 创建工作空间 (2) 修改CmakeList.txt (3) 编译 (4) 下载bag文件 (4) 编写roslaunch文件 2 运行报错 报错1: 报错2: 报错3: 报错4: ROS学习文档:Introduction Autolabor-ROS机器人入门…

Bert模型精讲

1.Autoregressive语言模型与Autoencoder语言模型 1.1 语言模型概念介绍 Autoregressice语言模型:指的是依据前面(或后面)出现的单词来预测当前时刻的单词,代表有ElMo, GPT等。 Autoencoder语言模型:通过上下文信息来预测被mask的单词&…

Linux GCC,GDB,Shell脚本,Vim的简单使用

这里写目录标题 GCC命令GDB命令Shell脚本VIM指令 GCC命令 GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器 编译一个简单的.c程序: 四步分开写: gcc -E -o hello.i hello.c // 预处理 gcc -…

chatgpt赋能python:Python怎么绕过登录爬取数据

Python怎么绕过登录爬取数据 在进行网站爬取时,经常会发现需要登录才能访问所需要的数据,这给我们的爬虫程序带来了一定的难度。本文就介绍一些Python绕过登录的方法,让你获取到所需的数据。 1. Session维持登录状态 当我们登录一个网站时…

运维实践 | 运维打工人必备 CentOS-Linux/Stream-8 服务器系统基础安装与配置实践...

欢迎关注「全栈工程师修炼指南」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 专注 企业运维实践、网络安全、系统运维、应用开发、物联网实战、全栈文章 等知识分享 “ 花开堪折直须折&#xf…

【LeetCode】python 主要元素 摩根投票法

目录 题目: 题解: 1.纯暴力(字典) 2. 摩根投票法 题目: 数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空…

电脑中的个人私密视频该怎么加密?

因为电脑内存空间较大,所以很多人喜欢将拍摄的视频存放在电脑中,这其中就会有一些比较私密,不适合被其他人看到的视频。为了保护这些视频的安全,我们需要合适的方法对其进行加密保护。下面我们就一起来了解一下电脑中的个人私密视…

GAMES101笔记 Lecture 01

目录 Overview of Computer Graphics图形学的应用场景Video GamesMoviesAnimationsDesignVisualizationVirtual RealityDigital IllustrationSimulationGraphical User InterfacesTypography 为什么要学习计算机图形学?Fundamental Intellectual Challenges(图形学很…

Opencv-C++笔记 (5) : opencv-形态学

文章目录 1、形态学运算与结构2、腐蚀膨胀运算3、膨胀4、自定义结构元素5、开闭运算开运算闭运算 6、形态学梯度7、其他形态学-顶帽、黑帽、击中不击中8、核函数矩形核十字形核椭圆核 1、形态学运算与结构 形态学运算是针对二值图像依据数学形态学(Mathematical Morphology)的集…

Prefix-Tuning: Optimizing Continuous Prompts for Generation

《Prefix-Tuning: Optimizing Continuous Prompts for Generation》阅读笔记 论文题目:Prefix-Tuning: Optimizing Continuous Prompts for Generation论文链接:https://arxiv.org/pdf/2101.00190论文来源:Arxiv (2021&#xff0…

CentOS 7安装 Postgre

零、前置条件 系统CentOS 7,并已联网,已安装gcc或者g编译器,GNU make版本3.80或以上,系统有至少一个除root之外的普通用户user gcc安装-参考链接查看make命令的版本——make --version更新make版本-参考链接postgresql的使用一般…

【nginx】网页上传文件报错413 Request Entity Too Lange

前言 413 Request Entity Too Lange,由于您的请求实体太长,服务器无法处理。请尝试缩短请求体的内容或者采取其他方式进行操作。如果问题仍然存在,请检查您的请求是否符合服务器的限制和要求,并尝试联系服务器管理员寻求帮助 可以…

轻松掌握 Postman Newman API 测试技巧

目录 前言: Postman Newman 是什么? Postman Newman 的作用 如何使用 Postman Newman? 第一步:安装 Node.js 第二步:全局安装 Newman 第三步:导出集合或环境变量为 JSON 格式 第四步:使…

Python-Selenium-定位详解

目录 前言: 一、id定位 二、name定位 三、class_name定位 四、xpath定位 五、css_selector定位 六、tag_name定位 七、link_text 定位 八、Xpath&Css定位方法速查表 九、By定位 十、elements复数定位 十一、JS的定位 前言: Python是一种…

Jetpack Compose中的LaunchedEffect与rememberCoroutineScope

Jetpack Compose中的LaunchedEffect与rememberCoroutineScope 深入了解Compose副作用API LaunchedEffect和rememberCoroutineScope。 探索使用LaunchedEffect和rememberCoroutineScope的区别和使用场景。 什么是副作用? 副作用是指在可组合函数范围之外发生的任何…

2024考研408-计算机组成原理第三章-存储系统

文章目录 前言一、存储器概述1.1、层次结构1.2、存储器分类1.2.1、层次分类1.2.2、存储介质分类1.2.3、存取方式1.2.4、按照信息的可更改性(读写、只读区别) 1.3、存储器性能指标知识回顾 二、主存储器2.1、主存储器的基本组成(介绍DRAM&…

Axios和Spring MVC[前端和后端的请求和响应处理]

在前后端交互中,Axios和Spring MVC扮演着不同的角色,分别负责前端和后端的请求和响应处理。它们之间的作用如下: Axios(前端): 发送HTTP请求:前端使用Axios库发送HTTP请求到后端。可以使用Axi…

HarmonyOS 极客马拉松2023 正式启动,诚邀极客们用键盘码出无限可能!

原文:HarmonyOS 极客马拉松2023 正式启动,诚邀极客们用键盘码出无限可能!,点击链接查看原文进入报名通道。 2023年6月15日, HarmonyOS极客马拉松2023开赛!期待各位开发者极客朋友一起,探索移动应…