玩转 ESP32 + Arduino(二十九) TFT_eSPI库驱动ST7789之动画专题

2023-11-11 15:59

本文主要是介绍玩转 ESP32 + Arduino(二十九) TFT_eSPI库驱动ST7789之动画专题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于动画,我们有两种思路
1.通过反复绘制几何图形擦除几何图形的方法实现动画效果, 比如TFT_eSPI库示例中的TFT_Meters示例
2.通过快速显示图片来达到动画效果, 比如现在B站非常流行的badApple

一. 通过几何图形绘制动画效果

绘制几何图形再擦除的方式绘制动画是非常好的方式, 它的:
优点是: 1. 占用空间非常小 2. 动画清晰,充分利用每个像素点 3. 可以非常灵动. 4. 方便进行微调
缺点是: 1. 容易闪屏 2. 一般不会太复杂 3.需要大量的计算

1. 让一个正方形动起来

思路: 绘制一个正方形, 然后每30ms 就擦除一部分正方形顶部的线,

#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>TFT_eSPI tft = TFT_eSPI(); // Invoke custom libraryuint32_t updateTime = 0; // time for next updateint oldi = 0;
int i = 0;void setup(void)
{tft.init();tft.setRotation(0);tft.fillScreen(TFT_BLACK);updateTime = millis(); // Next update timetft.fillRect(0, 0, 50, 50, TFT_RED);
}void loop()
{if (updateTime <= millis()){updateTime = millis() + 30; //每30ms更新一次if (i < 350)i += 5;elseoldi=i=-50;while (i != oldi){tft.drawFastHLine(0, oldi, 50, TFT_BLACK);oldi++;tft.drawFastHLine(0, oldi + 50, 50, TFT_RED);}}
}

由于转GIF的原因, 看上去有些掉帧, 实际上看上去是没有掉帧的, 非常顺滑

2. 画一个带动画的扇形

TFT_eSPI是没有画扇形的函数的, 画扇形的思路是: 将扇形分解为1个个小三角形,每个三角形表示一弧度

#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>TFT_eSPI tft = TFT_eSPI(); // Invoke custom library#define DEG2RAD 0.0174532925 //当半径为1时, 1弧度对应长度, 我们可以理解为1个标准单位byte inc = 0;
unsigned int col = 0;void setup(void)
{Serial.begin(115200);tft.begin();tft.fillScreen(TFT_BLACK);
}void loop()
{fillSegment(65, 120, 0, 60, 50, TFT_RED);tft.fillScreen(TFT_BLACK);
}
void fillSegment(int x, int y, int start_angle, int sub_angle, int r, unsigned int colour)
{// 计算初始的x1, y1float sx = cos((start_angle - 90) * DEG2RAD);float sy = sin((start_angle - 90) * DEG2RAD);uint16_t x1 = sx * r + x;uint16_t y1 = sy * r + y;for (int i = start_angle; i < start_angle + sub_angle; i++){int x2 = cos((i + 1 - 90) * DEG2RAD) * r + x;int y2 = sin((i + 1 - 90) * DEG2RAD) * r + y;tft.fillTriangle(x1, y1, x2, y2, x, y, colour);x1 = x2;y1 = y2;//如果在这里加个delay会出现扇形动画delay(20);}
}

由于转GIF的原因, 看上去有些掉帧, 实际上看上去是没有掉帧的, 非常顺滑

68dfa64c91bfb3279aae18e9d55c93ce[00_00_00--00_00_02].gif

未完待续


http://www.taodudu.cc/news/show-8217869.html

相关文章:

  • Easyx-----c语言实现皮卡丘移动控制
  • GaN射频设备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  • 麦当劳在全球启动卡塔尔世界杯主题活动;爱彼迎中国推出全新旅行搜索方式 | 美通企业日报...
  • 2022年汽车碳化硅功率元件市场将超过10亿美元
  • 英飞凌8.5亿美元收购科锐Wolfspeed芯片业务
  • Wolfspeed 开设世界上最大的 200 毫米 SiC 晶圆厂
  • 项目成本管理、质量管理和人力资源管理
  • 在技​​术面试中如何防止哭泣
  • 【Java核心面试宝典】Day18、GET和POST请求都有哪些常见面试题?
  • 1月到8月,我都干了啥?
  • 考研路上,你觉得最难的事是什么呢?
  • 以梦想为源头,因学习而改变,经过程而成功
  • HTML5_自己写的第一个html5页面
  • [译文]性能测试对比——面向REST APIs的HTTP/1.1、HTTP/2、HTTP/2服务器推送
  • Mozilla技术布道者给Web开发人员推荐的Firefox插件列表
  • 34岁,转行软件测试工程师后月薪8K,我仍然坚持转行...
  • 推广Firefox,与文化同行
  • 【Selenium自动化测试】操作Cookie
  • 【ACM-W公益编程活动】用计算机代码做刺绣和小游戏
  • 基于ssm社区公益服务平台
  • 腾讯公益404接口
  • 悦苗园公益活动
  • java公益管理系统
  • 编程1小时公益活动
  • 合肥工业大学 公益活动报告
  • 计算机学院志愿公益活动,计算机学院公益系列活动第五期——公益,是一种生活方式...
  • 公益活动-感谢你们
  • Linux进程间的通信--消息队列
  • java企业考勤系统
  • 企业考勤app开发
  • 这篇关于玩转 ESP32 + Arduino(二十九) TFT_eSPI库驱动ST7789之动画专题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/391208

    相关文章

    Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

    《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

    使用WPF实现窗口抖动动画效果

    《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

    使用animation.css库快速实现CSS3旋转动画效果

    《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

    如何在Ubuntu上安装NVIDIA显卡驱动? Ubuntu安装英伟达显卡驱动教程

    《如何在Ubuntu上安装NVIDIA显卡驱动?Ubuntu安装英伟达显卡驱动教程》Windows系统不同,Linux系统通常不会自动安装专有显卡驱动,今天我们就来看看Ubuntu系统安装英伟达显卡... 对于使用NVIDIA显卡的Ubuntu用户来说,正确安装显卡驱动是获得最佳图形性能的关键。与Windo

    嵌入式Linux之使用设备树驱动GPIO的实现方式

    《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

    嵌入式Linux驱动中的异步通知机制详解

    《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

    usb接口驱动异常问题常用解决方案

    《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

    最好用的WPF加载动画功能

    《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要

    基于Python实现PDF动画翻页效果的阅读器

    《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

    Qt QWidget实现图片旋转动画

    《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript