搜索
热搜: ROHM 模拟 车载
查看: 1427|回复: 2

[分享] 加速传感器和TFT液晶面板的游戏(下)

  [复制链接]

该用户从未签到

18

主题

43

帖子

0

精华

中级会员

最后登录
2023-2-14
发表于 2018-9-24 21:56:27 | 显示全部楼层 |阅读模式
在上面的程序中,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显示器侧的配线了。
QQ截图20180924215353.png
照片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等组合起来,既可制作一个时钟或者小型游戏,还可以加上传感器评估套件的传感器做成一个数据记录仪。

回复

使用道具 举报

该用户从未签到

2248

主题

1万

帖子

1

精华

论坛元老

最后登录
2024-5-2
发表于 2018-9-25 09:37:16 | 显示全部楼层
编辑的比较乱
回复 支持 反对

使用道具 举报

该用户从未签到

1153

主题

5959

帖子

0

精华

论坛元老

最后登录
2021-2-19
发表于 2018-9-27 16:34:01 | 显示全部楼层
来看一看。。。
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|罗姆半导体技术社区

GMT+8, 2024-5-3 03:58 , Processed in 0.098462 second(s), 14 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表