雷竞技注册
项目

如何构建一个简单的基于arduino的计算器

2016年6月13日通过aleksandartomić.

学习如何使用Arduino结合液晶显示器和键盘来制作计算器。

学习如何使用LCD显示屏结合键盘和Arduino来制作计算器。

虽然计算器已经存在了几千年,但是电子计算器已经统治世界几十年了。从基础的到科学的,计算器有各种形状和大小。但在当今世界,几乎每个人都有智能手机,它们对我们没有用处。这并不意味着我们不喜欢他们或不再关心他们。所以让我们用Arduino制作自己的基本计算器来表达对他们的敬意吧。

你将需要完成这个项目:

  • arduino板(我用的是UNO)
  • LCD 1602A液晶显示
  • 4 x4键盘按钮
  • 电路试验板
  • 电位计,1-10Kohm
  • 电阻,200 - 1000欧姆
  • 跳线

在我们开始之前

为了能够编译这个程序,你需要在Arduino IDE中同时安装LiquidCrystal.h和Keypad.h库。有两种方法可以做到这一点。如果您的Arduino IDE是版本1.6.2或更高,只需使用库管理器。如果您正在使用较早的版本,则需要将这些库复制到Arduino IDE安装位置的libraries文件夹中。所以为了让这篇文章简单明了,这里有一个链接来解释如何安装库

Arduino Uno.

工作原理

此简单设备以清除的LCD屏幕开始,等待键盘的键输入。它形成用户输入的键中的数字。一旦用户按下操作按钮,它会记住所需的第一个数字和操作,并继续采集第二个数字。当用户完成输入第二号码时,在按键盘上的等于按钮之后,程序执行所请求的操作并打印结果。之后,它仍然静止并等待待按下的清除按钮('C'),以便它可以重新开始。(用户还可以在任何时间点重置程序。)

LCD 1602A

Arduino IDE有一个内置库(LiquidCrystal.h),支持基于日立HD44780芯片组(和/或与它兼容的)的lcd。除了在LCD上显示文本外,该库还可以处理将浮点数打印到指定数量的小数点,这使开发人员更容易操作。例如:

双Pi = 3.1415926535;液晶显示器。打印(π,4);

这将在LCD上打印3.1415,其中4表示4个小数点。

该示例中的LCD使用4位数据传输引脚D4-D7(电路板上11-14)。电位器充当分压器并控制显示文本的对比度。其中间销连接到显示器的引脚V0(PIN3)。

液晶显示器

让我们把LCD连接到Arduino上。首先,从Arduino连接+5v和GND引脚到接线板电源线。将LCD插入面包板,并将Pin1连接到地面,Pin2连接到+5V轨道。

接下来,把电位器放在板上,并连接两个侧脚:一个到+5v,另一个到GND引脚(它是什么无关紧要)。现在将电位器的中间引脚连接到LCD的引脚3。

我们需要打开显示屏背光和对比度。LCD上的引脚15和16是作为LCD背光的内置LED的阳极和阴极。我们将它连接到电源轨道上,就像你将任何其他LED连接到5V:阳极到正电压,阴极到GND,用串联电阻来限制电流。你可以使用100-220欧姆电阻器。我在这里使用了一个1k的电阻,因为220欧姆背光对我的相机来说太亮了,无法拍摄视频。如果你喜欢,你可以用电位器替换电阻器,并根据你的喜好调整背光。

向前移动,使以下连接:销4液晶的销7 Arduino电路板,销5液晶接地,销6针的LCD 8 Arduino电路板,最后针11日12日13日14针的液晶9,10,11,12分别Arduino电路板。如果您想确保您的连接是正确的,我包含了一个简单的代码来测试显示。你可以简单地把它烧到你的Arduino板上,看看你的LCD是否工作正常。

键盘

除了闪烁的LED(基于输出的项目)之外的大多数项目将需要来自用户的某种输入。在许多情况下,按钮用于用户输入采集。有一个arduino keypad.h的库(如果您没有它,请检查本文末尾的链接)能够处理按钮矩阵并易于使用。该库消除了对外部上拉电阻的需求,因为它可以实现片上集成的上拉电阻,并且它还在所有未使用的列引脚上处理/设置高阻抗。它基本上通过列扫描。它使得当前列引脚为低电平并读取该列的行引脚值,然后跳转到下一个列等...直到它扫描所有连接/分配的引脚。除了上拉,图书馆还处理按钮脱位。图书馆不使用延迟;相反,它定期使用内置的Arduino Millis()函数,并确定按下按钮的长度,或者如果在特定键上有过渡。如果没有延迟,则代码更有效地执行,并且不会通过消除软件延迟的逐方消除处理来消耗处理能力。

