玩转 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

    相关文章

    【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

    【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

    【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

    原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

    Linux_kernel驱动开发11

    一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

    Flutter 进阶:绘制加载动画

    绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

    arduino ide安装详细步骤

    ​ 大家好,我是程序员小羊! 前言: Arduino IDE 是一个专为编程 Arduino 微控制器设计的集成开发环境,使用起来非常方便。下面将介绍如何在不同平台上安装 Arduino IDE 的详细步骤,包括 Windows、Mac 和 Linux 系统。 一、在 Windows 上安装 Arduino IDE 1. 下载 Arduino IDE 打开 Arduino 官网

    音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

    一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

    用Unity2D制作一个人物,实现移动、跳起、人物静止和动起来时的动画:中(人物移动、跳起、静止动作)

    上回我们学到创建一个地形和一个人物,今天我们实现一下人物实现移动和跳起,依次点击,我们准备创建一个C#文件 创建好我们点击进去,就会跳转到我们的Vision Studio,然后输入这些代码 using UnityEngine;public class Move : MonoBehaviour // 定义一个名为Move的类,继承自MonoBehaviour{private Rigidbo

    秒变高手:玩转CentOS 7软件更换的方法大全

    在 CentOS 7 中更换软件源可以通过以下步骤完成。更换源可以加快软件包的下载速度,特别是当默认源速度较慢时。以下是详细步骤: 前言 为了帮助您解决在使用CentOS 7安装不了软件速度慢的问题,我们推出了这份由浪浪云赞助的教程——“CentOS7如何更换软件源加快下载速度”。 浪浪云,以他们卓越的弹性计算、云存储和网络服务受到广泛好评,他们的支持和帮助使得我们可以将最前沿的技术知识分

    专题二_滑动窗口_算法专题详细总结

    目录 滑动窗口,引入: 滑动窗口,本质:就是同向双指针; 1.⻓度最⼩的⼦数组(medium) 1.解析:给我们一个数组nums,要我们找出最小子数组的和==target,首先想到的就是暴力解法 1)暴力: 2)优化,滑动窗口: 1.进窗口 2.出窗口 3.更新值 2.⽆重复字符的最⻓⼦串(medium) 1)仍然是暴力解法: 2)优化: 进窗口:hash[s[rig

    动画AnimationDrawable、转动

    现实开发中:很多地方都用到 点击动画的特效; 本案例本人做了三个关于“动” 画 的效果; 先上图: 总体图: A: B: 1:点击图片按钮,效果是:图片闪动; 通过在xml中定义:标签:animation-list来实现点击动画的效果;  是否循环标签:oneshot ;   时间间隔标签:duration ; 要显示的图片标签:drawable ;