糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 用ESP学习单片机之Arduino_Esp-32s获取2.8‘‘TFT LCD屏幕的触摸数据_ILI9341_SPI_XPT2046

用ESP学习单片机之Arduino_Esp-32s获取2.8‘‘TFT LCD屏幕的触摸数据_ILI9341_SPI_XPT2046

时间:2018-09-18 07:33:04

相关推荐

用ESP学习单片机之Arduino_Esp-32s获取2.8‘‘TFT LCD屏幕的触摸数据_ILI9341_SPI_XPT2046

简介

点亮该屏幕的笔记,既然都能显示了,肯定要获取触摸位置啊,从实物图中可知该屏幕的触摸IC为XPT2046

Arduino IDE需配置esp32开发环境

开发板:ESP 32

触摸过程

这里实现的是触摸屏幕获取坐标

IO映射

这里可以看到复用部分接口,灵感来自于太极创客的一个视频(参考3)

代码

需要从库管理器下载的库:XPT2046_Touchscreen

工具-开发板- ESP32 Arduino - NodeMCU-32s

#include <XPT2046_Touchscreen.h>#include <SPI.h>#define CS_PIN 8// MOSI=11, MISO=12, SCK=13#define TIRQ_PIN 2XPT2046_Touchscreen ts(5, 21); void setup() {Serial.begin(9600);ts.begin();ts.setRotation(1);while (!Serial && (millis() <= 1000));}int x = 0;int y = 0;void loop() {if (ts.touched()) {TS_Point p = ts.getPoint();if(x != p.x || y != p.y) //过滤重复的点位{Serial.print("Pressure = "); //按压的力度大小Serial.print(p.z);Serial.print(", x = ");//坐标的x值Serial.print(p.x);Serial.print(", y = ");//坐标的y值Serial.print(p.y);Serial.println();} x=p.x;y=p.y;delay(30);}}

效果

指尖触摸屏幕,可以在串口监视器中看到一下内容

总结

或是是因为XPT2046过于廉价,获取到的触摸数据emmm,不堪入目,也可能是我没有校准???如何校准哦。。人傻了

花式点亮屏幕

这里不涉及触摸,但点亮的方式挺炫酷的

IO映射

代码

需要下载库:Adafruit_ILI9341

