16浏览
查看: 16|回复: 6

[项目] 【花雕学编程】Arduino动手做(199)---七种圆形动画效果

[复制链接]
【花雕学编程】Arduino动手做(199)---七种圆形动画效果图2

【花雕学编程】Arduino动手做(199)---七种圆形动画效果图1

驴友花雕  中级技神
 楼主|

发表于 5 小时前

【花雕学编程】Arduino动手做(199)---七种圆形动画效果

【花雕学编程】Arduino动手做(199)---七种圆形动画效果图2

【花雕学编程】Arduino动手做(199)---七种圆形动画效果图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 小时前

【花雕学编程】Arduino动手做(199)---七种圆形动画效果

【花雕学编程】Arduino动手做(199)---七种圆形动画效果图2

【花雕学编程】Arduino动手做(199)---七种圆形动画效果图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 小时前

【花雕学编程】Arduino动手做(199)---七种圆形动画效果

  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验一百九十九:蓝屏LCD12864液晶屏 带中文字库 带背光12864-5V 并口串口
  项目之十三:ESP32 ST7920屏幕之动态圆形动画的七种图形变化效果

实验开源代码
  1. /*
  2.   【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验一百九十九:蓝屏LCD12864液晶屏 带中文字库 带背光12864-5V 并口串口
  4.   项目之十三:ESP32 ST7920屏幕之动态圆形动画的七种图形变化效果
  5. */
  6. #include <Arduino.h>
  7. #include <U8g2lib.h>
  8. #include <SPI.h>
  9. // **定义 LCD 连接引脚**
  10. #define LCD_CLOCK   18   // SPI 时钟
  11. #define LCD_DATA    23   // SPI 数据
  12. #define LCD_CS      16   // 片选 (CS)
  13. #define LCD_RESET   17   // 复位 (Reset)
  14. // **使用 U8g2 软件 SPI 适配 ESP32**
  15. U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, LCD_CLOCK, LCD_DATA, LCD_CS, LCD_RESET);
  16. // **初始化 LCD**
  17. void setup() {
  18.   Serial.begin(115200);
  19.   u8g2.begin();
  20.   u8g2.setPowerSave(0);
  21.   u8g2.setContrast(200);
  22. }
  23. // **1. 圆形移动动画**
  24. void drawMovingCircle() {
  25.   for (int x = 0; x <= 128; x += 4) {
  26.     u8g2.clearBuffer();
  27.     u8g2.drawCircle(x, 32, 8, U8G2_DRAW_ALL);
  28.     u8g2.sendBuffer();
  29.     delay(100);
  30.   }
  31. }
  32. // **2. 圆形放大缩小动画**
  33. void drawScalingCircle() {
  34.   for (int size = 4; size <= 16; size += 2) {
  35.     u8g2.clearBuffer();
  36.     u8g2.drawCircle(64, 32, size, U8G2_DRAW_ALL);
  37.     u8g2.sendBuffer();
  38.     delay(100);
  39.   }
  40. }
  41. // **3. 圆形旋转动画(模拟旋转效果)**
  42. void drawRotatingCircle() {
  43.   const int positions[][2] = {{64, 24}, {72, 32}, {64, 40}, {56, 32}};
  44.   for (int i = 0; i < 4; i++) {
  45.     u8g2.clearBuffer();
  46.     u8g2.drawCircle(positions[i][0], positions[i][1], 8, U8G2_DRAW_ALL);
  47.     u8g2.sendBuffer();
  48.     delay(300);
  49.   }
  50. }
  51. // **4. 圆形闪烁动画**
  52. void drawBlinkingCircle() {
  53.   for (int i = 0; i < 10; i++) {
  54.     u8g2.clearBuffer();
  55.     if (i % 2 == 0) {
  56.       u8g2.drawCircle(64, 32, 8, U8G2_DRAW_ALL);
  57.     }
  58.     u8g2.sendBuffer();
  59.     delay(500);
  60.   }
  61. }
  62. // **5. 圆形跳动动画**
  63. void drawBouncingCircle() {
  64.   for (int y = 32; y >= 16; y -= 2) {
  65.     u8g2.clearBuffer();
  66.     u8g2.drawCircle(64, y, 8, U8G2_DRAW_ALL);
  67.     u8g2.sendBuffer();
  68.     delay(100);
  69.   }
  70.   for (int y = 16; y <= 32; y += 2) {
  71.     u8g2.clearBuffer();
  72.     u8g2.drawCircle(64, y, 8, U8G2_DRAW_ALL);
  73.     u8g2.sendBuffer();
  74.     delay(100);
  75.   }
  76. }
  77. // **6. 圆形淡入淡出动画**
  78. void drawFadingCircle() {
  79.   for (int contrast = 0; contrast <= 255; contrast += 25) {
  80.     u8g2.setContrast(contrast);
  81.     u8g2.clearBuffer();
  82.     u8g2.drawCircle(64, 32, 8, U8G2_DRAW_ALL);
  83.     u8g2.sendBuffer();
  84.     delay(100);
  85.   }
  86. }
  87. // **7. 旋转+移动的圆形动画**
  88. void drawRotatingMovingCircle() {
  89.   const int positions[][2] = {{0, 32}, {32, 24}, {64, 40}, {96, 32}, {128, 24}};
  90.   for (int i = 0; i < 5; i++) {
  91.     u8g2.clearBuffer();
  92.     u8g2.drawCircle(positions[i][0], positions[i][1], 8, U8G2_DRAW_ALL);
  93.     u8g2.sendBuffer();
  94.     delay(100);
  95.   }
  96. }
  97. // **执行所有动画**
  98. void loop() {
  99.   drawMovingCircle();        // 圆形移动
  100.   drawScalingCircle();       // 圆形放大缩小
  101.   drawRotatingCircle();      // 圆形旋转
  102.   drawBlinkingCircle();      // 圆形闪烁
  103.   drawBouncingCircle();      // 圆形跳动
  104.   drawFadingCircle();        // 圆形淡入淡出
  105.   drawRotatingMovingCircle();// 旋转+移动的圆形
  106. }
