#define PinA 2
volatile long count = 0
void setup()
{
pinMode(PinA,INPUT)
attachInterrupt(0,blinkA,FALLING)
Serial.begin(9600)
}
void loop()
{
Serial.println(count)
}
void blinkA()
{
count ++
arduino怎么进行ln计算第一步: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清除数据。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)