資料介紹
描述
介紹
經(jīng)過一段時間的分析,我在這里繼續(xù)用另一種方式來表示電位器的模擬值,這次我想體驗一個3.5“TFT LCD,我喜歡它的尺寸和可以表示的各種顏色。它是一個組件值得一些項目擁有。當然,這個文檔也是關于模擬值的傳奇的一部分。
圖表
要開發(fā)這個項目,不需要復雜的連接或圖表,因為電位器必須連接到引腳 A0,然后按照圖像參考將屏幕安裝在 Arduino UNO 上。
另一個重要的細節(jié):必要的庫是LCDWIKI_GUI.h和LCDWIKI_KBV,我喜歡這些庫的地方在于易于設計引人注目的元素、文本和背景。
代碼的系統(tǒng)
我們包括必要的圖形庫以使用屏幕并表示必要的形式。
#include //Core graphics library
#include //Hardware-specific library
接下來我們?yōu)楦髯缘膸鞓嫿ㄆ聊弧?/font>
LCDWIKI_KBV my_lcd(ILI9486,A3,A2,A1,A0,A4);
我們定義要使用的顏色。
#define BLACK 0x0000
#define RED 0xF800
#define GREY 0x2104 // Dark grey 16 bit colour
#define GREEN 0x07E0
#define WHITE 0xFFFF
#define BLUE 0x001F
// Meter colour schemes
#define RED2RED 0
#define GREEN2GREEN 1
#define BLUE2BLUE 2
#define BLUE2RED 3
#define GREEN2RED 4
#define RED2GREEN 5
我們設置變量來控制時間并存儲模擬讀數(shù)的值。
uint32_t runTime = -99999; // time for next update
int reading = 0; // Value to be displayed
現(xiàn)在,在下面幾行設置代碼中,我們分別初始化屏幕、設置深色背景和設置屏幕旋轉方向。
void setup() {
my_lcd.Init_LCD();
my_lcd.Fill_Screen(0x0);
my_lcd.Set_Rotation(1);
}
ringMeter 函數(shù)是代碼的核心,內部應用數(shù)學公式創(chuàng)建各種三角形,兩個頂點在內弧上,另一個頂點在外弧上,然后生成一個倒三角形。各種三角形的生成允許構建圓形條并逐漸將顏色應用于它。然后生成居中文本的表示,為此考慮了它所具有的圖形數(shù)量。
int ringMeter(int value, int vmin, int vmax, int x, int y, int r, byte scheme){
// Minimum value of r is about 52 before value text intrudes on ring
// drawing the text first is an option
x += r; y += r; // Calculate coords of centre of ring
int w = r / 4; // Width of outer ring is 1/4 of radius
int angle = 150; // Half the sweep angle of meter (300 degrees)
int text_colour = 0; // To hold the text colour
int v = map(value, vmin, vmax, -angle, angle); // Map the value to an angle v
byte seg = 5; // Segments are 5 degrees wide = 60 segments for 300 degrees
byte inc = 5; // Draw segments every 5 degrees, increase to 10 for segmented ring
// Draw colour blocks every inc degrees
for (int i = -angle; i < angle; i += inc) {
// Choose colour from scheme
int colour = 0;
switch (scheme) {
case 0: colour = RED; break; // Fixed colour
case 1: colour = GREEN; break; // Fixed colour
case 2: colour = BLUE; break; // Fixed colour
case 3: colour = rainbow(map(i, -angle, angle, 0, 127)); break; // Full spectrum blue to red
case 4: colour = rainbow(map(i, -angle, angle, 63, 127)); break; // Green to red (high temperature etc)
case 5: colour = rainbow(map(i, -angle, angle, 127, 63)); break; // Red to green (low battery etc)
default: colour = BLUE; break; // Fixed colour
}
// Calculate pair of coordinates for segment start
float sx = cos((i - 90) * 0.0174532925);
float sy = sin((i - 90) * 0.0174532925);
uint16_t x0 = sx * (r - w) + x;
uint16_t y0 = sy * (r - w) + y;
uint16_t x1 = sx * r + x;
uint16_t y1 = sy * r + y;
// Calculate pair of coordinates for segment end
float sx2 = cos((i + seg - 90) * 0.0174532925);
float sy2 = sin((i + seg - 90) * 0.0174532925);
int x2 = sx2 * (r - w) + x;
int y2 = sy2 * (r - w) + y;
int x3 = sx2 * r + x;
int y3 = sy2 * r + y;
if (i < v) { // Fill in coloured segments with 2 triangles
my_lcd.Set_Draw_color(colour);
my_lcd.Fill_Triangle(x0, y0, x1, y1, x2, y2);
my_lcd.Fill_Triangle(x1, y1, x2, y2, x3, y3);
text_colour = colour; // Save the last colour drawn
}
else // Fill in blank segments
{
my_lcd.Set_Draw_color(GREY);
my_lcd.Fill_Triangle(x0, y0, x1, y1, x2, y2);
my_lcd.Fill_Triangle(x1, y1, x2, y2, x3, y3);
}
}
// Convert value to a string
char buf[10];
byte len = 4; if (value > 999) len = 5;
dtostrf(value, len, 0, buf);
my_lcd.Set_Draw_color(0, 0,0);
my_lcd.Fill_Rectangle(x-60, y-15, x+60, y+20);
// Set the text colour to default
my_lcd.Set_Text_colour(WHITE);
my_lcd.Set_Text_Back_colour(BLACK);
my_lcd.Set_Text_Size(5);
if (value>999){
my_lcd.Print_String(String(value), x-60, y-15);
} else if (value>99 && value<1000){
my_lcd.Print_String(String(value), x-45, y-15);
} else if (value>9 && value<100){
my_lcd.Print_String(String(value), x-30, y-15);
} else {
my_lcd.Print_String(String(value), x-15, y-15);
}
return x + r;
}
彩虹功能允許您設置用于圓形條的顏色變化。
unsigned int rainbow(byte value){
// Value is expected to be in range 0-127
// The value is converted to a spectrum colour from 0 = blue through to 127 = red
byte red = 0; // Red is the top 5 bits of a 16 bit colour value
byte green = 0;// Green is the middle 6 bits
byte blue = 0; // Blue is the bottom 5 bits
byte quadrant = value / 32;
if (quadrant == 0) {
blue = 31;
green = 2 * (value % 32);
red = 0;
}
if (quadrant == 1) {
blue = 31 - (value % 32);
green = 63;
red = 0;
}
if (quadrant == 2) {
blue = 0;
green = 63;
red = value % 32;
}
if (quadrant == 3) {
blue = 0;
green = 63 - 2 * (value % 32);
red = 31;
}
return (red << 11) + (green << 5) + blue;
}
在循環(huán)期間,您需要從電位器讀取模擬信號,然后調用 ringmeter 函數(shù)進行繪圖。
void loop() {
if (millis() - runTime >= 100L) {
runTime = millis();
// Set the position, gap between meters, and inner radius of the meters
int gap = 4, radius = 120, xpos = my_lcd.Get_Display_Width()/2-radius, ypos = my_lcd.Get_Display_Height()/2-radius;
int value = analogRead(A5); // read of potentiometer value
xpos = gap + ringMeter(value, 0, 1020, xpos, ypos, radius, GREEN2RED); // Draw analogue meter
}
}
結論
所有與用戶交互的項目都允許欣賞與代碼的各種交互,尤其是這個項目讓我探索了 TFT 屏幕的使用、它的顏色甚至基本的圖形元素。3.5 英寸的屏幕非常漂亮且易于使用,一旦您從制造商那里獲得了技術信息,您仍然可以分享您使用此屏幕的體驗。
- 廣州大彩VisualTFT組態(tài)控件教程(三)進度條控件 0次下載
- LcdProgressBarDouble LCD顯示器顯示兩個進度條
- ProgressView進度視圖的用法 2次下載
- 支持組件所有基本功能的圓形進度條 1次下載
- 將底層接口調用實現(xiàn)成鴻蒙接口的循環(huán)音樂進度條 3次下載
- 漸變的圓形進度條與輕量橫向進度條演示 3次下載
- 圓形進度條openharmony視圖安裝使用 1次下載
- 基于openharmony適配移植的圓形動態(tài)進度條演示 1次下載
- 串口屏Modbus教程3-儀表、滑塊及進度條控件V1.0
- 大彩串口屏控件教程15 - 圓形進度條控件應用
- 大彩串口屏控件教程3 - 串口屏進度條控件應用
- Linux基礎教程之linux wget下載進度條變成多行顯示如何解決 19次下載
- 優(yōu)化數(shù)字電位器電路設計方案 12次下載
- 工程技術筆記—圓形進度條使用 0次下載
- C#教程之彈出模式窗口顯示進度條 7次下載
- 【AWTK使用經(jīng)驗】如何設計立體電池進度條? 316次閱讀
- 電位器的作用以及接線方式,電位器的應用場合、選用原則 7292次閱讀
- 電工知識--電位器及電位器的檢測 3648次閱讀
- 如何使用Github上的advcpmv來實現(xiàn)Linux中的cp和mv命令的進度條呢 1596次閱讀
- 雙聯(lián)電位器接線方法_雙聯(lián)電位器接線注意事項 2.1w次閱讀
- 十大bourns電位器推薦 1.1w次閱讀
- bourns電位器接線圖 1.3w次閱讀
- 變頻器接電位器怎么接_變頻器電位器接線圖_變頻器外接電位器接法 4w次閱讀
- 如何理解數(shù)字電位器 9341次閱讀
- 如何制作數(shù)字電位器_數(shù)字電位器制作方法 2w次閱讀
- 數(shù)字電位器工作原理詳解_數(shù)字電位器應用_數(shù)字電位器選型指南 5.8w次閱讀
- 數(shù)字電位器控制原理圖 3.4w次閱讀
- 數(shù)字電位器應用實例_數(shù)字電位器四大應用電路 4.5w次閱讀
- 數(shù)字電位器怎么選型_數(shù)字電位器選型指南 9320次閱讀
- 電位器的結構特點是什么? 2101次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多