在上面的程序中,TFT操作的中心函数如下:
tft.drawPixel(x,y,color); - 在指定位置(x,y)显示指定颜色(color)的点。
tft.drawCircle(x, y, radius, color); - 在指定位置(x,y)绘制指定半径(radius)的圆。
tft.fillRect(x1,y1, x2, y2, color); - 以指定位置1(x1,y1)到位置2(x2,y2)之间的宽度和高度涂一个长方形。
tft.drawString(x, y, text, color); - 在指定位置(x,y)用指定颜色(color)显示文本。
tft.fillScreen(0x0000); - 整个显示器屏幕按指定颜色显示
此外还有几个函数,但基本上用这些就可以实现丰富的表现。
2.尝试利用加速度传感器的数值绘制图表
确认完TFT显示器的工作后,接下来我们试着在TFT显示器上显示加速度传感器的值。使用传感器评估套件时,只要将加速度传感器安装在套件上,基本上就不用更改TFT显示器侧的配线了。
照片3 加速度传感器和TFT显示器
显示加速度传感器数值的程序
Code-Example[size=1em]001
[size=1em]002
[size=1em]003
[size=1em]004
[size=1em]005
[size=1em]006
[size=1em]007
[size=1em]008
[size=1em]009
[size=1em]010
[size=1em]011
[size=1em]012
[size=1em]013
[size=1em]014
[size=1em]015
[size=1em]016
[size=1em]017
[size=1em]018
[size=1em]019
[size=1em]020
[size=1em]021
[size=1em]022
[size=1em]023
[size=1em]024
[size=1em]025
[size=1em]026
[size=1em]027
[size=1em]028
[size=1em]029
[size=1em]030
[size=1em]031
[size=1em]032
[size=1em]033
[size=1em]034
[size=1em]035
[size=1em]036
[size=1em]037
[size=1em]038
[size=1em]039
[size=1em]040
[size=1em]041
[size=1em]042
[size=1em]043
[size=1em]044
[size=1em]045
[size=1em]046
[size=1em]047
[size=1em]048
[size=1em]049
[size=1em]050
[size=1em]051
[size=1em]052
[size=1em]053
[size=1em]054
[size=1em]055
[size=1em]056
[size=1em]057
[size=1em]058
[size=1em]059
[size=1em]060
[size=1em]061
[size=1em]062
[size=1em]063
[size=1em]064
[size=1em]065
[size=1em]066
[size=1em]067
[size=1em]068
[size=1em]069
[size=1em]070
[size=1em]071
[size=1em]072
[size=1em]073
[size=1em]074
[size=1em]075
[size=1em]076
[size=1em]077
[size=1em]078
[size=1em]079
[size=1em]080
[size=1em]081
[size=1em]082
[size=1em]083
[size=1em]084
[size=1em]085
[size=1em]086
[size=1em]087
[size=1em]088
[size=1em]089
[size=1em]090
[size=1em]091
[size=1em]092
[size=1em]093
[size=1em]094
[size=1em]095
[size=1em]096
[size=1em]097
[size=1em]098
[size=1em]099
[size=1em]100
[size=1em]101
[size=1em]102
[size=1em]103
[size=1em]104
[size=1em]105
[size=1em]106
[size=1em]107
[size=1em]108
[size=1em]109
[size=1em]110
[size=1em]111
[size=1em]112
[size=1em]113
[size=1em]114
[size=1em]115
[size=1em]116
[size=1em]117
[size=1em]118
[size=1em]119
[size=1em]120
[size=1em]121
[size=1em]122
[size=1em]123
[size=1em]124
[size=1em]125
[size=1em]126
[size=1em]127
[size=1em]128
[size=1em]129
[size=1em]130
[size=1em]131
[size=1em]132
[size=1em]133
[size=1em]134
[size=1em]135
[size=1em]136
[size=1em]137
[size=1em]138
[size=1em]139
[size=1em]140
[size=1em]141
[size=1em]142
[size=1em]143
[size=1em]144
[size=1em]145
[size=1em]146
[size=1em]147
[size=1em]148
[size=1em]149
[size=1em]150
[size=1em]151
[size=1em]152
[size=1em]153
[size=1em]154
[size=1em]155
[size=1em]156
[size=1em]157
[size=1em]158
[size=1em]159
[size=1em]160
[size=1em]161
[size=1em]162
[size=1em]163
[size=1em]164
[size=1em]165
[size=1em]166
[size=1em]167
[size=1em]168
[size=1em]169
[size=1em]170
[size=1em]171
[size=1em]172
[size=1em]173
[size=1em]174
[size=1em]175
[size=1em]176
[size=1em]177
[size=1em]178
[size=1em]179
[size=1em]180
[size=1em]181
[size=1em]182
[size=1em]183
[size=1em]184
[size=1em]185
[size=1em]186
[size=1em]187
[size=1em]188
[size=1em]189
[size=1em]190
[size=1em]191
[size=1em]192
[size=1em]193
[size=1em]194
[size=1em]195
[size=1em]196
[size=1em]197
[size=1em]198
[size=1em]199
[size=1em]200
[size=1em]201
[size=1em]202
[size=1em]203
[size=1em]204
[size=1em]205
[size=1em]206
[size=1em]207
[size=1em]208
[size=1em]209
[size=1em]210
[size=1em]211
[size=1em]212
[size=1em]213
[size=1em]214
[size=1em]215
[size=1em]216
[size=1em]217
[size=1em]218
[size=1em]219
[size=1em]220
[size=1em]221
[size=1em]222
[size=1em]223
[size=1em]224
[size=1em]225
[size=1em]226
[size=1em]227
[size=1em]228
[size=1em]229
[size=1em]230
[size=1em]231
[size=1em]232
[size=1em]233
[size=1em]234
[size=1em]235
[size=1em]236
[size=1em]237
[size=1em]238
[size=1em]239
[size=1em]240
[size=1em]241
[size=1em]242
[size=1em]243
[size=1em]244
[size=1em]245
[size=1em]246
[size=1em]247
[size=1em]248
[size=1em]249
[size=1em]250
[size=1em]251
[size=1em]252
[size=1em]253
[size=1em]254
[size=1em]255
[size=1em]256
[size=1em]257
[size=1em]258
[size=1em]259
[size=1em]260
[size=1em]261
[size=1em]262
[size=1em]263
[size=1em]264
[size=1em]265
[size=1em]266
[size=1em]267
[size=1em]268
[size=1em]269
[size=1em]270
[size=1em]271
[size=1em]272
[size=1em]273
[size=1em]274
[size=1em]275
[size=1em]276
[size=1em]277
[size=1em]278
[size=1em]279
[size=1em]280
[size=1em]281
[size=1em]282
[size=1em]283
[size=1em]284
[size=1em]285
[size=1em]286
[size=1em]287
[size=1em]288
[size=1em]289
[size=1em]290
[size=1em]291
[size=1em]292
[size=1em]293
[size=1em]294
[size=1em]295
[size=1em]296
[size=1em]297
[size=1em]298
[size=1em]299
[size=1em]300
[size=1em]301
[size=1em]302
[size=1em]303
[size=1em]304
[size=1em]305
[size=1em]306
[size=1em]307
[size=1em]308
[size=1em]309
[size=1em]310
[size=1em]311
[size=1em]312
[size=1em]313
[size=1em]314
[size=1em]315
[size=1em]316
[size=1em]317
[size=1em]318
[size=1em]319
[size=1em]320
[size=1em]321
[size=1em]322
[size=1em]323
[size=1em]324
[size=1em]325
[size=1em]326
[size=1em]327
[size=1em]328
[size=1em]329
[size=1em]330
[size=1em]331
[size=1em]332
[size=1em]333
[size=1em]334
[size=1em]335
[size=1em]336
[size=1em]337
[size=1em]338
[size=1em]339
[size=1em]340
[size=1em]341
[size=1em]342
[size=1em]343
[size=1em]344
[size=1em]345
[size=1em]346
[size=1em]347
[size=1em]348
[size=1em]349
[size=1em]350
[size=1em]351
[size=1em]352
[size=1em]353
[size=1em]354
[size=1em]355
[size=1em]356
[size=1em]357
[size=1em]358
[size=1em]359
[size=1em]360
[size=1em]361
[size=1em]362
[size=1em]363
[size=1em]364
[size=1em]365
[size=1em]366
[size=1em]367
[size=1em]368
[size=1em]369
[size=1em]370
[size=1em]371
[size=1em]372
[size=1em]373
[size=1em]374
[size=1em]375
[size=1em]376
[size=1em]377
[size=1em]378
[size=1em]379
[size=1em]380
[size=1em]381
[size=1em]382
[size=1em]383
[size=1em]384
[size=1em]385
[size=1em]386
[size=1em]387
[size=1em][size=1em]#include <Wire.h>
[size=1em]#include <KX022.h>
[size=1em]#include <ST7735.h>
[size=1em]#include <SPI.h>
[size=1em]// You can use any (4 or) 5 pins
[size=1em]#define sclk 4
[size=1em]#define mosi 5
[size=1em]#define cs 6
[size=1em]#define dc 7
[size=1em]#define rst 8 // you can also connect this to the Arduino reset
[size=1em]// Color definitions
[size=1em]#define BLACK 0x0000
[size=1em]#define BLUE 0x001F
[size=1em]#define RED 0xF800
[size=1em]#define GREEN 0x07E0
[size=1em]#define CYAN 0x07FF
[size=1em]#define MAGENTA 0xF81F
[size=1em]#define YELLOW 0xFFE0
[size=1em]#define WHITE 0xFFFF
[size=1em]ST7735 tft = ST7735(cs, dc, mosi, sclk, rst);
[size=1em]KX022 kx022(KX022_DEVICE_ADDRESS_1E);
[size=1em]int _cnt = 0;
[size=1em]//图表初始位置
[size=1em]int _xc = 120;
[size=1em]int _yc = 130;
[size=1em]int _zc = 140;
[size=1em]void fillpixelbypixel(uint16_t color) {
[size=1em]for (uint8_t x=0; x < tft.width; x++) {
[size=1em]for (uint8_t y=0; y < tft.height; y++) {
[size=1em]tft.drawPixel(x, y, color);
[size=1em]}
[size=1em]}
[size=1em]delay(100);
[size=1em]}
[size=1em]void setup(void) {
[size=1em]byte rc;
[size=1em]Serial.begin(9600);
[size=1em]while (!Serial);
[size=1em]Wire.begin();
[size=1em]tft.initR(); // initialize a ST7735R chip
[size=1em]rc = kx022.init();
[size=1em]tft.fillScreen(BLACK);
[size=1em]1.显示文字DEVICE PLUS
[size=1em]testdrawtext("DEVICE PLUS!!", WHITE,25,50);
[size=1em]delay(1000);
[size=1em]tft.fillScreen(BLACK);
[size=1em]}
[size=1em]void loop() {
[size=1em]//KX022
[size=1em]byte rc;
[size=1em]float acc[3];
[size=1em]//2.获取加速度传感器的值
[size=1em]rc = kx022.get_val(acc);
[size=1em]if (rc == 0) {
[size=1em]Serial.write("KX022 (X) = ");
[size=1em]Serial.print(acc[0]);
[size=1em]Serial.println(" [g]");
[size=1em]Serial.write("KX022 (Y) = ");
[size=1em]Serial.print(acc[1]);
[size=1em]Serial.println(" [g]");
[size=1em]Serial.write("KX022 (Z) = ");
[size=1em]Serial.print(acc[2]);
[size=1em]Serial.println(" [g]");
[size=1em]Serial.println();
[size=1em]//将float型转换为char型
[size=1em]char xVal[10];
[size=1em]dtostrf(acc[0], 5, 2, xVal);
[size=1em]char yVal[10];
[size=1em]dtostrf(acc[1], 5, 2, yVal);
[size=1em]char zVal[10];
[size=1em]dtostrf(acc[2], 5, 2, zVal);
[size=1em]//转换为TFT液晶
[size=1em]//tft.fillScreen(BLACK);
[size=1em]tft.fillRect(0,0, 120, 60, BLACK);
[size=1em]testdrawtext("X:", RED, 5, 15);
[size=1em]testdrawtext(xVal, WHITE, 30, 15);
[size=1em]testdrawtext("Y:", BLUE, 5, 30);
[size=1em]testdrawtext(yVal, WHITE, 30, 30);
[size=1em]testdrawtext("Z:", GREEN, 5, 45);
[size=1em]testdrawtext(zVal, WHITE, 30, 45);
[size=1em]//3.绘制图表
[size=1em]int x = int(acc[0]*100)+120;
[size=1em]int y = int(acc[1]*100)+130;
[size=1em]int z = int(acc[2]*100)+40;
[size=1em]tft.drawLine(_cnt-1, _xc, _cnt, x, RED);
[size=1em]tft.drawLine(_cnt-1, _yc, _cnt, y, BLUE);
[size=1em]tft.drawLine(_cnt-1, _zc, _cnt, z, GREEN);
[size=1em]_cnt++;
[size=1em]//到达画面边缘时复位
[size=1em]if(_cnt > 120){
[size=1em]_cnt = 0;
[size=1em]tft.fillScreen(BLACK);
[size=1em]}
[size=1em]_xc = x;
[size=1em]_yc = y;
[size=1em]_zc = z;
[size=1em]delay(10);
[size=1em]}
[size=1em]delay(10);
[size=1em]}
[size=1em]void testlines(uint16_t color) {
[size=1em]tft.fillScreen(BLACK);
[size=1em]for (uint16_t x=0; x < tft.width; x+=6) {
[size=1em]tft.drawLine(0, 0, x, tft.height-1, color);
[size=1em]}
[size=1em]for (uint16_t y=0; y < tft.height; y+=6) {
[size=1em]tft.drawLine(0, 0, tft.width-1, y, color);
[size=1em]}
[size=1em]tft.fillScreen(BLACK);
[size=1em]for (uint16_t x=0; x < tft.width; x+=6) {
[size=1em]tft.drawLine(tft.width-1, 0, x, tft.height-1, color);
[size=1em]}
[size=1em]for (uint16_t y=0; y < tft.height; y+=6) {
[size=1em]tft.drawLine(tft.width-1, 0, 0, y, color);
[size=1em]}
[size=1em]tft.fillScreen(BLACK);
[size=1em]for (uint16_t x=0; x < tft.width; x+=6) {
[size=1em]tft.drawLine(0, tft.height-1, x, 0, color);
[size=1em]}
[size=1em]for (uint16_t y=0; y < tft.height; y+=6) {
[size=1em]tft.drawLine(0, tft.height-1, tft.width-1, y, color);
[size=1em]}
[size=1em]tft.fillScreen(BLACK);
[size=1em]for (uint16_t x=0; x < tft.width; x+=6) {
[size=1em]tft.drawLine(tft.width-1, tft.height-1, x, 0, color);
[size=1em]}
[size=1em]for (uint16_t y=0; y < tft.height; y+=6) {
[size=1em]tft.drawLine(tft.width-1, tft.height-1, 0, y, color);
[size=1em]}
[size=1em]}
[size=1em]void testdrawtext(char *text, uint16_t color,int x,int y) {
[size=1em]tft.drawString(x, y, text, color);
[size=1em]}
[size=1em]void testfastlines(uint16_t color1, uint16_t color2) {
[size=1em]tft.fillScreen(BLACK);
[size=1em]for (uint16_t y=0; y < tft.height; y+=5) {
[size=1em]tft.drawHorizontalLine(0, y, tft.width, color1);
[size=1em]}
[size=1em]for (uint16_t x=0; x < tft.width; x+=5) {
[size=1em]tft.drawVerticalLine(x, 0, tft.height, color2);
[size=1em]}
[size=1em]}
[size=1em]void testdrawrects(uint16_t color) {
[size=1em]tft.fillScreen(BLACK);
[size=1em]for (uint16_t x=0; x < tft.width; x+=6) { tft.drawRect(tft.width/2 -x/2,
[size=1em]tft.height/2 -x/2 , x, x, color); } } void testfillrects(uint16_t color1,
[size=1em]uint16_t color2) { tft.fillScreen(BLACK); for (uint16_t x=tft.width-1; x > 6;
[size=1em]x-=6) {
[size=1em]tft.fillRect(tft.width/2 -x/2, tft.height/2 -x/2 , x, x, color1);
[size=1em]tft.drawRect(tft.width/2 -x/2, tft.height/2 -x/2 , x, x, color2);
[size=1em]}
[size=1em]}
[size=1em]void testfillcircles(uint8_t radius, uint16_t color) {
[size=1em]for (uint8_t x=radius; x < tft.width; x+=radius*2) {
[size=1em]for (uint8_t y=radius; y < tft.height; y+=radius*2) {
[size=1em]tft.fillCircle(x, y, radius, color);
[size=1em]}
[size=1em]}
[size=1em]}
[size=1em]void testdrawcircles(uint8_t radius, uint16_t color) {
[size=1em]for (uint8_t x=0; x < tft.width+radius; x+=radius*2) {
[size=1em]for (uint8_t y=0; y < tft.height+radius; y+=radius*2) {
[size=1em]tft.drawCircle(x, y, radius, color);
[size=1em]}
[size=1em]}
[size=1em]}
启动上面的程序后,就会显示上期介绍的加速度传感器数值的图表。
程序的流程如下:
在setup内显示"DEVICE PLUS!!"文字
获取加速度传感器的值并取整
根据数值显示图表和文本
本期是每帧都在x轴上加1,从左向右绘制图表。到达边上的120px时,将用drawrect清除图表。另外,上部数字也是一样,每帧都用drawrect进行更新。
总结
到现在为止,我们使用传感器评估套件测试了很多的传感器及部件。本期的小型TFT显示器也是一样,通过轻松操控Arduino或Raspberry Pi等小型计算机,可以根据我们的想法实现平时用普通电脑无法办到的事。因为普通的电脑较贵,无法任意随便使用,而Arduino等与普通电脑相比价格相对便宜,所以例如将本期用到的TFT显示器和Arduino Pro mini等组合起来,既可制作一个时钟或者小型游戏,还可以加上传感器评估套件的传感器做成一个数据记录仪。
|