|
编程Arduino开发板 我们使用SPFD5408库来保证arduino计算器代码正常工作。这是一个修改后的Adafruit库,可以与我们的LCD TFT模块无缝工作。您可以在本文最后查看完整的程序。
注意:在Arduino IDE或者这个程序中安装这个库,编译没有任何错误是非常重要的。
要安装这个库,你可以简单地点击上面的链接,将你转到一个Github页面。点击克隆或下载并选择“下载ZIP”。将下载一个zip文件。
现在,打开Arduino IDE并选择Sketch - > Include Librarey - > Add .ZIP library。浏览器窗口将打开导航到ZIP文件,然后单击“OK”。如果成功,您应该会在Arduino左下角注意到“Library added to your Libraries”。 现在,您可以在Arduino IDE中使用以下代码,并将其上传到Arduino UNO,以使触摸屏计算器正常工作。再往下,我将代码按照小段进行讲解。
我们需要三个库使得这个程序正常工作。所有这三个库都可以在从上面提供的链接以ZIP文件格式进行下载。我只是将它们包含在代码中,如下所示。 - #include <SPFD5408_Adafruit_GFX.h> // Core graphics library
- #include <SPFD5408_Adafruit_TFTLCD.h> // Hardware-specific library
- #include <SPFD5408_TouchScreen.h>
复制代码
如前所述,我们需要校准液晶显示屏以使其正常工作,但不要担心这里给出的值几乎是通用的。变量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 //Black->White
- #define YELLOW 0x001F //Blue->Yellow
- #define CYAN 0xF800 //Red->Cyan
- #define PINK 0x07E0 //Green-> Pink
- #define RED 0x07FF //Cyan -> Red
- #define GREEN 0xF81F //Pink -> Green
- #define BLUE 0xFFE0 //Yellow->Blue
- #define BLACK 0xFFFF //White-> Black
复制代码
好的,现在我们可以进入编程部分了。这个程序涉及三个部分。一个是用按钮和显示创建一个计算器的用户界面。然后,基于用户触摸来检测按钮,并最终计算结果并显示它们。让我们逐一进行讲解。
1. 创建计算器的用户界面: 这里你可以发挥创造力来设计计算器的用户界面。我简单地做了16个按钮和一个显示单元的计算器的基本布局。你必须像在MS画板上绘制东西一样来构建设计。添加的库将允许您绘制线条、矩形、圆形、字符、字符串和更多的任何首选颜色。您可以从本文中了解可用的功能。
我已经使用线条和框的绘制来设计一个非常类似于90年代计算器的用户界面。每个方框的宽度和高度都是60像素。
- //Draw the Result Box
- tft.fillRect(0, 0, 240, 80, CYAN);
- //Draw First Column
- 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);
- //Draw Third Column
- 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);
- //Draw Secound & Fourth Column
- for (int b=260; b>=80; b-=60)
- { tft.fillRect (180,b,60,60,BLUE);
- tft.fillRect (60,b,60,60,BLACK);}
- //Draw Horizontal Lines
- for (int h=80; h<=320; h+=60)
- tft.drawFastHLine(0, h, 240, WHITE);
- //Draw Vertical Lines
- for (int v=0; v<=240; v+=60)
- tft.drawFastVLine(v, 80, 240, WHITE);
- //Display keypad lables
- for (int j=0;j<4;j++) {
- for (int i=0;i<4;i++) {
- tft.setCursor(22 + (60*i), 100 + (60*j));
- tft.setTextSize(3);
- tft.setTextColor(WHITE);
- tft.println(symbol[j][i]);
复制代码
2. 检测按钮 另一个挑战性的任务是检测用户的触摸。每次用户触摸某处时,我们都能够知道他所触摸像素的X和Y位置。该值可以使用println显示在串行监视器上,如下所示。 - TSPoint p = waitTouch();
- X = p.y; Y = p.x;
- Serial.print(X); Serial.print(','); Serial.println(Y);// + " " + Y);
复制代码
由于我们设计了宽度和高度均为60像素的方框,并且有四行和从(0,0)开始的列。每个方框的位置可以预测如下图所示。
但在实际情况下,结果并不是这样。由于校准问题,预期值和实际值之间会有很大差异。 因此,要预测盒子的确切位置,您必须点击该行并检查其在串行监视器上的相应位置。这可能不是最专业的方式,但仍然是工作正常。我测量了所有线的位置并获得了下面的值。
现在,因为我们知道所有框的位置。当用户触摸到任何地方时,我们可以通过将他的(X,Y)值与每个框的值进行比较来预测他所触摸的位置,如下所示。 - if (X<105 && X>50) //Detecting Buttons on Column 2
- {
- if (Y>0 && Y<85)
- {Serial.println ("Button 0"); //Button 0 is Pressed
- if (Number==0)
- Number=0;
- else
- Number = (Number*10) + 0; //Pressed twice
- }
-
- if (Y>85 && Y<140)
- {Serial.println ("Button 2");
- if (Number==0)
- Number=2;
- else
- Number = (Number*10) + 2; //Pressed twice
- }
复制代码
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 ("Button 8");
- if (Number==0)
- Number=8;
- else
- Number = (Number*10) + 8; //Pressed again
- }
复制代码
当我们执行任何操作时,如加法,当用户按下加按钮时,来自Number的值将被转移到Num1,然后Number将被设置为零,以便它准备好接受第二个数字的输入。 当按下Equal时,Number中的值将被发送到Num2,然后将进行相应的计算(在这种情况下为加法),结果将再次存储在变量“Number”中。 最后,这个值将显示在LCD屏幕上。
工作过程 这个Arduino触摸屏计算器的工作过程很简单。你需要将下面的代码上传到Arduino开发板,然后上电。这时液晶显示屏上将显示一个计算器。
现在,您可以输入任意数字并进行计算。现在仅限于两个操作数和一个操作符。但是,你可以调整代码,使其有更多的选择。 执行计算后,您必须按“C”键清除屏幕上的值。希望你能了解这个项目,并喜欢创建类似的东西。如果您有任何疑问,请随时在论坛或在本帖下面进行发帖。
本项目的完整代码:
main.rar
(2.18 KB, 下载次数: 602)
|