TFT 绘图:实时历史图表
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
概览
您有没有想过在 TFT LCD 上专业地绘制数据?但是有一个问题,因为涉及到所有的计算,所以创建图表特别困难。
该项目旨在减轻您肩上的所有压力,并允许您创建自己的个性化历史图表,在几秒钟内绘制出您想要的任何内容。您所要做的就是编辑 5 个变量。
视频
图片
功能
这个项目旨在让每个人都可以轻松有趣地绘制图形,所有的硬计算都已完成,用户所要做的就是编辑 2 个变量,并为他们的图形选择颜色。以下是一些显示图表多样性的示例。
图> 图> 图> 图>图形将实时绘制温度,每隔 6 秒,该值将以一个点显示,该点将通过一条线与其他点连接。从代码开始经过的秒数将显示在 x 轴上,y 轴上的值范围。
该项目的工作原理很简单,Arduino Mega 读取 DHT 11 传感器的值并将温度存储到一个变量中,然后在自定义图表上绘制该值。这是说明功能概述的图表。
这是显示项目代码概述的图像。
读取温度
将从传感器读取温度
过程数据
将处理传感器读数并将其映射到图表。
图形数据
将在图表上显示映射的值。
为了能够继续这个项目,你所需要知道的就是对 TFT LCD 上的东西如何定位有一个广泛的了解,这将在下面解释。
我将整个 LCD 称为画布,这是绘制所有内容的地方,所有 TFT LCD 库的工作方式都非常相似,因此此代码中的功能也应与其他库一起使用。下面是在 TFT LCD 上绘制四边形(矩形)的草图。
在这个草图中,绘制了一个矩形,每个点都有标签,用于绘制矩形的代码行是这样的,
tft.fillRect(originX, originY, sizeX, sizeY, Colour);
originX
在上图中用“z”表示,这是从屏幕右侧到形状的距离。
originY
在草图上用“x”表示,这是屏幕顶部到形状的距离。
sizeX
是形状在 x 轴上的大小,这是形状的长度。
sizeY
是形状在 y 轴上的大小,这是形状的高度。
好处
用户 运营 这个 项目 将 好处 在:
- 在 TFT LCD 上绘制传感器数据
- 在几秒钟内完成
建设项目
步骤 1: 必填 设备
该项目使用 DHT 11 温度和湿度传感器来接收温度数据,但可以使用任何传感器,更改传感器将在下面进一步解释。
- 1、Arduino Mega
- 1、Elegoo 2.8' TFT LCD
- 1、DHT 11 传感器
- 1、面包板
- 跳线
步骤 2: 连接 电路
这是该项目的原理图,只需将 DHT 11 传感器连接到 Arduino Mega 即可。
第 3 步:确认代码
代码有3个主要部分:
- 设置图表
- 读取温度
- 绘制图形
这些部分解释如下。
- 设置图表
// 绘制标题 tft.setCursor(10, 10); // 设置光标 tft.setTextColor(BLUE); // 设置文本颜色 tft.setTextSize(4); // 设置文本的大小 tft.println(graphName); // 绘制轮廓 tft.drawLine(originX, originY, (originX + sizeX), originY, graphColor); tft.drawLine(originX, originY, originX, (originY - sizeY), graphColor); // 绘制标签 for(int i =0; i
这部分代码将绘制图形的轮廓,绘制 x 和 y 轴线,还会绘制标记并用值标记 y 轴。
- 阅读 温度
chk =DHT.read11(22); temp =(DHT.温度);
这段简短的代码将从 DHT 11 传感器读取温度,然后将其存储在一个变量中。
- 画画 图表
if(blockPos <8) { // 打印时间 tft.setCursor((mark[valuePos] - 5), (originY + 16)); tft.setTextColor(graphColor, WHITE); tft.setTextSize(1); tft.println(timeBlock[valuePos]); // 映射值 locationBlock[valuePos] =map(temp, 0, graphRange, originY, (originY - sizeY)); // 绘制点 tft.fillRect((mark[valuePos] - 1), (locationBlock[valuePos] - 1), markSize, markSize, pointColor); // 尝试连接到前一个点 if(valuePos !=0) { tft.drawLine(mark[valuePos], locationBlock[valuePos], mark[(valuePos - 1)], locationBlock[(valuePos - 1)], lineColor); } blockPos++; } else { // 清除图形的画布 tft.fillRect((originX + 2), (originY - sizeY), sizeX, sizeY, WHITE); // 映射值 - 当前点 locationBlock[valuePos] =map(temp, 0, graphRange, originY, (originY - sizeY)); // 绘制点 - 当前点 tft.fillRect((mark[7]), (locationBlock[valuePos] - 1), markSize, markSize, pointColor); // 绘制所有点 for(int i =0; i <8; i++) { tft.fillRect((mark[(blockPos - (i + 1))] - 1), (locationBlock[(valuePos - i)] - 1)、markSize、markSize、pointColor); } // 绘制所有线条 for(int i =0; i <7; i++) { tft.drawLine(mark[blockPos - (i + 1)], locationBlock[valuePos - i], mark[blockPos - (i + 2)], locationBlock[valuePos - (i + 1)], lineColor); } // 更改时间标签 for(int i =0; i <=8; i++) { tft.setCursor((mark[(blockPos - i)] - 5), (originY + 16)); tft.setTextColor(graphColor, WHITE); tft.setTextSize(1); tft.println(timeBlock[valuePos - i]); } } valuePos++;
这段很长的代码将在它们的值处绘制图形的点,然后通过线将它们连接起来,代码检查图形的画布是否已填满,如果已填满,它将开始弹出图形的第一个值并将其他的向上移动以允许插入新值的空间,如果仍有剩余空间,设备将继续每隔一段时间添加值。
个性化图表
这个图形的有趣之处在于它是 100% 可编辑的,因此用户可以编辑图形的大小、位置和颜色,由于其灵活性,用户还可以在图形上显示任何数据。都是你应该关心的变量。
bool proDebug =0; uint16_t 图形颜色 =蓝色; uint16_t 点颜色 =黑色; uint16_t lineColor =绿色; String graphName ="时间图"; int graphRange =50; int markSize =3;
proDebug
是项目内置的调试实用程序,默认设置为0,设置为1/true时,会将当前温度打印到串口监视器,这是一个调试实用程序,注意如果启用,串口监视器是需要打开才能运行代码。
graphColor
设置图形的颜色,x 和 y 线及其标签设置为此颜色。
pointColour
表示图上显示值的点的颜色。
lineColour
将连接图形上的点的线的颜色设置为选定的颜色。
graphRange
是图表的主干,请注意正确设置非常重要,它代表可以绘制的最大值,我使用的是温度传感器,我不希望该值超过 50ºC,所以我设置了value 为 50,如果要绘制原始模拟输入的图形,可以将 graphRange 设置为 1024,即模拟引脚可以显示的最大值。
markSize
表示图上标记传感器值的点的大小,该值表示正方形的长度。
就是这样,您只需要担心,其余的变量将由 Arduino 自动计算出来。
变化 价值
绘制房间温度的图表很好,但如果您能在图表上显示任何传感器数据就更好了,您只需编辑几行代码,就可以绘制从土壤湿度到光照的任何数据强度。这是这样做的指南。
图> 图> 图> 图> 图>去 进一步
您可以进一步试验该项目,尝试编辑 originX、originY、sizeX 和 sizeY 常量,使您的图形在屏幕上具有不同的大小和位置。主草图附有一个头文件,其中包含一些颜色的颜色代码,请尝试更改图表和条形的颜色。就是这样,您的个性化图表已准备就绪。
图书馆
- Elegoo 库 - 版权所有 (c) 2012 Adafruit Industries 根据 BSD 许可。
- DHT - 作者 Rob Tillaart 该库属于公共领域
背景
我最近发布了一个在条形图上绘制 1、2、3 或 4 个值的项目。我决定发布另一个用于绘图的模板。没有条形图的模板不会到处都有可能会混淆的线条,所以我决定再次进行数学计算并发布一个简单的项目,让每个人都可以在历史图表上实时绘制他们的数据。> 图>
代码
TFTHistoryGraph
整个代码示意图
原理图_g5pey3GWqv.fzz制造工艺