我想只使用Arduino的引脚0到13的一边,因为这是所需引脚的确切数量(它将更简单的连接所有的电线在一边,而不是面条线沙拉)。但经过几次测试,引脚13上的LED令人恼火,所以我决定不使用引脚13。我还留下引脚0-1不用于串行端口测试目的。我移动了LCD,使用引脚7-12,键盘使用引脚2-5,模拟引脚A2-A5用于行和列。你可以方便地把它连接起来;只要确保你将行和列分开。排引脚A2-A5或引脚2-5连接,列连接其余的电线到Arduino板的对面。如果你将第一行导线连接到引脚A2,然后将第一行导线连接到引脚2。

如果你把事情搞砸了,不要担心!只要进入你的软件并在那里更改一些东西,就像这样:

byte rowPins[ROWS] = {A2,A3,A4,A5};//连接到键盘字节的行pinouts colPins[COLS] = {2,3,4,5};//连接到键盘的柱pinouts

如果您想测试您的键盘或使用它,代码包中包含的简单代码将帮助您做到这一点。只需下载并刻录代码到您的Arduino板与键盘连接。

我没有键盘,也不想等一个月才从中国发货,所以我自己做了一个。如下图所示。如果你打算这样做,你需要:

  • 16个按钮
  • 小型PCB Proto板
  • 8根导线(行导线4根,列导线4根)
  • 一些焊料和烙铁

软件/代码

代码由三个循环组成。第一个循环扫描键盘击键,一次在显示一个键上打印它们。与此同时,它转移前一十年,它会在第一个十年增加一个新的数字。这亮起,直到用户通过按“C”击中操作员键或重置之一。然后程序打破了第一个循环并跳入第二个循环。

第二个循环基本上与第一个循环相同,但它只等待按下相等的键' = '。此时,它根据所选的操作符计算总数,打印结果,并继续执行下一个也是最后一个循环。

在第三个循环中,程序只是等待键盘上的“C”按钮被按下。当'C'键被按下时,它重新启动程序。

代码可以优化,但是我以这种方式写了它,所以初学者受众可以快速遵循代码并获得程序流的想法(而不是粘附分析紧密包装的代码)。

既然我们已经完成了硬件组装和代码解释,就该刻录代码了。

如果您不想经历将键盘连接到此项目(或者您没有一个或不想构建一个),则可以使用Arduino串行监视器。您可以通过更改几行代码来执行此操作:

在void setup()中,添加:

Serial.Begin(9600);//和内部字符采集循环更改按钮= customkeypad.getkey();// to button = serial.read();

你很高兴去!如果您没有LCD,则可以以类似的方式修改程序将数据发送到计算机而不是LCD,并在串行监视器中获取结果。

Arduino Calculator.

source_code_1.zip.

结论及有用连结

虽然这个项目是一个简单的计算器,它主要用Arduino制作,但它主要介绍如何使用键盘获取字符并从单独输入的字符中形成整个数量。

还介绍了如何控制连接到Arduino的LCD,并将两者合并成一个功能计算器。这个程序受到Arduino平台变量和数学的限制,所以不要对它期望太多——Arduino在大数字和浮点数方面有限制。例如,当涉及到浮点数时,你有float和double。Double应该比float更精确,但在Arduino上不是这样。所以使用double代替float不会给你更高的精度,除非你使用Arduino Due。

制作一个更复杂的计算器,可以处理更大的数字和更长的浮点,但不存在本文的范围。对于那些对更大数字感兴趣的人,有一个库(Bignumber.h,实际上是C ++类),可以处理大数字,可访问的通过这个链接.当我说大的数字时,我的意思是你可以做计算直到你用完内存。如果你喜欢大数,想测试Arduino板的极限,你一定要看看这个线程。

至于你的键盘库,如果你想深入了解它是如何工作的,你应该去看看这个链接并看到它的可能性。

总而言之,我希望你喜欢这一点,并尽可能多地与它有很多乐趣。

查看更多:Arduino项目

你自己试试这个项目吧!BOM。

17日评论
  • P
    Pankajpatil2400. 2016年8月31日

    这个计算器只处理整数,那么浮点数呢?

    像。 回复
  • K
    高昂觉林 2016年10月12日

    请帮助我!
    请发给我这个项目代码。
    因为我是学生,我必须报到这个项目。
    其次要求

    像。 回复
  • Tahsin Al Mahi 2016年12月19日

    编译错误代码时显示:

    Arduino: 1.5.7 (Windows 8), Board:“Arduino Uno”

    calculator_code.ino:2:20:致命错误:键盘:没有这样的文件或目录
    编译终止。

    这份报告将提供更多的信息
    “在编译期间显示详细输出”
    启用文件>首选项。

    因为我是Arduino的新手,我不知道该怎么做。请帮我。

    像。 回复