The reference to 37 sensors and actuators has been widely circulated on the Internet. In fact, there must be more than 37 sensor modules compatible with Arduino. In view of the fact that I have accumulated some sensor and actuator modules on hand, according to the concept of practice to get true knowledge (must be done), for the purpose of learning and communication, I am going to try a series of experiments one by one, regardless of success (the program goes through) or not, They will be recorded - small progress or unsolvable problems, hoping to inspire others.
[Arduino] 168 kinds of sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: 2.4-inch TFT LCD touch screen color screen module can be directly plugged into UNO R3 Mega2560 development board
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: The 2.4-inch TFT LCD touch screen color screen module can be directly plugged into the UNO R3 Mega2560 development board
Item 6: Display English strings of different font sizes line by line
Experimental open source code:
/*
【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> //导入核心图形库
#include <LCDWIKI_KBV.h> //导入特定硬件库
//如果 IC 模型已知或模块不可读,则可以使用此构造函数
LCDWIKI_KBV mylcd(ILI9341, A3, A2, A1, A0, A4); //模型、CS、CD、WR、RD、重置
//如果 IC 模型未知且模块可读,则可以使用此构造函数
//LCDWIKI_KBV my_lcd(240,320,A3,A2,A1,A0,A4);//屏幕宽度、高度、cs、cd、wr、rd、重置
//定义一些颜色值
#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()
{
Serial.begin(9600);
mylcd.Init_LCD();
Serial.println(mylcd.Read_ID(), HEX);
mylcd.Fill_Screen(BLACK);
}
void loop()
{
mylcd.Set_Text_Mode(0);
//显示 1 次字符串
mylcd.Fill_Screen(0x0000);
mylcd.Set_Text_colour(RED);
mylcd.Set_Text_Back_colour(BLACK);
mylcd.Set_Text_Size(1);
mylcd.Print_String("Hello World!", 0, 0);
mylcd.Print_Number_Float(01234.56789, 2, 0, 8, '.', 0, ' ');
mylcd.Print_Number_Int(0xDEADBEF, 0, 16, 0, ' ', 16);
//mylcd.Print_String("DEADBEF", 0, 16);
delay(166);
//显示 2 次字符串
mylcd.Set_Text_colour(GREEN);
mylcd.Set_Text_Size(2);
mylcd.Print_String("Hello World!", 0, 40);
mylcd.Print_Number_Float(01234.56789, 2, 0, 56, '.', 0, ' ');
mylcd.Print_Number_Int(0xDEADBEF, 0, 72, 0, ' ', 16);
//mylcd.Print_String("DEADBEEF", 0, 72);
delay(166);
//显示 3 次字符串
mylcd.Set_Text_colour(BLUE);
mylcd.Set_Text_Size(3);
mylcd.Print_String("Hello World!", 0, 104);
mylcd.Print_Number_Float(01234.56789, 2, 0, 128, '.', 0, ' ');
mylcd.Print_Number_Int(0xDEADBEF, 0, 152, 0, ' ', 16);
// mylcd.Print_String("DEADBEEF", 0, 152);
delay(166);
//显示 4 次字符串
mylcd.Set_Text_colour(WHITE);
mylcd.Set_Text_Size(4);
mylcd.Print_String("Hello!", 0, 192);
delay(166);
//显示 5 次字符串
mylcd.Set_Text_colour(YELLOW);
mylcd.Set_Text_Size(5);
mylcd.Print_String("Hello!", 0, 224);
delay(166);
//显示 6 次字符串
mylcd.Set_Text_colour(RED);
mylcd.Set_Text_Size(6);
mylcd.Print_String("Hello!", 0, 266);
delay(666);
}
Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display
Item 6: Display English strings of different font sizes line by line
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display
Item 7: Diagnostic Contact Pin
Experimental open source code:
/*
【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
*/
void showpins(int A, int D, int value, const char *msg) {
Serial.print(msg);
Serial.print(" (A" + String(A - A0) + ", D" + String(D) + ") = ");
Serial.println(value);
}
void setup() {
int i, j, value, Apins[2], Dpins[2], Values[2], found = 0;
Serial.begin(9600);
Serial.println("Making all control and bus pins INPUT_PULLUP");
Serial.println("Typical 30k Analog pullup with corresponding pin");
Serial.println("would read low when digital is written LOW");
Serial.println("e.g. reads ~25 for 300R X direction");
Serial.println("e.g. reads ~30 for 500R Y direction");
Serial.println("");
for (i = A0; i < A5; i++) pinMode(i, INPUT_PULLUP);
for (i = 2; i < 10; i++) pinMode(i, INPUT_PULLUP);
for (i = A0; i < A4; i++) {
for (j = 5; j < 10; j++) {
pinMode(j, OUTPUT);
digitalWrite(j, LOW);
value = analogRead(i); // 忽略初读
value = analogRead(i);
if (value < 100) {
showpins(i, j, value, "Testing :");
if (found < 2) {
Apins[found] = i;
Dpins[found] = j;
Values[found] = value;
found++;
}
}
pinMode(j, INPUT_PULLUP);
}
}
if (found == 2) {
Serial.println("Diagnosing as:-");
for (i = 0; i < 2; i++) {
showpins(Apins[i], Dpins[i], Values[i], (Values[i] < Values[!i]) ? "XM,XP: " : "YP,YM: ");
}
}
}
void loop() {
}
Experimental serial port return
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display
Project Eight: Vertical Flow Display Strings
Experimental open source code:
/*
【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>
MCUFRIEND_kbv tft;
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
// 在行号中工作。 以 16 为单位的字体高度
int16_t ht = 16, top = 3, line, lines = 15, scroll;
void setup() {
tft.reset();
uint16_t id = tft.readID();
tft.begin(id);
tft.setRotation(0); //肖像
tft.fillScreen(BLACK);
tft.setTextColor(WHITE, BLACK);
tft.setTextSize(2); // 系统字体为 8 像素。 ht = 8*2=16
tft.setCursor(100, 0);
tft.print("ID = 0x");
tft.println(id, HEX);
if (id == 0x9320 || id == 0x9325 || id == 0xB509) {
top = 0; // 这些控制器滚动全屏
lines = tft.height() / ht; // 我们处于纵向模式
}
if (id == 0x7783) {
tft.println("can NOT scroll");
while (1); // 休止
}
tft.setCursor(0, 0);
for (line = 1; line < 21; line++) tft.println(String(line) + ": ");
}
void loop(){
tft.setCursor(0, (scroll + top) * ht);
if (++scroll >= lines) scroll = 0;
tft.vertScroll(top * ht, lines * ht, (scroll) * ht);
tft.println(String(line) + ": [" + String(scroll) + "] ");
delay(100);
line++;
}
Arduino experiment scene diagram
https://imagemc.dfrobot.com.cn/data/attachment/forum/202106/28/125955hrd1ln1n7xrcmg7g.gif
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display
Item 9: Display strings on four sides in a dynamic background cycle
Arduino experiment open source code
/*
【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>
MCUFRIEND_kbv tft;
void setup(){
Serial.begin(9600);
tft.reset();
uint16_t identifier = tft.readID();
Serial.print("ID = 0x");
Serial.println(identifier, HEX);
if (identifier == 0xEFEF) identifier = 0x9486;
tft.begin(identifier);
// tft fill Screen (BLACK);
}
char *msg[] = {
"PORTRAIT", "LANDSCAPE", "PORTRAIT_REV", "LANDSCAPE_REV" };
uint8_t aspect;
void loop(){
uint16_t x = 50, y = 100;
tft.setRotation(aspect);
tft.fillScreen(0x0000);
tft.setCursor(0, 0);
tft.setTextSize(2);
tft.println(msg[aspect]);
tft.setCursor(x, y);
tft.println("[x=" + String(x) + ",y=" + String(y) + "]");
delay(800);
tft.println("INVERT ON");
tft.invertDisplay(true);
delay(250);
tft.invertDisplay(false);
tft.println("INVERT OFF");
delay(250);
if (++aspect >= 4) aspect = 0;
}
Arduino experiment scene diagram
https://mc.dfrobot.com.cn/data/attachment/forum/202106/28/135424yzt2775hhjbth8mf.gif
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display
Item 10: Display English strings of different font sizes line by line
Arduino experiment open source code
/*
【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> // 导入特定硬件库
MCUFRIEND_kbv tft;
#include <Fonts/FreeSans9pt7b.h> //导入字体库
#include <Fonts/FreeSans12pt7b.h>
#include <Fonts/FreeSerif12pt7b.h>
#include <FreeDefaultFonts.h>
#define BLACK 0x0000
#define RED 0xF800
#define GREEN 0x07E0
#define WHITE 0xFFFF
#define GREY 0x8410
void setup(void){
Serial.begin(9600);
uint16_t ID = tft.readID();
Serial.println("Example: Font_simple");
Serial.print("found ID = 0x");
Serial.println(ID, HEX);
Serial.println("The display font is ready OK!");
if (ID == 0xD3D3) ID = 0x9481; //如果只写显示,则强制 ID
tft.begin(ID);
tft.setRotation(0);
}
void loop(void){
tft.fillScreen(BLACK);
showmsgXY(20, 10, 1, NULL, "System x1");
showmsgXY(20, 24, 2, NULL, "System x2");
showmsgXY(20, 60, 1, &FreeSans9pt7b, "FreeSans9pt7b");
showmsgXY(20, 80, 1, &FreeSans12pt7b, "FreeSans12pt7b");
showmsgXY(20, 100, 1, &FreeSerif12pt7b, "FreeSerif12pt7b");
showmsgXY(20, 120, 1, &FreeSmallFont, "FreeSmallFont");
showmsgXY(5, 180, 1, &FreeSevenSegNumFont, "01234");
showmsgXY(5, 190, 1, NULL, "System Font is drawn from topline");
tft.setTextColor(RED, GREY);
tft.setTextSize(2);
tft.setCursor(0, 220);
tft.print("7x5 can overwrite");
delay(50);
tft.setCursor(0, 220);
tft.print("if background set");
delay(50);
showmsgXY(5, 260, 1, &FreeSans9pt7b, "Free Fonts from baseline");
delay(50);
showmsgXY(5, 285, 1, &FreeSans9pt7b, "Free Fonts transparent");
delay(50);
showmsgXY(5, 310, 1, &FreeSans9pt7b, "erase backgnd with fillRect()");
delay(300);
}
void showmsgXY(int x, int y, int sz, const GFXfont *f, const char *msg)
{
int16_t x1, y1;
uint16_t wid, ht;
tft.drawFastHLine(0, y, tft.width(), WHITE);
tft.setFont(f);
tft.setCursor(x, y);
tft.setTextColor(GREEN);
tft.setTextSize(sz);
tft.print(msg);
delay(500);
}
Experimental serial port return
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display
Item 10: Display English strings of different font sizes line by line
Arduino experiment scene diagram
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display
Project 11: Dynamic character strings in full screen in four directions
Experimental open source code:
/*
【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
*/
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
#include <Adafruit_GFX.h> // Hardware-specific library
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
//#include <Adafruit_TFTLCD.h> // Hardware-specific library
//Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
//Adafruit_TFTLCD tft;
//为一些常见的 16 位颜色值分配可读的名称
#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);
void loop(void);
uint16_t g_identifier;
void setup(void) {
tft.reset();
g_identifier = tft.readID();
Serial.begin(9600);
Serial.print("readID = 0x");
Serial.println(g_identifier, HEX);
if (g_identifier == 0xFFFF) g_identifier = 0x9341;
if (g_identifier == 0) {
Serial.println("Unknown ID");
while (1);
}
tft.begin(g_identifier);
tft.setRotation(0);
}
uint16_t colors[] = {
BLACK, BLUE
};
void colordump(uint16_t x, uint16_t y)
{
uint16_t pixel, pixels[32];
char i, j, buf[20], dirty;
uint8_t wid = (tft.width() - 9 * 6) / (5 * 6), ht = (tft.height() / 8) - 1;
tft.setTextColor(WHITE);
tft.setTextSize(1);
for (j = 0; j < ht; j++) {
sprintf(buf, "%3d,%3d:", x, y + j);
tft.print(buf);
dirty = 1;
for (i = 0; i < wid; i++) {
#if 1 && defined(MCUFRIEND_KBV_H_)
if (dirty) tft.readGRAM(x, y + j, pixels, wid, 1);
dirty = 0;
pixel = pixels[i];
#else
pixel = tft.readPixel(x + i, y + j);
#endif
tft.print(" ");
if (pixel == WHITE) tft.setTextColor(GREEN);
sprintf(buf, "%04X", pixel);
tft.print(buf);
tft.setTextColor(WHITE);
}
tft.println();
}
}
uint16_t bgr(uint16_t color) {
return ((color & 0xF800) >> 11) | (color & 0x7E0) | (color & 0x1F) << 11;
}
void duffcolor(uint16_t color) {
uint16_t pixel, x, y;
char done, buf[20];
uint16_t BGR = bgr(color);
for (done = 0, y = 0; y < 320 && !done; y++) {
for (x = 0; x < 240; x++) {
//pixel = readxy(x, y);
pixel = tft.readPixel(x, y);
if (pixel != BGR) {
done = 1;
sprintf(buf, "0x%04X @ %d, %d", pixel, x, y);
tft.println(buf);
break;
}
}
}
}
uint8_t aspect;
char *aspectname[] = {
"PORTRAIT", "LANDSCAPE", "PORTRAIT_REV", "LANDSCAPE_REV"
};
void loop(void) {
uint16_t iter, color;
char buf[80];
aspect = (aspect + 1) & 3;
tft.setRotation(aspect);
for (iter = 0; iter < sizeof(colors) / sizeof(uint16_t); iter++) {
color = colors[iter];
tft.fillScreen(color);
tft.setTextColor(WHITE);
tft.setTextSize(1);
tft.setCursor(0, 0);
sprintf(buf, "ID=0x%04X Background=%04X %s",
tft.readID(), color, aspectname[aspect]);
tft.println(buf);
colordump(6 * 6, 0);
//duffcolor(color);
delay(400);
}
}
[Arduino] 168 sensor module series experiments (data code + simulation programming + graphics programming)
Experiment 153: 2.4-inch TFT LCD touch screen color screen module TFT-LCD high-definition true color display
Project 11: Dynamic character strings in full screen in four directions
Experimental scene graph