Arduino一直在帮助轻松地构建项目并使它们看起来更具吸引力。用触摸屏选项对LCD屏幕进行编程听起来可能是一项复杂的任务,但是Arduino库和屏蔽罩确实使它变得非常容易。在这个项目中,我们将使用2.4英寸Arduino TFT LCD屏幕来构建我们自己的Arduino触摸屏计算器,该计算器可以执行所有基本计算,例如加法,减法,除法和乘法。
所需材料:
- Arduino Uno
- 2.4英寸TFT LCD显示屏护罩
- 9V电池。
了解TFT LCD屏幕模块:
在我们真正进入该项目之前,重要的是要知道这个2.4英寸TFT LCD模块的工作方式以及类型。让我们看一下这个2.4英寸TFT LCD屏幕模块的引脚排列。
如您所见,有28个引脚完全适合任何Arduino Uno / Arduino Mega开发板。下表列出了这些引脚的小分类。
如您所见,这些引脚可以分为四个主要类别,例如LCD命令引脚,LCD数据引脚,SD卡引脚和电源引脚,我们不需要对这些引脚的详细工作了解太多,因为我们的Arduino库。
您还可以在上面显示的模块底部找到SD卡插槽,可用于将bmp图像文件加载到SD卡中,并且可以使用Arduino程序在我们的TFT LCD屏幕上显示这些图像。
另一个要注意的重要事项是您的接口IC。从最初的Adafruit TFT LCD模块到廉价的中国克隆,市场上有许多类型的TFT模块可用。一个完美适用于您的Adafruit盾牌的程序可能不适用于中国的分线板。因此,了解您手握的LCD显示器类型非常重要。必须从供应商处获得此详细信息。如果您有像我这样的廉价克隆产品,那么很可能是使用ili9341驱动器IC。您可以按照此TFT LCD与Arduino教程的接口来尝试一些基本的示例程序,并熟悉LCD屏幕。还可以在这里查看我们与Arduino的其他TFT LCD项目:
- 如何在Arduino和TFT LCD上使用NeoPixel LED灯条
- 使用Arduino的智能手机控制数字密码锁
校准触摸屏的TFT LCD屏幕:
如果打算使用TFT LCD模块的触摸屏功能,则必须对其进行校准以使其正常工作。没有校准的LCD屏幕可能无法正常工作,例如您可能在某个地方触摸而TFT可能在其他地方响应触摸。这些校准结果并非在所有电路板上都相似,因此您需要自己动手做。
校准的最佳方法是使用校准示例程序(库附带)或使用串行监视器检测错误。但是,对于此项目,由于按钮的尺寸较大,因此校准不是一个大问题,我还将在下面的编程部分下说明如何校准屏幕。
与Arduino的TFT LCD连接:
2.4英寸TFT LCD屏幕是完美的Arduino Shield。您可以直接将LCD屏幕推到Arduino Uno的顶部,它将与引脚完全匹配并滑入。但是,为了安全起见,请用小的绝缘胶带覆盖Arduino UNO的编程端子,以防万一该端子与TFT LCD屏幕接触。在UNO上组装的LCD如下所示。
为TFT LCD编程Arduino:
我们正在使用SPFD5408库来使此arduino计算器代码 正常工作。这是Adafruit的经过修改的库,可以与我们的LCD TFT模块无缝协作。您可以在本文末尾查看完整的程序。
注意: 在您的Arduino IDE或此程序中安装该库以进行编译而没有任何错误对于您而言非常重要。
要安装此库,您只需单击上方的链接,即可带您到Github页面。在此处单击克隆或下载,然后选择“下载ZIP”。将下载一个zip文件。
现在,打开Arduino IDE,然后选择 Sketch-> Include Librarey-> Add.ZIP library。 浏览器窗口将打开,导航到ZIP文件,然后单击“确定”。如果成功,您应该在Arduino的左下角注意到“已将库添加到您的库中”。《接口教程》中提供了执行此操作的详细指南。
现在,您可以在Arduino IDE中使用以下代码,并将其上传到Arduino UNO,以使触摸屏计算器正常工作。再往下,我将代码分成小段进行了解释。
我们需要三个程序库才能运行该程序。所有这三个库都在您从上面提供的链接下载的ZIP文件中给出。我只是将它们包含在代码中,如下所示。
#包括
如前所述,我们需要校准LCD屏幕以使其按预期工作,但不要担心此处给出的值几乎是通用的。变量TS_MINX,TS_MINY,TS_MAXX和TS_MAXY决定屏幕的校准。如果您觉得校准不满意,可以在它们周围放个玩具。
#define TS_MINX 125 #define TS_MINY 85 #define TS_MAXX 965 #define TS_MAXY 905
我们知道TFT LCD屏幕可以显示很多颜色,所有这些颜色都必须以十六进制值输入。为了使其更易于阅读,我们将这些值分配给变量,如下所示。
#define WHITE 0x0000 //黑色->白色#define YELLOW 0x001F // Blue->黄色#define CYAN 0xF800 // Red-> Cyan #define PINK 0x07E0 // Green-> Pink #define RED 0x07FF // Cyan-> Red #define GREEN 0xF81F //粉红色->绿色#define BLUE 0xFFE0 //黄色->蓝色#define BLACK 0xFFFF //白色->黑色
好的,现在我们可以进入编程部分。此程序涉及三个部分。一种是使用按钮和显示来创建计算器的UI。然后,基于用户的触摸来检测按钮,最后计算结果并显示它们。让我们一一解决。
1.创建计算器的用户界面:
在这里,您可以发挥很多创造力来设计计算器的用户界面。我只是简单地制作了带有16个按钮和一个显示单元的计算器的基本布局。您必须像在MS涂料上绘制某些东西一样构造设计。添加的库将使您能够绘制线,矩形,圆,字符,字符串以及更多任何喜欢的颜色。您可以从本文中了解可用的功能。
我已经使用线条和框图绘制功能来设计一个看起来与90年代计算器非常相似的UI。每个框的宽度和高度均为60像素。
//绘制结果框tft.fillRect(0,0,240,80,CYAN); //绘制第一列tft.fillRect(0,260,60,60,RED); tft.fillRect(0,200,60,60,BLACK); tft.fillRect(0,140,60,60,BLACK); tft.fillRect(0,80,60,60,BLACK); //绘制第三列tft.fillRect(120,260,60,60,GREEN); tft.fillRect(120,200,60,60,BLACK); tft.fillRect(120,140,60,60,BLACK); tft.fillRect(120,80,60,60,BLACK); //为(int b = 260; b> = 80; b- = 60)绘制Secound和第四列{tft.fillRect(180,b,60,60,BLUE); tft.fillRect(60,b,60,60,BLACK);} //绘制(int h = 80; h <= 320; h + = 60)tft.drawFastHLine(0,h,240,WHITE)的水平线; //为(int v = 0; v <= 240; v + = 60)tft.drawFastVLine(v,80,240,WHITE);绘制垂直线//显示(int j = 0; j <4; j ++){for(int i = 0; i <4; i ++){tft.setCursor(22 +(60 * i),100 +(60 * j)); tft.setTextSize(3);英尺setTextColor(WHITE); tft.println(symbol);
2.检测按钮:
另一个具有挑战性的任务是检测用户触摸。每次用户触摸某处时,我们将能够确定他所触摸像素的X和Y位置。可以使用println在串行监视器上显示此值,如下所示。
TSPoint p = waitTouch(); X = py; Y = px; Serial.print(X); Serial.print(','); Serial.println(Y); // +“” + Y);
因为我们已经设计了宽度和高度分别为60像素的框,并且该框具有四行,且列从(0,0)开始。可以预测每个盒子的位置,如下图所示。
但是在实际情况下,这不会是结果。由于校准问题,期望值和实际值之间会有很大差异。
因此,要预测盒子的确切位置,您必须单击该行并在串行监视器上检查其相应位置。这可能不是最专业的方法,但是仍然可以完美地工作。我测量了所有线条的位置并获得了以下值。
现在,由于我们知道所有盒子的位置。当用户触摸任何地方时,我们可以通过将其(X,Y)值与每个框的值进行比较来预测他触摸过的位置,如下所示。
if(X <105 && X> 50)//检测第2列上的按钮{if(Y> 0 && Y <85){Serial.println(“ Button 0”); //如果(Number == 0)Number = 0,则按下按钮0; 否则Number =(Number * 10)+ 0; //按两次}如果(Y> 85 && Y <140){Serial.println(“按钮2”);如果(Number == 0)Number = 2; 否则Number =(Number * 10)+ 2; //按下两次}
3.显示数字并计算结果:
最后一步是计算结果并将其显示在TFT LCD屏幕上。该arduino计算器只能执行2个数字的运算。这两个数字分别称为变量“ Num1”和“ Num2”。变量“ Number”从Num1和Num2中取值并取其值,并且还带有结果。
当用户按下按钮时,数字将增加一位。当按下另一个按钮时,前一个数字将乘以10,然后将新的数字相加。例如,如果我们按8,然后按5,再按7。那么变量首先将保持为8,然后是(8 * 10)+ 5 = 85,然后是(85 * 10)+7 = 857。值857。
if(Y> 192 && Y <245){Serial.println(“按钮8”); 如果(Number == 0)Number = 8; 否则Number =(Number * 10)+ 8; //再次按下}
当我们执行加法之类的任何操作时,当用户按下加法按钮时,Number中的值将被传输到 Num1 ,然后Number将被设置为零,以便准备好接受第二个数字的输入。
当按下Equal时,Number中的值将发送到 Num2 ,然后进行相应的计算(在这种情况下为加法),结果将再次存储在变量“ Number”中。
最后,该值将显示在LCD屏幕上。
加工:
这个Arduino触摸屏计算器的工作很简单。您必须在Arduino上上传以下给定的代码并启动它。您会在LCD屏幕上显示计算器。
现在,您可以输入任何数字并执行计算。目前仅限于两个操作数和唯一的运算符。但是,您可以调整代码以使其具有很多选择。
计算后,每次必须按“ C”清除屏幕上的值。希望您理解该项目并喜欢构建类似的东西。如果您有任何疑问,请随时将其发布在论坛或下面的评论部分。下次再见到另一个有趣的项目,直到您满意为止!
还要查看下面的演示视频。