嗨,各位小伙伴!今天,我們將帶你探索如何在ESP32開(kāi)發(fā)板上制作炫酷的特效,別擔(dān)心,不需要編程基礎(chǔ)。我們將一步步學(xué)習(xí)如何使用TFT屏幕以及ESPI庫(kù)。跟著我,輕松入門,一起來(lái)搞點(diǎn)有趣的事情吧!
小貼士:伊娃老師的線上工作坊開(kāi)課啦,要報(bào)名的快點(diǎn)看文章最后面!等你報(bào)名喲!
完整代碼
#include TFT_eSPI tft; //創(chuàng)建對(duì)象 uint16_t evacolor = tft.color565(0, 0, 0); //rgb/*int dropY = 0; //文字的Yint dropX = random(0, tft.width()); //文字的X ,random(最小值,最大值),從最小值跟最大值取一個(gè)隨機(jī)數(shù)char randomC = char(random(32, 126)); //隨機(jī)打印ASCII 32-126可顯示的字符內(nèi)容int dropSpeed = random(1, 5); //隨機(jī)速度1-5*/ const int maxDrops = 300; // 最大雨滴數(shù)量int dropX[maxDrops]; // 雨滴的X坐標(biāo)int dropY[maxDrops]; // 雨滴的Y坐標(biāo)char randomC[maxDrops]; // 雨滴顯示的字符int dropSpeed[maxDrops]; // 雨滴的下落速度 void setup() { //開(kāi)機(jī)執(zhí)行一次的代碼,一般會(huì)放初始化的設(shè)定值 // put your setup code here, to run once: tft.init(); //初始化屏幕 tft.setRotation(0); //屏幕旋轉(zhuǎn)方向 tft.fillScreen(evacolor); //屏幕底色 tft.setTextSize(1); //文本大小 tft.setTextColor(TFT_DARKGREEN); //文字深綠色 // tft.setCursor(10,10);//設(shè)置打印文字位置 // tft.println("TEST EVA");//打印文字 randomSeed(analogRead(0)); // 使用模擬引腳0的值作為隨機(jī)種子 for (int i = 0; i < maxDrops; i++) { //如果你將 for 循環(huán)放在 setup() 函數(shù)之外,即全局作用域中,會(huì)導(dǎo)致編譯錯(cuò)誤。 dropX[i] = random(0, tft.width()); dropY[i] = -random(0, tft.height()); randomC[i] = char(random(32, 126)); dropSpeed[i] = random(1, 5); }} //顯示文字、文字掉落、隨機(jī)循環(huán)掉落、隨機(jī)文字、隨機(jī)速度//多個(gè)文字,同樣功能 void loop() { //執(zhí)行完setup之后,循環(huán)執(zhí)行l(wèi)oop中的指令 // put your main code here, to run repeatedly: tft.fillScreen(evacolor); /* tft.setCursor(dropX, dropY); //設(shè)定從坐標(biāo)x:10開(kāi)始,坐標(biāo)y:dropY打印 tft.println(randomC); //打印randomC dropY = dropY + dropSpeed; //dropY增加dropSpeed if (dropY > tft.height()) { //判斷Y的位置,如果到底就回到頂點(diǎn),實(shí)現(xiàn)循環(huán)掉落 dropY = 0; dropX = random(0, tft.width()); randomC = char(random(32, 126)); }*/ for (int i = 0; i < maxDrops; i++) { tft.setCursor(dropX[i], dropY[i]); //設(shè)定從坐標(biāo)x:10開(kāi)始,坐標(biāo)y:dropY打印 tft.println(randomC[i]); //打印randomC dropY[i] = dropY[i] + dropSpeed[i]; //dropY增加dropSpeed if (dropY[i] > tft.height()) { //判斷Y的位置,如果到底就回到頂點(diǎn),實(shí)現(xiàn)循環(huán)掉落 dropY[i] = -random(0, tft.height()); dropX[i] = random(0, tft.width()); randomC[i] = char(random(32, 126)); } } delay(100); //延遲100毫秒,0.1秒} 作者:伊娃老師來(lái)了 https://www.bilibili.com/read/cv24030296/?spm_id_from=333.999.0.0 出處:bilibili
步驟 1: 創(chuàng)建新的Arduino項(xiàng)目 首先,打開(kāi)Arduino IDE,點(diǎn)擊"項(xiàng)目",然后選擇"導(dǎo)入庫(kù)"。在搜索框中輸入"TFT ESPI",選擇并導(dǎo)入這個(gè)庫(kù)。沒(méi)接觸過(guò)庫(kù)?別擔(dān)心,之前的教程有介紹。
步驟 2: 引入TFT庫(kù)
在你的代碼中加入以下一行:
#include
步驟 3: 屏幕控制
TFT庫(kù)提供了一堆有用的函數(shù),比如:
TFT.init() - 初始化屏幕
TFT.setRotation(0) - 設(shè)置屏幕旋轉(zhuǎn)
TFT.fillScreen(TFT_BLACK) - 設(shè)置背景顏色為黑色
TFT.setTextSize(2) - 設(shè)置文本大小
TFT.setTextColor(TFT_GREEN) - 設(shè)置文本顏色
想要更多顏色?不妨查查TFT庫(kù)文檔或Arduino庫(kù)中的TFT ESPI。它預(yù)定義了一些常用顏色,用名字直接引用。不過(guò),要是記不住這些名字,也可以自己創(chuàng)建顏色變量,用TFT.color565(r, g, b)方式調(diào)用。
步驟 4: 數(shù)學(xué)與邏輯
做任何項(xiàng)目,都要先把核心功能搞定,然后再慢慢添加特效,避免出現(xiàn)問(wèn)題。本次特效,核心是文本顯示,然后讓文本垂直下落,再加入隨機(jī)性。最后,加點(diǎn)速度隨機(jī)化。
步驟 5: 文本下落
顯示文本其實(shí)是把文本從屏幕頂部向底部逐漸打印。每次打印前,先清空屏幕,這樣文本下落時(shí)不會(huì)留下痕跡。
用TFT.fillScreen(TFT_BLACK)把屏幕弄成黑色,然后用循環(huán)不停更新文本的Y坐標(biāo)。當(dāng)Y坐標(biāo)超出屏幕底部,重新設(shè)置到頂部,實(shí)現(xiàn)循環(huán)效果。
步驟 6: 隨機(jī)下落
搞點(diǎn)創(chuàng)意,讓文本從隨機(jī)位置開(kāi)始下落。使用random()函數(shù)生成隨機(jī)的X坐標(biāo)。不要忘了用randomSeed(analogRead(0))設(shè)置隨機(jī)數(shù)生成器的種子,確保每次運(yùn)行都有不同的隨機(jī)性。
步驟 7: 組合多個(gè)效果
為了更多特效,不用復(fù)制黏貼相同的代碼,用數(shù)組列表管理它們。通過(guò)循環(huán),為每個(gè)特效定義不同的參數(shù),一次性更新它們。需要多個(gè)特效?只需擴(kuò)展數(shù)組的長(zhǎng)度,再多次粘貼代碼。
下一期教程中,我們將深入研究更多編程概念和技巧,希望你會(huì)繼續(xù)學(xué)習(xí)。喜歡這篇文章嗎?記得點(diǎn)贊,分享給其他小伙伴。
如果你想跟著伊娃老師一起玩ESP32,千萬(wàn)不要錯(cuò)過(guò)伊娃老師的線上工作坊哦!微信掃碼報(bào)名!
審核編輯 黃宇
-
TFT
+關(guān)注
關(guān)注
10文章
399瀏覽量
112590 -
ESP32
+關(guān)注
關(guān)注
21文章
1017瀏覽量
19276
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論