Arduino GPS时速表-萤幕分析 - 静态显示
这篇是写给从事或学习电子科技的人参考用的.
里面主要介绍如何在萤幕模组上印字/改变字体/改变颜色/画点/画线...等.
较为学术类的内容.可能会有些枯燥乏味,有兴趣的在往下看吧.^_^|||
本篇所采用的萤幕,与我的另二两篇章
里面用的萤幕皆为同一个.
让各位在学习完萤幕的用法后,可以顺便看看应用的方式.
这篇算是第一篇专门写给从事或学习电子科技的人看的,所以我会尽量地写的比较底层.
就从...硬体开始吧!
硬体
准备材料
1. Arduino Mega2560
2. FTF萤幕 (在 Arduino 程式库 (Library) 这篇文章里面有较详细关于此萤幕的资讯)
arduino的萤幕众多,注意不要买错.若真的买错了,也别生气,因为萤幕的用法大同小异,参考我的写的内容.
控制起其他不同种类的萤幕也可以比较容易上手.
硬体就这样,然后将他们插在一起.结束.
就这么简单吗?对,就这么简单!
这也是我喜欢用Arduino模组的关系,尽量去简单化硬体,这样学习起软体,也比较事半功倍.
软体
好.接下来就要玩硬的了.哈!
对了!不会写程式的不用怕,你不用太去理解我里面的程式是怎么写出来的,
你只要会用我的程式码,去做出你想要的画面就好,不用急著一步到位,用久了,
再去学习软体,也可以更快进入状况.
1. 首先先开启Arduino IDE, 不知道的可以参考我的另一篇章 Arduino IDE
2. 安装萤幕的Library, 不知道的可以参考我的另一篇章 Arduino 程式库 (Library)
这边使用的是 Adafruit的程式库(Library), Adafruit Industries是一家位于纽约市的开源硬件公司 .
3. Arduino IDE 的程式架构, 刚学习的可以参考我的另一篇章 Arduino Blink
执行画面如下
TFT画面的使用.
C语言的部分用"浅蓝底黑色字"处理
Setp1,载入LIB的前置处理
#include <Adafruit_TFTLCD.h> // Hardware-specific library
Step2,先宣告一个TFT
#define LCD_CS A3 // TFT 使用的接脚定义
#define LCD_CD A2 // TFT 使用的接脚定义
#define LCD_WR A1 // TFT 使用的接脚定义
#define LCD_RD A0 // TFT 使用的接脚定义
#define LCD_RESET A4 // TFT 使用的接脚定义
Adafruit_TFTLCD Touchtft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); // 这边使用的是Adafruit的程式库(Library)
以上.为硬体设定,所以将其放在最上方的前置处理,或全域变数中.
Step3,初始化萤幕.
Touchtft.reset();
Touchtft.begin(0x7575); // 0x7575, TFT萤幕的控制器ID
Touchtft.setRotation(1); // 设定旋转角度
Touchtft.fillScreen(BLACK); // 萤幕全部变黑
在开始Step4之前先解释一下,萤幕像素,及Touchtft的函式.
萤幕像素.
这片萤幕为320x240像素的萤幕.
何谓像素? 简单说为影像显示的基本单位.
以上图为例,就是一个22x20像素的图,你可以改变每个小格子(像素)的颜色,来构成一附图,或一个字.
每个小格子(像素),可以显示三种原色,就是红/绿/蓝.这片萤幕解析度是16位元的.
前5个Bit是蓝0x0000~0x001F
中5个Bit是绿0x0020~0x03E0
第11个Bit无作用
最后5个Bit是红0x0800~0xF800
0x0000不显色,就是黑.
0xFFFF蓝绿红全亮,就是白.
所以上面有一行
Touchtft.fillScreen(BLACK); // 萤幕全部变黑
里面的BLACK,就可以用
#define BLACK 0x0000
来表示.
下面是RGB显示的范例
#include <Adafruit_TFTLCD.h> // Hardware-specific library #define YP A1 #define LCD_CS A3 #define BLACK 0x0000 #define RED 0xF800 Adafruit_TFTLCD Touchtft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); void setup(void) int iTempR = 0; iTempG = i << 5; // 绿色范围 0x001F~0x03E0 iTempR = i << 11; // 绿色范围 0x07FF~0xF800 Touchtft.fillRect(10, 80, 50, 20, BLACK); // 清除数字i的显示范围 void loop() } |
范例影片如下
由上述范例,可以得知几个常用关于显示的函式.
1. Touchtft.fillRect(x1, y1, x2, y2, RGB); // 区块填色
// 在x1,y1的位置到x2,y2间,填入颜色
2. Touchtft.setTextSize(int); // 设定字体大小
3. Touchtft.setCursor(x, y); // 设定游标位置
4. Touchtft.print(str); // 印出字串
备注: x / y / x1 / y1 / x2 /y2 都是座标,范围是320x240
就是萤幕的解析度,画素.
好!接下来,就用这些函式来显示萤幕画面.
Step4,显示字串
显示日期
Touchtft.fillRect(0, 0, 120, 16, BLACK);
Touchtft.setTextSize(2);
Touchtft.setTextColor(WHITE);
Touchtft.setCursor(0, 0);
sprintf(cBuf80, "%04d-%02d-%02d", 2017, 11, 9); // 将字串2017-11-09放入cBuf80.
// 日期是随意设的, 之后会抓GPS日期来显示
Touchtft.println(cBuf80); // 印出cBuf80
显示时间
Touchtft.fillRect(220, 0, 90, 22, BLACK);
Touchtft.setTextSize(3);
Touchtft.setTextColor(WHITE);
Touchtft.setCursor(220, 0);
sprintf(cBuf80, "%02d:%02d", 21, 10); // 将字串21:10放入cBuf80
// 时间是随意设的, 之后会抓GPS时间来显示
Touchtft.println(cBuf80); // 印出cBuf80
显示卫星数量
Touchtft.fillRect(132, 20, 48, 16, BLUE);
Touchtft.setTextSize(2);
Touchtft.setTextColor(WHITE);
Touchtft.setCursor(0, 20);
sprintf(cBuf80, "satellites: %d", 6); // 将satellites: 6放入cBuf80
// 卫星数量是随意设的, 之后会抓GPS接收卫星数量来显示
Touchtft.println(cBuf80); // 印出cBuf80
显示km/h单位
Touchtft.fillRect(269, 180, 50, 20, BLACK);
Touchtft.setTextColor(WHITE);
Touchtft.setTextSize(2);
Touchtft.setCursor(269, 180);
Touchtft.println("km/h");
时速显示
Touchtft.fillRect(213, 60, 90, 120, BLACK);
Touchtft.setTextSize(17);
Touchtft.setCursor(213, 60);
Touchtft.println("0"); // 直接印出0
显示30sec studio, 哈!这是不要脸的置入,就不多做解释啦.
Touchtft.fillRect(165, 215, 155, 25, RED);
Touchtft.setCursor(170, 220);
Touchtft.setTextColor(WHITE);
Touchtft.setTextSize(2);
sprintf(cBuf80, "30sec studio");
Touchtft.println(cBuf80);
以上.皆为一次性的设定,所以将其放在Setup()的式里就可以.
loop()里面放空就好.
好,静态显示的部分结束啦,下次再聊聊动态部分.
Arduino GPS时速表-萤幕分析 - 静态显示由Peng Yi Hsing制作,以创用CC 姓名标示-非商业性-禁止改作 3.0 台湾 授权条款释出。