arduino制作简易的整数计算器
在学习了arduino的一些基础实验过后,我们将利用arduino与4*4键盘制作一个简易的整数加减乘除计算器。
我们将做什么:
我们将学到什么:
- 4*4键盘的使用方法
- 数据类型的转化
我们需要什么:
- 4*4键盘
- arduino uno
- arduino IDE
第一步:4*4键盘的功能实现
在此项目中,4*4键盘只需要实现输入数据的功能,因此,只需要当按键按下后将按键所对应的数字以字符串的方式显示出来即可,以方便之后的数据切割工作。
键盘可通过添加keypad库使之后的代码编写更加方便。具体程序如下所示:
#include <Key.h>
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', 'C'},
{'*', '0', '#', '/'}
}; //生成数组keys
byte rowPins[ROWS] = {2, 3, 4, 5};
byte colPins[COLS] = {6, 7, 8, 9}; //定义引脚号
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //设置初始化
void setup() {
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey(); //由键盘输入键值
if (key != NO_KEY) { //当键盘输入不为空时
input = input + String(key);
}
Serial.print(input);
}
此段程序最后输出的input就是一串完整的输入而不是每次输入的单个元素。当然keys可根据你自身的需求或将其扩展或改变其中的元素等。
第二步:数据的处理
在这一步中,我们需要让arduino知道我们输入的是加减法抑或是乘除法,以及第一个数是什么,第二个数是什么,因此,在此步骤中,我们需要做的是数据的分割。具体代码如下所示:
length = String(input).length();
for (int i = (1); i <= (length); i = i + (1))
{
a = String(input).charAt(i);
if (a == '+' || a == '-' || a == '*' || a == '/') {
Serial.print("the input is:");
Serial.println(input);
Serial.print("the symbol is:");
Serial.println(a);
sp = i + 1;
Serial.print("the position of symbol:");
Serial.println(sp);
frontn = String(input).substring(0, i);
//Serial.println(frontn);
x = String(frontn).toInt();
Serial.print("the first number is:");
Serial.println(x);
aftn = String(input).substring(i + 1, length);
y = String(aftn).toInt();
Serial.print("the second number is:");
Serial.println(y);
}
}
如代码所示,我们需要先知道此次输入有多少位,当我们获得此数据后,我们就能依据长度,从第一位开始查找他的符号,来确定此算式的属性。确定完符号后,符号位置也将显示出来,因此数据的分割将以符号的位置为依据进行切割。
第三步:加减法,乘除法功能的实现
到现在为止,数据已经划分完毕,符号也已经确定,因此,我们只需要将他们依据符号进行相应的计算即可,此处采用switch…case…语句进行判断。具体代码如下所示:
switch (a) {
case '+':
answer = x + y;
Serial.print("the answer is:");
Serial.println(answer);
break;
case '-':
answer = x - y;
Serial.print("the answer is:");
Serial.println(answer);
break;
case '*':
answer = x * y;
Serial.print("the answer is:");
Serial.println(answer);
break;
case '/':
answer = x / y;
Serial.print("the answer is:");
Serial.println(answer);
break;
}
第四步:数据的清除
当我们计算完一个式子后,相应的变量中依旧保留着此次的结果,这是我们所不期望的,因为当下一次计算时,可能会导致输出值依旧为上一个式子的值,因此,在此,我将C设置为清除,来抹去所有变量的值。具体代码如下所示:
if (key == 'C') {
Serial.println();
input = "";
String frontn = "";
String aftn = "";
int x = 0;
int y = 0;
int answer = 0;
int sp = 0;
}
最后将上述所有的代码片段组合在一起后就能得到一个能进行简单计算的arduino计算器了,其运行结果将如下所示,其中#为判断结束的符号,每计算完一个算式后需要按下C清除数据。