【花雕学编程】Arduino动手做(199)---ESP32 ST7920 屏幕之随机绘制 10 个不同形状(圆形、三角形和矩形)

在这里插入图片描述

《Arduino 手册(思路与案例)》栏目介绍:
在电子制作与智能控制的应用领域:广泛涉及了Arduino BLDC、Arduino CNC、Arduino ESP32 SPP、Arduino FreeRTOS、Arduino FOC、Arduino GRBL、Arduino HTTP、Arduino HUB75、Arduino IoT Cloud、Arduino JSON、Arduino LCD、Arduino OLED、Arduino LVGL、Arduino PID 及 Arduino TFT 等方面的相关拓展思路和众多参考案例。本专栏目前博客近2300篇。
https://blog.csdn.net/weixin_41659040/category_12422453.html

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百九十九:蓝屏LCD12864液晶屏 带中文字库 带背光12864-5V 并口串口

在这里插入图片描述
在这里插入图片描述

显示器 12864 蓝底白字 - 3.3V
这是一个带 LED 背光的带框型 LCD 图形 128x64。ST7920 控制器型 LCD,具有简单的命令界面。该显示器利用非官方的 12864 Arduino 库和 ST7920 芯片,使其成为几乎所有 Arduino 板项目的绝佳选择。LCD 在蓝色 LED 背光背景上提供白色文本,其引脚支持并行和串行接口。它在 3.3V 下工作,并集成了对比度调整软件控制。

在这里插入图片描述

实验模块接线示意图

在这里插入图片描述

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百九十九:蓝屏LCD12864液晶屏 带中文字库 带背光12864-5V 并口串口
项目之十一:ESP32 ST7920屏幕之随机绘制10个不同形状(圆形、三角形和矩形)

实验开源代码

#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>

// 使用软件 SPI 适配 ESP32
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* Clock=*/ 18, /* Data=*/ 23, /* CS=*/ 16, /* Reset=*/ 17);

int size = 128;   // **初始矩形大小**
int minSize = 10; // **最小矩形大小**
int step = 2;     // **缩小步长**
bool shrinking = true; // **控制递减或递增**

void setup() {
    Serial.begin(115200);
    u8g2.begin();
    u8g2.setPowerSave(0);  // **关闭省电模式**
    u8g2.setContrast(200); // **提高对比度**
    u8g2.setDisplayRotation(U8G2_R2);  // **旋转 180 度**
}

void loop() {
    u8g2.firstPage();
    do {
        int x = (128 - size) / 2 + 1;  // **确保矩形不贴屏幕边缘**
        int y = (64 - size) / 2 + 1;
        u8g2.drawFrame(x, y, size - 2, size - 2);  // **绘制空心矩形**
    } while (u8g2.nextPage());

    // **调整矩形尺寸**
    if (shrinking) {
        size -= step;  // **递减**
        if (size <= minSize) {
            shrinking = false; // **切换为递增**
        }
    } else {
        size += step;  // **递增**
        if (size >= 128) { // **最大值 128,确保完整循环**
            shrinking = true; // **切换为递减**
        }
    }

    delay(50);  // **控制变化速度**
}

简单解读
这段代码在 ST7920 LCD 屏幕 上实现了 随机绘制 10 个图形(圆形、三角形和矩形),核心逻辑如下:

  1. 初始化
    ✅ u8g2.begin(); → 启动 ST7920 屏幕
    ✅ u8g2.setPowerSave(0); → 确保屏幕不会休眠
    ✅ u8g2.setContrast(200); → 提高对比度,让图形清晰可见
    ✅ u8g2.setDisplayRotation(U8G2_R2); → 让屏幕旋转 180 度

  2. 随机生成图形
    ✅ random(0, 3) → 随机选择形状(圆形、矩形或三角形)
    ✅ random(0, 128) → 随机 X 坐标,确保图形分布均匀
    ✅ random(0, 64) → 随机 Y 坐标,确保图形不会超出屏幕
    ✅ random(10, 30) → 随机大小

  3. 绘制不同图形
    ✅ drawCircle(x, y, size); → 绘制圆形
    ✅ drawFrame(x, y, size, size); → 绘制空心矩形
    ✅ drawTriangle(x, y, x+size, y+size, x-size, y+size); → 绘制三角形

  4. 画面刷新
    ✅ delay(1000); → 每秒重新生成 10 个新图形
    ✅ firstPage(); do { … } while (nextPage()); → 确保显示流畅,无闪烁

这个代码让 ST7920 屏幕不断随机显示 10 个图形,每秒刷新一次。

实验场景图 动态图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

制作一个基于arduino 12864液晶模块的图形化显示GPS导航系统,作品效果成本可能无法TB上的导航产品媲美,但是动手过程会带给你乐趣知识。 需要了解的背景知识: arduino 相关基础; 能使用12864 液晶模块; 能够用arduino 通过串口通信获取GPS模块定位信息; 能够用arduino 操作SD卡模块; 需要的主要硬件: arduino UNO 1片; 12864 液晶模块 1片; GPS模块1片; SD卡模块及SD卡 1套; 原理介绍: 将地图数据依据瓦片算法存储在SD卡中,通过串口获取GPS定位信息并从中解析出经纬度坐标,依据经纬度坐标读取相应地图数据显示在12864液晶模块上,同时显示定位坐标点。 1. 地图存储算法——瓦片系统(Maps Tile System) 本制作采用的地图数据地图存储算法来源于微软的bing maps并做了相应修改,具体可参考: Bing Maps Tile System[1*] Virtual Earth Tile Image URI 参数解析 Goolge and Microsoft Map Url Parameters 在瓦片系统中地图采用金字塔式的分层存储结构,不同层具有不同级别的地图分辨率(地图精细程度),每一层地图被分割成等像素大小(256X256)的瓦片,算法要解决的问题就是给定经纬度坐标缩放级别(层索引)得到具体相应的瓦片编号。 在连接[1*]的最后有算法实现的代码可共参考。 2. 针对12864液晶模块的设计 12864液晶模块是128像素宽64像素高的单色液晶显示模块,本制作为了适应模块显示做出了两个设计。 1). 将256X256像素的瓦片裁切成128X64像素大小的8份 子瓦片,如下图所示: 每层每个瓦片均做相应处理。 2). 通过阈值方法将8位png索引图像(bing maps 的道路数据)转换成二进制地图数据文件,为了能够显示原图中的文字信息,采用多阈值提取求或方法提取原地图中背景、地物标注文字数据,由于标注文字背景之间的扰动,提取效果有待改进。 显示效果: 生成地图程序(需要连接互联网): 通过设置地图范围经纬度信息获取要使用定位的区域,可通过google earth 等能显示经纬度的软件或网页获取经纬度的最大最小值(上大下小,右大左小), 缩放级别建议设置范围1~15,较大地图范围较高缩放级别会增加地图下载、显示加载的时间。 arduino 代码说明: 1. 在“LCD12864RSPI” 文件中加入画点函数,减少重绘区域; 2. 使用占用内存小、具有只读能力的SD模块库“petit_fatfs”; 3. 分配1K内存用于地图数据缓存,由于SD卡库只支持8.3文件名,地图数据文件名采用十六进制不定长压缩编码方式命名。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值