37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
Adafruit_TFTLCD库相关函数
class Adafruit_TFTLCD : public Adafruit_GFX {
public:
Adafruit_TFTLCD(uint8_t cs, uint8_t cd, uint8_t wr, uint8_t rd, uint8_t rst);
Adafruit_TFTLCD(void);
void begin(uint16_t id = 0x9325);
void drawPixel(int16_t x, int16_t y, uint16_t color);
void drawFastHLine(int16_t x0, int16_t y0, int16_t w, uint16_t color);
void drawFastVLine(int16_t x0, int16_t y0, int16_t h, uint16_t color);
void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t c);
void fillScreen(uint16_t color);
void reset(void);
void setRegisters8(uint8_t *ptr, uint8_t n);
void setRegisters16(uint16_t *ptr, uint8_t n);
void setRotation(uint8_t x);
void setAddrWindow(int x1, int y1, int x2, int y2);
void pushColors(uint16_t *data, uint8_t len, boolean first);
uint16_t color565(uint8_t r, uint8_t g, uint8_t b),
readPixel(int16_t x, int16_t y), readID(void);
uint32_t readReg(uint8_t r);
private:
void init(),
1、创建对象
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
void setup(void) {
tft.reset();
tft.begin(0x9341);
}
首先创建了一个Adafruit_TFTLCD对象,名为tft,管脚定义这里省去了。
begin方法中的0x9341表示改TFT LCD的驱动为ILI9341,其它的这里不做介绍
2、屏幕
void fillScreen(uint16_t color);
uint16_t width(); //屏幕的宽度
uint16_t height(); //屏幕的高度
全屏填充颜色color,再次之前显示的内容会被挡住
案例
tft.fillScreen(BLACK);
delay(1000);
tft.fillScreen(RED);
delay(1000);
tft.fillScreen(BLUE);
delay(1000);
3、点
void drawPixel(int16_t x, int16_t y, uint16_t color);
复制代码
在点(x,y)上画一个颜色为color的像素点。
案例
tft.drawPixel(1,1,RED);
tft.drawPixel(10,10,RED);
tft.drawPixel(20,20,RED);
tft.drawPixel(40,40,RED);
tft.drawPixel(60,60,RED);
4、线
void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
void drawFastHLine(int16_t x0, int16_t y0, int16_t w, uint16_t color);
void drawFastVLine(int16_t x0, int16_t y0, int16_t h, uint16_t color);
最简单的是两点确定一条直线,当然也可以确定一个点、方向、长度,后两个是画水平线或者铅锤线。
案例
tft.drawFastHLine(10,10,170,RED);
tft.drawFastVLine(10,10,170,RED);
tft.drawLine(10,10,100,180,RED);
5、矩形&&圆角矩形
void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t c);
void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t c);
void drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t radius, uint16_t color);
void fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t radius, uint16_t color);
drawRect的矩形直画出边框,内部不填充,如果需要内部填充颜色则需要使用fillRect
圆角矩形则是多了一个设置圆角半径的参数raduis,是否填充与上面一样。
案例
tft.drawRect(10,10,150,100,RED);
tft.fillRect(10,120,150,100,RED);
tft.drawRoundRect(10,10,150,100,10,RED);
tft.fillRoundRect(10,120,150,100,10,RED);
6、圆形
void drawCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color);
void fillCircle(uint16_t x0, uint16_t y0, uint16_t r, uint16_t color);
这个就比较简单,圆心坐标(x0,y0),半径r,颜色color
案例
tft.drawCircle(100,100,50,WHITE);
tft.fillCircle(100,260,50,BLUE);
7、三角形
void drawTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
void fillTriangle(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, uint16_t color);
三角形需要确定三个顶点以及颜色
案例
tft.drawTriangle(10,10,100,15,180,100,GREEN);
tft.fillTriangle(10,110,100,115,180,200,GREEN);
8、字符&&英文文本
void drawChar(uint16_t x, uint16_t y, char c, uint16_t color, uint16_t bg, uint8_t size);
void setCursor(uint16_t x0, uint16_t y0); //字体左上角顶点坐标
void setTextColor(uint16_t color); //字体前景色
void setTextColor(uint16_t color, uint16_t backgroundcolor);//字体前景色与背景色
void setTextSize(uint8_t size); //字体大小放法因子
void setTextWrap(boolean w); //是否自动换行,默认为true,滚动显示设置为false
drawChar只能显示单个字符,需要确定左上角顶点坐标(x,y),字符c,颜色color,前景色color,背景色bg,大小size,大小为1时表示5 * 8像素,为2就表示10 * 16
自定义字体不支持背景色,可在此之前绘制填充颜色的形状,如圆角矩形
案例
tft.fillScreen(GREEN);
tft.drawChar(150,10,'A',RED,WHITE,5);
tft.setCursor(10,50);
tft.print("AB 3.14"); //默认前景色white、无背景色、大小为1
tft.setCursor(10,80);
tft.setTextSize( 4);
tft.print("AB 3.14");
tft.setCursor(10,115);
tft.setTextColor(RED); //背景色不做设置
tft.setTextSize( 4);
tft.print("AB你好3.141516");
tft.setCursor(10,180);
tft.setTextColor(RED, WHITE);
tft.setTextSize( 4);
tft.setTextWrap(false);
tft.print("AB你好3.141516");
可以看到默认的字体不支持中文,需要使用中文的改日再补上
9、旋转
void setRotation(uint8_t rotation);
旋转参数可以是0、1、2或3,分别对应0,90,180或270度。
对于属于Arduino屏蔽的显示,旋转值0将显示设置为竖屏(高)模式,旋转值2也是纵向模式,。旋转1是横屏模式,,而旋转3也是横屏模式。
案例
//tft.setRotation(1); //注释和未注释的情况下做对比
tft.fillScreen(GREEN);
tft.drawChar(150,10,'A',RED,WHITE,5);
tft.setCursor(10,50);
tft.print("AB 3.14"); //默认前景色white、无背景色、大小为1
tft.setCursor(10,80);
tft.setTextSize( 4);
tft.print("AB 3.14");
tft.setCursor(10,115);
tft.setTextColor(RED); //背景色不做设置
tft.setTextSize( 4);
tft.print("AB你好3.141516");
tft.setCursor(10,180);
tft.setTextColor(RED, WHITE);
tft.setTextSize( 4);
tft.setTextWrap(false);
tft.print("AB你好3.141516");
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十一:几何图形的点线面循环
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十一:几何图形的点线面循环
模块直插,引脚用法如下:
LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK
Arduino Uno A3 A2 A1 A0 A4 10 11 12 13
LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7
Arduino Uno 8 9 2 3 4 5 6 7
*/
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define WHITE 0xFFFF
void setup(void) {
tft.reset();
tft.begin(0x9341);
tft.fillScreen(BLACK);
}
void loop() {
// 点
tft.drawPixel(1, 1, RED);
tft.drawPixel(10, 10, RED);
tft.drawPixel(20, 20, RED);
tft.drawPixel(40, 40, RED);
tft.drawPixel(60, 60, RED);
delay(500);
// 线
tft.drawFastHLine(10, 10, 170, RED);
tft.drawFastVLine(10, 10, 170, RED);
tft.drawLine(10, 10, 100, 180, RED);
delay(500);
// 矩形
tft.drawRect(10, 10, 150, 100, RED);
tft.fillRect(10, 120, 150, 100, RED);
delay(500);
// 圆角矩形
tft.drawRoundRect(10, 10, 150, 100, 10, RED);
tft.fillRoundRect(10, 120, 150, 100, 10, RED);
delay(500);
// 圆形
tft.drawCircle(100, 100, 50, WHITE);
tft.fillCircle(100, 260, 50, BLUE);
delay(500);
// 三角形
tft.drawTriangle(10, 10, 100, 15, 180, 100, GREEN);
tft.fillTriangle(10, 110, 100, 115, 180, 200, GREEN);
delay(500);
//旋转
tft.setRotation(0);
delay(500);
//字符与文本
tft.fillScreen(GREEN);
tft.drawChar(150, 10, 'A', RED, WHITE, 5);
tft.setCursor(10, 50);
tft.print("AB 3.14"); //默认前景色white、无背景色、大小为1
tft.setCursor(10, 80);
tft.setTextSize( 4);
tft.print("AB 3.14");
tft.setCursor(10, 115);
tft.setTextColor(RED); //背景色不做设置
tft.setTextSize( 4);
tft.print("AB 3.141516");
tft.setCursor(10, 180);
tft.setTextColor(RED, WHITE);
tft.setTextSize( 4);
tft.setTextWrap(false);
tft.print("AB 3.141516");
delay(500);
//屏幕
tft.fillScreen(BLACK);
delay(1000);
tft.fillScreen(GREEN);
delay(1000);
//旋转
tft.setRotation(1);
delay(500);
tft.fillScreen(RED);
delay(1000);
tft.fillScreen(BLUE);
delay(1000);
//旋转
tft.setRotation(2);
delay(500);
tft.fillScreen(BLACK);
delay(1000);
//旋转
tft.setRotation(0);
delay(500);
}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十一:几何图形的点线面循环
实验动态图 https://imagemc.dfrobot.com.cn/data/attachment/forum/202107/08/065538kdc22d3yesy0b3uo.gif
WeChat_20210708064908-.gif WeChat_20210708064908.gif【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十六:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十二:使用 Arduino 2.4 触摸屏创建简易绘画应用程序
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十二:使用 Arduino 2.4 触摸屏创建简易绘画应用程序
模块直插,引脚用法如下:
LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK
Arduino Uno A3 A2 A1 A0 A4 10 11 12 13
LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7
Arduino Uno 8 9 2 3 4 5 6 7
*/
#include <Adafruit_GFX.h>
#include <Adafruit_TFTLCD.h>
#include <TouchScreen.h>
#if defined(__SAM3X8E__)
#undef __FlashStringHelper::F(string_literal)
#define F(string_literal) string_literal
#endif
#define YP A2
#define XM A1
#define YM 6
#define XP 7
#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#define LCD_CS A3
#define LCD_CD A2
#define LCD_WR A1
#define LCD_RD A0
#define LCD_RESET A4
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
#define BOXSIZE 40
#define PENRADIUS 3
int oldcolor, currentcolor;
void setup(void) {
Serial.begin(9600);
tft.reset();
tft.begin(0x9341);
tft.fillScreen(BLACK);
tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED);
tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW);
tft.fillRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, GREEN);
tft.fillRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, CYAN);
tft.fillRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, BLUE);
tft.fillRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA);
tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE);
currentcolor = RED;
pinMode(13, OUTPUT);
}
#define MINPRESSURE 10
#define MAXPRESSURE 1000
void loop() {
digitalWrite(13, HIGH);
TSPoint p = ts.getPoint();
digitalWrite(13, LOW);
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE) {
if (p.y < (TS_MINY - 5)) {
tft.fillRect(0, BOXSIZE, tft.width(), tft.height() - BOXSIZE, BLACK);
}
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
if (p.y < BOXSIZE) {
oldcolor = currentcolor;
if (p.x < BOXSIZE) {
currentcolor = RED;
tft.drawRect(0, 0, BOXSIZE, BOXSIZE, WHITE);
} else if (p.x < BOXSIZE * 2) {
currentcolor = YELLOW;
tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, WHITE);
} else if (p.x < BOXSIZE * 3) {
currentcolor = GREEN;
tft.drawRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, WHITE);
} else if (p.x < BOXSIZE * 4) {
currentcolor = CYAN;
tft.drawRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, WHITE);
} else if (p.x < BOXSIZE * 5) {
currentcolor = BLUE;
tft.drawRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, WHITE);
} else if (p.x < BOXSIZE * 6) {
currentcolor = MAGENTA;
tft.drawRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, WHITE);
} if (oldcolor != currentcolor) {
if (oldcolor == RED) tft.fillRect(0, 0, BOXSIZE, BOXSIZE, RED);
if (oldcolor == YELLOW) tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, YELLOW);
if (oldcolor == GREEN) tft.fillRect(BOXSIZE * 2, 0, BOXSIZE, BOXSIZE, GREEN);
if (oldcolor == CYAN) tft.fillRect(BOXSIZE * 3, 0, BOXSIZE, BOXSIZE, CYAN);
if (oldcolor == BLUE) tft.fillRect(BOXSIZE * 4, 0, BOXSIZE, BOXSIZE, BLUE);
if (oldcolor == MAGENTA) tft.fillRect(BOXSIZE * 5, 0, BOXSIZE, BOXSIZE, MAGENTA);
}
} if (((p.y - PENRADIUS) > BOXSIZE) && ((p.y + PENRADIUS) < tft.height())) {
tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor);
}
}
tft.setRotation(3);
}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十二:使用 Arduino 2.4 触摸屏创建简易绘画应用程序
实验场景图
51.jpg【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十三:两个按钮的极简开关板
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十三:两个按钮的极简开关板
模块直插,引脚用法如下:
LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK
Arduino Uno A3 A2 A1 A0 A4 10 11 12 13
LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7
Arduino Uno 8 9 2 3 4 5 6 7
*/
#if 1
#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <TouchScreen.h>
#define MINPRESSURE 200
#define MAXPRESSURE 1000
// 所有触摸屏和接线都是不同的
const int XP = 6, XM = A2, YP = A1, YM = 7; //ID=0x9341
const int TS_LEFT = 907, TS_RT = 136, TS_TOP = 942, TS_BOT = 139;
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
Adafruit_GFX_Button on_btn, off_btn;
int pixel_x, pixel_y; //更新全局变量
bool Touch_getXY(void) {
TSPoint p = ts.getPoint();
pinMode(YP, OUTPUT); //恢复共享引脚
pinMode(XM, OUTPUT);
digitalWrite(YP, HIGH); //因为 TFT 控制引脚
digitalWrite(XM, HIGH);
bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
if (pressed) {
pixel_x = map(p.x, TS_LEFT, TS_RT, 0, tft.width()); //kbv 对我有意义
pixel_y = map(p.y, TS_TOP, TS_BOT, 0, tft.height());
}
return pressed;
}
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
void setup(void) {
Serial.begin(9600);
tft.reset();
tft.begin(0x9341);
tft.fillScreen(BLACK);
tft.setRotation(2); // 翻转180度,对应硬件
delay(500);
on_btn.initButton(&tft, 60, 200, 100, 40, WHITE, CYAN, BLACK, "ON", 2);
off_btn.initButton(&tft, 180, 200, 100, 40, WHITE, CYAN, BLACK, "OFF", 2);
on_btn.drawButton(false);
off_btn.drawButton(false);
tft.fillRect(40, 80, 160, 80, RED);
}
// 两个按钮很简单
void loop(void) {
bool down = Touch_getXY();
on_btn.press(down && on_btn.contains(pixel_x, pixel_y));
off_btn.press(down && off_btn.contains(pixel_x, pixel_y));
if (on_btn.justReleased())
on_btn.drawButton();
if (off_btn.justReleased())
off_btn.drawButton();
if (on_btn.justPressed()) {
on_btn.drawButton(true);
tft.fillRect(40, 80, 160, 80, GREEN);
}
if (off_btn.justPressed()) {
off_btn.drawButton(true);
tft.fillRect(40, 80, 160, 80, RED);
}
}
#endif
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十三:两个按钮的极简开关板
Arduino实验场景图
WeChat_20210708084507.gif【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十四:动态环形百分比图表
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十四:动态环形百分比图表
模块直插,引脚用法如下:
LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK
Arduino Uno A3 A2 A1 A0 A4 10 11 12 13
LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7
Arduino Uno 8 9 2 3 4 5 6 7
*/
#include "Adafruit_GFX.h"
#include "MCUFRIEND_kbv.h"
#include "Temperature.h"
MCUFRIEND_kbv tft;
#define PI 3.1415926535897932384626433832795
int n, f;
int j, j2;
int i, i2;
int pct = 0;
int d[5] = {10, 60, 16, 9, 10};
uint16_t col[5] = {0x7006, 0xF986, 0x6905, 0x7FF7, 0x024D};
void setup() {
tft.reset();
Serial.begin(9600);
tft.begin(0x9341);
tft.invertDisplay(true);
tft.setTextSize(2);
}
void loop() {
tft.fillScreen(0x0042);
tft.setRotation(1);
for (int p = 0; p < 4000; p++) {
j = 120 * (sin(PI * p / 2000));
i = 120 * (cos(PI * p / 2000));
j2 = 60 * (sin(PI * p / 2000));
i2 = 60 * (cos(PI * p / 2000));
tft.drawLine(i2 + 160, j2 + 160, i + 160, j + 160, col[n]);
}
n = 0;
for (int a = 0; a < 5; a++) {
pct += d[n] * 40;
f = 4000 - pct;
for (int b = 0; b < f; b++) {
j = 120 * (sin(PI * b / 2000));
i = 120 * (cos(PI * b / 2000));
j2 = 60 * (sin(PI * b / 2000));
i2 = 60 * (cos(PI * b / 2000));
tft.drawLine(i2 + 160, j2 + 160, i + 160, j + 160, col[n + 1]);
}
tft.fillCircle(380, 100 + (30 * n), 10, col[n]);
tft.setTextColor(0xffff);
tft.setCursor(400, 94 + (30 * n));
tft.print(d[n]); tft.print("%");
n++;
}
while (1);
}
项目二十四:动态环形百分比图表
Arduino实验场景图
ezgif.com-video-to-gif-9.gif【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十五:显示触摸屏电话面板
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十五:显示触摸屏电话面板
模块直插,引脚用法如下:
LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK
Arduino Uno A3 A2 A1 A0 A4 10 11 12 13
LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7
Arduino Uno 8 9 2 3 4 5 6 7
*/
#include <TouchScreen.h> //导入触摸库
#include <LCDWIKI_GUI.h> //Core graphics library
#include <LCDWIKI_KBV.h> //Hardware-specific library
//if the IC model is known or the modules is unreadable,you can use this constructed function
LCDWIKI_KBV my_lcd(ILI9341, A3, A2, A1, A0, A4); //model,cs,cd,wr,rd,reset
//if the IC model is not known and the modules is readable,you can use this constructed function
//LCDWIKI_KBV my_lcd(240,320,A3,A2,A1,A0,A4);//width,height,cs,cd,wr,rd,reset
/* r g b */
#define BLACK 0x0000 /* 0, 0, 0 */
#define BLUE 0x001F /* 0, 0, 255 */
#define RED 0xF800 /* 255, 0, 0 */
#define GREEN 0x07E0 /* 0, 255, 0 */
#define CYAN 0x07FF /* 0, 255, 255 */
#define MAGENTA 0xF81F /* 255, 0, 255 */
#define YELLOW 0xFFE0 /* 255, 255, 0 */
#define WHITE 0xFFFF /* 255, 255, 255 */
#define NAVY 0x000F /* 0, 0, 128 */
#define DARKGREEN 0x03E0 /* 0, 128, 0 */
#define DARKCYAN 0x03EF /* 0, 128, 128 */
#define MAROON 0x7800 /* 128, 0, 0 */
#define PURPLE 0x780F /* 128, 0, 128 */
#define OLIVE 0x7BE0 /* 128, 128, 0 */
#define LIGHTGREY 0xC618 /* 192, 192, 192 */
#define DARKGREY 0x7BEF /* 128, 128, 128 */
#define ORANGE 0xFD20 /* 255, 165, 0 */
#define GREENYELLOW 0xAFE5 /* 173, 255, 47 */
#define PINK 0xF81F /* 255, 0, 255 */
/******************* UI details */
#define BUTTON_R 25 //the radius of button
#define BUTTON_SPACING_X 25 //the horizontal distance between button
#define BUTTON_SPACING_Y 5 //the vertical distance between button
#define EDG_Y 5 //lower edge distance
#define EDG_X 20 //left and right distance
#define YP A2 // must be an analog pin, use "An" notation!
#define XM A1 // must be an analog pin, use "An" notation!
#define YM 6 // can be a digital pin
#define XP 7 // can be a digital pin
//X 的触摸灵敏度
#define TS_MINX 124
#define TS_MAXX 906
//Y 的触摸灵敏度
#define TS_MINY 83
#define TS_MAXY 893
// 有一个状态行,例如 FONA 是否在工作
#define STATUS_X 10
#define STATUS_Y 65
//按下时的触摸灵敏度
#define MINPRESSURE 10
#define MAXPRESSURE 1000
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
typedef struct _button_info {
uint8_t button_name[10];
uint8_t button_name_size;
uint16_t button_name_colour;
uint16_t button_colour;
uint16_t button_x;
uint16_t button_y;
} button_info;
//按钮的定义
button_info phone_button[15] = {
"1", 3, BLACK, CYAN, EDG_X + BUTTON_R - 1, my_lcd.Get_Display_Height() - EDG_Y - 4 * BUTTON_SPACING_Y - 9 * BUTTON_R - 1,
"2", 3, BLACK, CYAN, EDG_X + 3 * BUTTON_R + BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - 4 * BUTTON_SPACING_Y - 9 * BUTTON_R - 1,
"3", 3, BLACK, CYAN, EDG_X + 5 * BUTTON_R + 2 * BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - 4 * BUTTON_SPACING_Y - 9 * BUTTON_R - 1,
"4", 3, BLACK, CYAN, EDG_X + BUTTON_R - 1, my_lcd.Get_Display_Height() - EDG_Y - 3 * BUTTON_SPACING_Y - 7 * BUTTON_R - 1,
"5", 3, BLACK, CYAN, EDG_X + 3 * BUTTON_R + BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - 3 * BUTTON_SPACING_Y - 7 * BUTTON_R - 1,
"6", 3, BLACK, CYAN, EDG_X + 5 * BUTTON_R + 2 * BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - 3 * BUTTON_SPACING_Y - 7 * BUTTON_R - 1,
"7", 3, BLACK, CYAN, EDG_X + BUTTON_R - 1, my_lcd.Get_Display_Height() - EDG_Y - 2 * BUTTON_SPACING_Y - 5 * BUTTON_R - 1,
"8", 3, BLACK, CYAN, EDG_X + 3 * BUTTON_R + BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - 2 * BUTTON_SPACING_Y - 5 * BUTTON_R - 1,
"9", 3, BLACK, CYAN, EDG_X + 5 * BUTTON_R + 2 * BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - 2 * BUTTON_SPACING_Y - 5 * BUTTON_R - 1,
"*", 3, BLACK, PINK, EDG_X + BUTTON_R - 1, my_lcd.Get_Display_Height() - EDG_Y - BUTTON_SPACING_Y - 3 * BUTTON_R - 1,
"0", 3, BLACK, CYAN, EDG_X + 3 * BUTTON_R + BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - BUTTON_SPACING_Y - 3 * BUTTON_R - 1,
"#", 3, BLACK, PINK, EDG_X + 5 * BUTTON_R + 2 * BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - BUTTON_SPACING_Y - 3 * BUTTON_R - 1,
"end", 2, BLACK, RED, EDG_X + BUTTON_R - 1, my_lcd.Get_Display_Height() - EDG_Y - BUTTON_R - 1,
"call", 2, BLACK, GREEN, EDG_X + 3 * BUTTON_R + BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - BUTTON_R - 1,
"dele", 2, BLACK, LIGHTGREY, EDG_X + 5 * BUTTON_R + 2 * BUTTON_SPACING_X - 1, my_lcd.Get_Display_Height() - EDG_Y - BUTTON_R - 1,
};
//显示字符串
void show_string(uint8_t *str, int16_t x, int16_t y, uint8_t csize, uint16_t fc, uint16_t bc, boolean mode) {
my_lcd.Set_Text_Mode(mode);
my_lcd.Set_Text_Size(csize);
my_lcd.Set_Text_colour(fc);
my_lcd.Set_Text_Back_colour(bc);
my_lcd.Print_String(str, x, y);
}
//检查是否按下
boolean is_pressed(int16_t x1, int16_t y1, int16_t x2, int16_t y2, int16_t px, int16_t py) {
if ((px > x1 && px < x2) && (py > y1 && py < y2))
{
return true;
}
else
{
return false;
}
}
//显示主菜单
void show_menu(void)
{
uint16_t i;
for (i = 0; i < sizeof(phone_button) / sizeof(button_info); i++)
{
my_lcd.Set_Draw_color(phone_button[i].button_colour);
my_lcd.Fill_Circle(phone_button[i].button_x, phone_button[i].button_y, BUTTON_R);
show_string(phone_button[i].button_name, phone_button[i].button_x - strlen(phone_button[i].button_name)*phone_button[i].button_name_size * 6 / 2 + 1, phone_button[i].button_y - phone_button[i].button_name_size * 8 / 2 + 1, phone_button[i].button_name_size, phone_button[i].button_name_colour, BLACK, 1);
}
my_lcd.Set_Draw_color(BLACK);
my_lcd.Fill_Rectangle(1, 1, my_lcd.Get_Display_Width() - 2, 3);
my_lcd.Fill_Rectangle(1, 29, my_lcd.Get_Display_Width() - 2, 31);
my_lcd.Fill_Rectangle(1, 1, 3, 31);
my_lcd.Fill_Rectangle(my_lcd.Get_Display_Width() - 4, 1, my_lcd.Get_Display_Width() - 2, 31);
}
void setup(void) {
Serial.begin(9600);
my_lcd.Init_LCD();
Serial.println(my_lcd.Read_ID(), HEX);
my_lcd.Fill_Screen(BLUE);
show_menu();
}
uint16_t text_x = 10, text_y = 6, text_x_add = 6 * phone_button[0].button_name_size, text_y_add = 8 * phone_button[0].button_name_size;
uint16_t n = 0;
void loop(void) {
uint16_t i;
digitalWrite(13, HIGH);
TSPoint p = ts.getPoint();
digitalWrite(13, LOW);
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
if (p.z > MINPRESSURE && p.z < MAXPRESSURE)
{
//p.x = my_lcd.Get_Display_Width()-map(p.x, TS_MINX, TS_MAXX, my_lcd.Get_Display_Width(), 0);
//p.y = my_lcd.Get_Display_Height()-map(p.y, TS_MINY, TS_MAXY, my_lcd.Get_Display_Height(), 0);
p.x = map(p.x, TS_MINX, TS_MAXX, 0, my_lcd.Get_Display_Width());
p.y = map(p.y, TS_MINY, TS_MAXY, 0, my_lcd.Get_Display_Height());
// }
for (i = 0; i < sizeof(phone_button) / sizeof(button_info); i++) {
//按下按钮
if (is_pressed(phone_button[i].button_x - BUTTON_R, phone_button[i].button_y - BUTTON_R, phone_button[i].button_x + BUTTON_R, phone_button[i].button_y + BUTTON_R, p.x, p.y))
{
my_lcd.Set_Draw_color(DARKGREY);
my_lcd.Fill_Circle(phone_button[i].button_x, phone_button[i].button_y, BUTTON_R);
show_string(phone_button[i].button_name, phone_button[i].button_x - strlen(phone_button[i].button_name)*phone_button[i].button_name_size * 6 / 2 + 1, phone_button[i].button_y - phone_button[i].button_name_size * 8 / 2 + 1, phone_button[i].button_name_size, WHITE, BLACK, 1);
delay(100);
my_lcd.Set_Draw_color(phone_button[i].button_colour);
my_lcd.Fill_Circle(phone_button[i].button_x, phone_button[i].button_y, BUTTON_R);
show_string(phone_button[i].button_name, phone_button[i].button_x - strlen(phone_button[i].button_name)*phone_button[i].button_name_size * 6 / 2 + 1, phone_button[i].button_y - phone_button[i].button_name_size * 8 / 2 + 1, phone_button[i].button_name_size, phone_button[i].button_name_colour, BLACK, 1);
if (i < 12)
{
if (n < 13)
{
show_string(phone_button[i].button_name, text_x, text_y, phone_button[i].button_name_size, GREENYELLOW, BLACK, 1);
text_x += text_x_add - 1;
n++;
}
}
else if (12 == i) //节目通话结束
{
my_lcd.Set_Draw_color(BLUE);
my_lcd.Fill_Rectangle(0, 33, my_lcd.Get_Display_Width() - 1, 42);
show_string("Calling ended", CENTER, 33, 1, OLIVE, BLACK, 1);
}
else if (13 == i) //显示呼叫
{
my_lcd.Set_Draw_color(BLUE);
my_lcd.Fill_Rectangle(0, 33, my_lcd.Get_Display_Width() - 1, 42);
show_string("Calling...", CENTER, 33, 1, OLIVE, BLACK, 1);
}
else if (14 == i) //删除按钮
{
if (n > 0)
{
my_lcd.Set_Draw_color(BLUE);
text_x -= (text_x_add - 1);
my_lcd.Fill_Rectangle(text_x, text_y, text_x + text_x_add - 1, text_y + text_y_add - 2);
n--;
}
}
}
}
}
}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十五:显示触摸屏电话面板
实验场景图
52.jpg【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十六:显示动态中文——深圳市欢迎您
实验开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十六:显示动态中文——深圳市欢迎您
模块直插,引脚用法如下:
LCD_CS LCD_CD LCD_WR LCD_RD LCD_RST SD_SS SD_DI SD_DO SD_SCK
Arduino Uno A3 A2 A1 A0 A4 10 11 12 13
LCD_D0 LCD_D1 LCD_D2 LCD_D3 LCD_D4 LCD_D5 LCD_D6 LCD_D7
Arduino Uno 8 9 2 3 4 5 6 7
*/
#include <LCDWIKI_GUI.h> //Core graphics library
#include <LCDWIKI_KBV.h> //Hardware-specific library
#include "font.h"
//if the IC model is known or the modules is unreadable,you can use this constructed function
LCDWIKI_KBV my_lcd(ILI9341, A3, A2, A1, A0, A4); //model,cs,cd,wr,rd,reset
//if the IC model is not known and the modules is readable,you can use this constructed function
//LCDWIKI_KBV my_lcd(240,320,A3,A2,A1,A0,A4);//width,height,cs,cd,wr,rd,reset
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
char *aspect_name[] = {"PORTRAIT", "LANDSCAPE", "PORTRAIT_REV", "LANDSCAPE_REV"};
char *color_name[] = { "BLUE", "GREEN", "RED", "WHITE" , "CYAN", "MAGENTA", "YELLOW"};
uint16_t color_mask[] = { 0x001F, 0x07E0, 0xF800, 0xFFFF, 0x07FF, 0xF81F, 0xFFE0 };
void show_16font(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str, uint8_t mode)
{
uint16_t i, j, k, c_num, color = 0;
boolean first = true;
c_num = sizeof(tfont16) / sizeof(typFNT_GB16);
for (k = 0; k < c_num; k++)
{ //pgm_read_byte
if ((pgm_read_byte(&tfont16[k].Index[0]) == *str) && (pgm_read_byte(&tfont16[k].Index[1]) == *(str + 1)))
{
my_lcd.Set_Addr_Window(x, y, x + 16 - 1, y + 16 - 1);
for (j = 0; j < 32; j++)
{
for (i = 0; i < 8; i++)
{
if (mode) //叠加模式
{
if (pgm_read_byte(&tfont16[k].Msk[j]) & (0x80 >> i))
{
my_lcd.Set_Draw_color(fc);
my_lcd.Draw_Pixel(x + ((j * 8 + i) % 16), y + ((j * 8 + i) / 16));
}
// x++;
// if((x-x0)==16)
// {
// x = x0;
// y++;
// }
}
else //非叠加模式
{
if (pgm_read_byte(&tfont16[k].Msk[j]) & (0x80 >> i))
{
color = fc;
}
else
{
color = bc;
}
my_lcd.Push_Any_Color(&color, 1, first, 0);
first = false;
}
}
}
}
}
}
void show_24font(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str, uint8_t mode)
{
uint16_t i, j, k, c_num, color;
boolean first = true;
c_num = sizeof(tfont24) / sizeof(typFNT_GB24);
for (k = 0; k < c_num; k++)
{
if ((pgm_read_byte(&tfont24[k].Index[0]) == *str) && (pgm_read_byte(&tfont24[k].Index[1]) == *(str + 1)))
{
my_lcd.Set_Addr_Window(x, y, x + 24 - 1, y + 24 - 1);
for (j = 0; j < 72; j++)
{
for (i = 0; i < 8; i++)
{
if (mode) //叠加模式
{
if (pgm_read_byte(&tfont24[k].Msk[j]) & (0x80 >> i))
{
my_lcd.Set_Draw_color(fc);
my_lcd.Draw_Pixel(x + ((j * 8 + i) % 24), y + ((j * 8 + i) / 24));
}
// x++;
// if((x-x0)==32)
// {
// x = x0;
// y++;
// }
}
else //非叠加模式
{
if (pgm_read_byte(&tfont24[k].Msk[j]) & (0x80 >> i))
{
color = fc;
}
else
{
color = bc;
}
my_lcd.Push_Any_Color(&color, 1, first, 0);
first = false;
}
}
}
}
}
}
void show_32font(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str, uint8_t mode)
{
uint16_t i, j, k, c_num, color;
boolean first = true;
c_num = sizeof(tfont32) / sizeof(typFNT_GB32);
for (k = 0; k < c_num; k++)
{
if ((pgm_read_byte(&tfont32[k].Index[0]) == *str) && (pgm_read_byte(&tfont32[k].Index[1]) == *(str + 1)))
{
my_lcd.Set_Addr_Window(x, y, x + 32 - 1, y + 32 - 1);
for (j = 0; j < 128; j++)
{
for (i = 0; i < 8; i++)
{
if (mode) //叠加模式
{
if (pgm_read_byte(&tfont32[k].Msk[j]) & (0x80 >> i))
{
my_lcd.Set_Draw_color(fc);
my_lcd.Draw_Pixel(x + ((j * 8 + i) % 32), y + ((j * 8 + i) / 32));
}
// x++;
// if((x-x0)==32)
// {
// x = x0;
// y++;
// }
}
else //非叠加模式
{
if (pgm_read_byte(&tfont32[k].Msk[j]) & (0x80 >> i))
{
color = fc;
}
else
{
color = bc;
}
my_lcd.Push_Any_Color(&color, 1, first, 0);
first = false;
}
}
}
}
}
}
void show_chinese(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str, uint16_t csize, uint8_t mode)
{
int i = 0;
if (x > (my_lcd.Get_Display_Width() - csize) || y > (my_lcd.Get_Display_Height() - csize))
{
return;
}
while (*str != '\0')
{
// i += 5;
// my_lcd.Draw_Fast_VLine(i, 10, 100);
if (csize == 32)
{
show_32font(x, y, fc, bc, str, mode);
}
else if (csize == 24)
{
show_24font(x, y, fc, bc, str, mode);
}
else
{
show_16font(x, y, fc, bc, str, mode);
}
str += 3;
x += csize;
}
}
void show_chinese_test(void)
{
uint16_t i;
my_lcd.Set_Rotation(1);
show_chinese(0, 10, RED, BLACK, "深圳市欢迎您", 16, 1);
show_chinese(0, 26, RED, BLACK, "深圳市欢迎您", 24, 1);
show_chinese(0, 50, RED, BLACK, "深圳市欢迎您", 32, 1);
show_chinese(0, 82, GREEN, BLACK, "深圳市欢迎您", 16, 1);
show_chinese(0, 98, GREEN, BLACK, "深圳市欢迎您", 24, 1);
show_chinese(0, 122, GREEN, BLACK, "深圳市欢迎您", 32, 1);
show_chinese(0, 154, BLUE, BLACK, "深圳市欢迎您", 16, 1);
show_chinese(0, 170, BLUE, BLACK, "深圳市欢迎您", 24, 1);
show_chinese(0, 194, BLUE, BLACK, "深圳市欢迎您", 32, 1);
for (i = 1; i <= my_lcd.Get_Display_Width(); i++)
{
my_lcd.Vert_Scroll(0, my_lcd.Get_Display_Width(), i);
delay(10);
}
delay(2000);
my_lcd.Fill_Screen(BLACK);
show_chinese(0, 10, RED, WHITE, "深圳市欢迎您", 16, 0);
show_chinese(0, 26, RED, WHITE, "深圳市欢迎您", 24, 0);
show_chinese(0, 50, RED, WHITE, "深圳市欢迎您", 32, 0);
show_chinese(0, 82, GREEN, WHITE, "深圳市欢迎您", 16, 0);
show_chinese(0, 98, GREEN, WHITE, "深圳市欢迎您", 24, 0);
show_chinese(0, 122, GREEN, WHITE, "深圳市欢迎您", 32, 0);
show_chinese(0, 154, BLUE, WHITE, "深圳市欢迎您", 16, 0);
show_chinese(0, 170, BLUE, WHITE, "深圳市欢迎您", 24, 0);
show_chinese(0, 194, BLUE, WHITE, "深圳市欢迎您", 32, 0);
delay(1000);
}
void show_pic(void)
{
int i;
my_lcd.Set_Addr_Window(my_lcd.Get_Display_Width() - 40 - 40, 20, my_lcd.Get_Display_Width() - 40 - 1, 59);
my_lcd.Push_Any_Color(penguin_pic, 1600, 1, 1);
}
void windowScroll(int16_t x, int16_t y, int16_t wid, int16_t ht, int16_t dx, int16_t dy, uint16_t *buf)
{
if (dx)
{
for (int16_t row = 0; row < ht; row++)
{
my_lcd.Read_GRAM(x, y + row, buf, wid, 1);
my_lcd.Set_Addr_Window(x, y + row, x + wid - 1, y + row);
my_lcd.Push_Any_Color(buf + dx, wid - dx, 1, 0);
my_lcd.Push_Any_Color(buf + 0, dx, 0, 0);
}
}
if (dy)
{
for (int16_t col = 0; col < wid; col++)
{
my_lcd.Read_GRAM(x + col, y, buf, 1, ht);
my_lcd.Set_Addr_Window(x + col, y, x + col, y + ht - 1);
my_lcd.Push_Any_Color(buf + dy, ht - dy, 1, 0);
my_lcd.Push_Any_Color(buf + 0, dy, 0, 0);
}
}
}
void show_string(uint8_t *str, int16_t x, int16_t y, uint8_t csize, uint16_t fc, uint16_t bc, boolean mode)
{
my_lcd.Set_Text_Mode(mode);
my_lcd.Set_Text_Size(csize);
my_lcd.Set_Text_colour(fc);
my_lcd.Set_Text_Back_colour(bc);
my_lcd.Print_String(str, x, y);
}
void color_test()
{
int n, i;
int cnum = sizeof(color_mask) / sizeof(uint16_t);
for (i = 0; i < cnum; i++)
{
for (n = 0; n < 32; n++)
{
my_lcd.Set_Draw_color(n * 8, n * 8, n * 8);
my_lcd.Set_Draw_color(my_lcd.Get_Draw_color()&color_mask[i]);
my_lcd.Fill_Rectangle(n * my_lcd.Get_Display_Width() / 32, (my_lcd.Get_Display_Height() / cnum)*i, (n + 1)*my_lcd.Get_Display_Width() / 32, (my_lcd.Get_Display_Height() / cnum) * (i + 1));
}
show_string(color_name[i], 0, ((my_lcd.Get_Display_Height() / cnum) - 16) / 2 + (my_lcd.Get_Display_Height() / cnum)*i, 2, color_mask[i], BLACK, 1);
}
delay(500);
}
void text_test(void)
{
show_string("Hello World!", 0, 0, 1, RED, BLACK, 0);
my_lcd.Set_Text_colour(YELLOW);
my_lcd.Set_Text_Size(2);
my_lcd.Print_Number_Float(01234.56789, 4, 0, 8, '.', 0, ' ');
show_string("ABCDEF123456", 0, 24, 3, BLUE, BLACK, 0);
show_string("Good", 0, 56, 5, GREEN, BLACK, 0);
show_string("By utilizing breath", 0, 96, 2, GREEN, BLACK, 0);
show_string("we soften our experiences.", 0, 112, 1, GREEN, BLACK, 0);
show_string("If we dam them up,", 0, 120, 1, GREEN, BLACK, 0);
show_string("our lives will stagnate,", 0, 128, 1, GREEN, BLACK, 0);
show_string("but we keep them flowing,", 0, 136, 1, GREEN, BLACK, 0);
show_string("we allow more newness", 0, 144, 1, GREEN, BLACK, 0);
show_string("and greater experiences", 0, 152, 1, GREEN, BLACK, 0);
show_string("to blossom.Yes OK", 0, 160, 1, GREEN, BLACK, 0);
}
void setup()
{
Serial.begin(9600);
my_lcd.Init_LCD();
Serial.println(my_lcd.Read_ID(), HEX);
my_lcd.Fill_Screen(BLACK);
// show_chinese_test();
// show_pic();
}
void loop()
{
uint16_t max_scroll, rotation, i, n;
my_lcd.Set_Rotation(0);
uint16_t scrollbuf[my_lcd.Get_Display_Height()];
show_chinese_test();
delay(250);
for (rotation = 0; rotation < 4; rotation++)
{
my_lcd.Set_Rotation(rotation);
my_lcd.Fill_Screen(BLACK);
//text
color_test();
my_lcd.Fill_Screen(BLACK);
delay(500);
text_test();
delay(500);
for (n = 0; n < 32; n++)
{
my_lcd.Set_Draw_color(n * 8, n * 8, n * 8);
my_lcd.Set_Draw_color(my_lcd.Get_Draw_color()&color_mask[rotation]);
my_lcd.Fill_Rectangle(n * my_lcd.Get_Display_Width() / 32, 48, (n + 1)*my_lcd.Get_Display_Width() / 32, 112);
}
show_string("COLOR TESTING", 50, 72, 2, color_mask[rotation + 1], BLACK, 1);
show_string(aspect_name[rotation], 0, 184, 2, WHITE, BLACK, 0);
show_pic();
show_string("VERTICAL SCROLL UP", 0, 168, 2, YELLOW, BLACK, 0);
if (my_lcd.Get_Rotation() & 1)
{
max_scroll = my_lcd.Get_Display_Width();
}
else
{
max_scroll = my_lcd.Get_Display_Height();
}
for (i = 1; i <= max_scroll; i++)
{
my_lcd.Vert_Scroll(0, max_scroll, i);
delay(10);
}
my_lcd.Vert_Scroll(0, max_scroll, 0);
show_string("VERTICAL SCROLL DN", 0, 168, 2, GREEN, BLACK, 0);
for (i = 1; i <= max_scroll; i++)
{
my_lcd.Vert_Scroll(0, max_scroll, 0 - i);
delay(10);
}
delay(500);
my_lcd.Vert_Scroll(0, max_scroll, 0);
if (!(rotation & 1))
{
show_string("ONLY THE COLOR BAND", 0, 200, 2, BLUE, BLACK, 0);
for (i = 1; i <= 64; i++)
{
my_lcd.Vert_Scroll(48, 64, i);
delay(20);
}
delay(500);
my_lcd.Vert_Scroll(0, max_scroll, 0);
}
show_string("SOFTWARE SCROLL", 0, 216, 2, YELLOW, BLACK, 0);
for (int16_t i = my_lcd.Get_Display_Width(), dx = 4, dy = 0; i > 0; i -= dx)
{
windowScroll(0, 216, my_lcd.Get_Display_Width(), 16, dx, dy, scrollbuf);
}
delay(1000);
}
my_lcd.Invert_Display(true);
delay(1000);
my_lcd.Invert_Display(false);
my_lcd.Fill_Screen(BLACK);
}
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十六:显示动态中文——深圳市欢迎您
实验场景图 https://imagemc.dfrobot.com.cn/data/attachment/forum/202107/08/114904ww7x7qjwjvn8a1q9.gif
WeChat_20210708114428 (0).gif【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十三:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十六:显示动态中文——深圳市欢迎您
实验场景图 之二 https://imagemc.dfrobot.com.cn/data/attachment/forum/202107/08/115644rvtovda4jdtu9bbd.gif
WeChat_20210708114428 (2).gif【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百六十五:2.4寸TFT液晶触摸屏 彩屏模块 TFT-LCD 高清真彩显示屏
项目二十六:显示动态中文——深圳市欢迎您
实验视频(1分30秒)
网友评论