#include "SPI.h"#include "Adafruit_GFX.h"#include "Adafruit_ILI9341.h"//Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);Adafruit_ILI9341 tft = Adafruit_ILI9341(5, 17, 23, 18, 4, 19); //esp32-nodemcu32svoid setup() {Serial.begin(9600);Serial.println("ILI9341 Test!"); tft.begin();// read diagnostics (optional but can help debug problems)uint8_t x = tft.readcommand8(ILI9341_RDMODE);Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);x = tft.readcommand8(ILI9341_RDMADCTL);Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);x = tft.readcommand8(ILI9341_RDPIXFMT);Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);x = tft.readcommand8(ILI9341_RDIMGFMT);Serial.print("Image Format: 0x"); Serial.println(x, HEX);x = tft.readcommand8(ILI9341_RDSELFDIAG);Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); Serial.println(F("BenchmarkTime (microseconds)"));delay(10);Serial.print(F("Screen fill "));Serial.println(testFillScreen());delay(500);Serial.print(F("Text "));Serial.println(testText());delay(3000);Serial.print(F("Lines"));Serial.println(testLines(ILI9341_CYAN));delay(500);Serial.print(F("Horiz/Vert Lines "));Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE));delay(500);Serial.print(F("Rectangles (outline)"));Serial.println(testRects(ILI9341_GREEN));delay(500);Serial.print(F("Rectangles (filled)"));Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));delay(500);Serial.print(F("Circles (filled) "));Serial.println(testFilledCircles(10, ILI9341_MAGENTA));Serial.print(F("Circles (outline) "));Serial.println(testCircles(10, ILI9341_WHITE));delay(500);Serial.print(F("Triangles (outline)"));Serial.println(testTriangles());delay(500);Serial.print(F("Triangles (filled) "));Serial.println(testFilledTriangles());delay(500);Serial.print(F("Rounded rects (outline) "));Serial.println(testRoundRects());delay(500);Serial.print(F("Rounded rects (filled) "));Serial.println(testFilledRoundRects());delay(500);Serial.println(F("Done!"));}void loop(void) {for(uint8_t rotation=0; rotation<4; rotation++) {tft.setRotation(rotation);testText();delay(1000);}}unsigned long testFillScreen() {unsigned long start = micros();tft.fillScreen(ILI9341_BLACK);yield();tft.fillScreen(ILI9341_RED);yield();tft.fillScreen(ILI9341_GREEN);yield();tft.fillScreen(ILI9341_BLUE);yield();tft.fillScreen(ILI9341_BLACK);yield();return micros() - start;}unsigned long testText() {tft.fillScreen(ILI9341_BLACK);unsigned long start = micros();tft.setCursor(0, 0);tft.setTextColor(ILI9341_WHITE); tft.setTextSize(1);tft.println("Hello World!");tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);tft.println(1234.56);tft.setTextColor(ILI9341_RED); tft.setTextSize(3);tft.println(0xDEADBEEF, HEX);tft.println();tft.setTextColor(ILI9341_GREEN);tft.setTextSize(5);tft.println("Groop");tft.setTextSize(2);tft.println("I implore thee,");tft.setTextSize(1);tft.println("my foonting turlingdromes.");tft.println("And hooptiously drangle me");tft.println("with crinkly bindlewurdles,");tft.println("Or I will rend thee");tft.println("in the gobberwarts");tft.println("with my blurglecruncheon,");tft.println("see if I don't!");return micros() - start;}unsigned long testLines(uint16_t color) {unsigned long start, t;int x1, y1, x2, y2,w = tft.width(),h = tft.height();tft.fillScreen(ILI9341_BLACK);yield();x1 = y1 = 0;y2 = h - 1;start = micros();for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);x2 = w - 1;for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);t= micros() - start; // fillScreen doesn't count against timingyield();tft.fillScreen(ILI9341_BLACK);yield();x1 = w - 1;y1 = 0;y2 = h - 1;start = micros();for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);x2 = 0;for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);t += micros() - start;yield();tft.fillScreen(ILI9341_BLACK);yield();x1 = 0;y1 = h - 1;y2 = 0;start = micros();for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);x2 = w - 1;for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);t += micros() - start;yield();tft.fillScreen(ILI9341_BLACK);yield();x1 = w - 1;y1 = h - 1;y2 = 0;start = micros();for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);x2 = 0;for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);yield();return micros() - start;}unsigned long testFastLines(uint16_t color1, uint16_t color2) {unsigned long start;int x, y, w = tft.width(), h = tft.height();tft.fillScreen(ILI9341_BLACK);start = micros();for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1);for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2);return micros() - start;}unsigned long testRects(uint16_t color) {unsigned long start;int n, i, i2,cx = tft.width() / 2,cy = tft.height() / 2;tft.fillScreen(ILI9341_BLACK);n= min(tft.width(), tft.height());start = micros();for(i=2; i<n; i+=6) {i2 = i / 2;tft.drawRect(cx-i2, cy-i2, i, i, color);}return micros() - start;}unsigned long testFilledRects(uint16_t color1, uint16_t color2) {unsigned long start, t = 0;int n, i, i2,cx = tft.width() / 2 - 1,cy = tft.height() / 2 - 1;tft.fillScreen(ILI9341_BLACK);n = min(tft.width(), tft.height());for(i=n; i>0; i-=6) {i2 = i / 2;start = micros();tft.fillRect(cx-i2, cy-i2, i, i, color1);t += micros() - start;tft.drawRect(cx-i2, cy-i2, i, i, color2);yield();}return t;}unsigned long testFilledCircles(uint8_t radius, uint16_t color) {unsigned long start;int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;tft.fillScreen(ILI9341_BLACK);start = micros();for(x=radius; x<w; x+=r2) {for(y=radius; y<h; y+=r2) {tft.fillCircle(x, y, radius, color);}}return micros() - start;}unsigned long testCircles(uint8_t radius, uint16_t color) {unsigned long start;int x, y, r2 = radius * 2,w = tft.width() + radius,h = tft.height() + radius;start = micros();for(x=0; x<w; x+=r2) {for(y=0; y<h; y+=r2) {tft.drawCircle(x, y, radius, color);}}return micros() - start;}unsigned long testTriangles() {unsigned long start;int n, i, cx = tft.width() / 2 - 1,cy = tft.height() / 2 - 1;tft.fillScreen(ILI9341_BLACK);n= min(cx, cy);start = micros();for(i=0; i<n; i+=5) {tft.drawTriangle(cx , cy - i, // peakcx - i, cy + i, // bottom leftcx + i, cy + i, // bottom righttft.color565(i, i, i));}return micros() - start;}unsigned long testFilledTriangles() {unsigned long start, t = 0;int i, cx = tft.width() / 2 - 1,cy = tft.height() / 2 - 1;tft.fillScreen(ILI9341_BLACK);start = micros();for(i=min(cx,cy); i>10; i-=5) {start = micros();tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,tft.color565(0, i*10, i*10));t += micros() - start;tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,tft.color565(i*10, i*10, 0));yield();}return t;}unsigned long testRoundRects() {unsigned long start;int w, i, i2,cx = tft.width() / 2 - 1,cy = tft.height() / 2 - 1;tft.fillScreen(ILI9341_BLACK);w= min(tft.width(), tft.height());start = micros();for(i=0; i<w; i+=6) {i2 = i / 2;tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0));}return micros() - start;}unsigned long testFilledRoundRects() {unsigned long start;int i, i2,cx = tft.width() / 2 - 1,cy = tft.height() / 2 - 1;tft.fillScreen(ILI9341_BLACK);start = micros();for(i=min(tft.width(), tft.height()); i>20; i-=6) {i2 = i / 2;tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0));yield();}return micros() - start;}

效果

参考

点亮TFT LCD屏幕_ILI9341_SPI_240x320 /weixin_43031092/article/details/108007481数据手册 /zh/2.8inch_SPI_Module_ILI9341_SKU:MSP2807太极创客 /video/BV1C4411Z7pS?t=76配置esp32开发环境 /weixin_43031092/article/details/106860485ESP32管脚 /weixin_43031092/article/details/108158407

如果觉得《用ESP学习单片机之Arduino_Esp-32s获取2.8‘‘TFT LCD屏幕的触摸数据_ILI9341_SPI_XPT2046》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。