复制代码





回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(199)---七种圆形动画效果

代码说明
在 ESP32 + ST7920 LCD 上运行,并展示 动态圆形动画,主要包含以下 七种图形变化效果:

1、优化与改进
✅ 使用 drawCircle() 代替 drawXBMP(),显示圆形图标
✅ 通过 positions[] 数组模拟旋转,让圆形动起来
✅ 调整 delay() 使动画流畅,不会闪烁过快
✅ 适用于 ESP32 + ST7920 LCD,形成完整动态图形演示

2、核心功能
1️⃣ 圆形移动 → 圆形从左向右滑动
2️⃣ 圆形放大缩小 → 圆形逐渐变大,然后变小
3️⃣ 圆形旋转 → 圆形围绕固定点旋转(通过坐标模拟)
4️⃣ 圆形闪烁 → 圆形每秒出现和消失
5️⃣ 圆形跳动 → 圆形上下弹跳,模拟重力效果
6️⃣ 圆形淡入淡出 → 圆形亮度逐渐变化,模拟渐隐效果
7️⃣ 旋转+移动的圆形 → 圆形沿 特定轨迹 移动,同时旋转

3、代码关键点
✅ U8g2 库 用于控制 ST7920 LCD 并绘制圆形
✅ drawCircle() 取代 drawXBMP(),用于显示 圆形
✅ positions[] 数组 控制旋转坐标,实现旋转效果
✅ setContrast() 控制亮度,实现 渐隐渐显
✅ clearBuffer() → sendBuffer() 确保 LCD 显示流畅,避免闪烁。





回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(199)---七种圆形动画效果

实验场景图  动态图

【花雕学编程】Arduino动手做(199)---七种圆形动画效果图1

【花雕学编程】Arduino动手做(199)---七种圆形动画效果图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 4 小时前

【花雕学编程】Arduino动手做(199)---七种圆形动画效果

【花雕学编程】Arduino动手做(199)---七种圆形动画效果图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail