首页 > 解决方案 > Arduino - 基于 Arduino 的数学计算器的优化?

问题描述

如何优化我的代码?

#include <Keypad.h>

const byte ROWS = 4;
const byte COLM = 4;

char keys[ROWS][COLM] =
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {13, 12, 11, 10};
byte colmPins[COLM] = {9, 8, 7, 6};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colmPins, ROWS, COLM);

int arrayj[2];
int i;

long result;

void setup ()
{
  Serial.begin(9600); 
}

void loop ()
{
  char customKey = keypad.getKey();

  if (customKey != NO_KEY && i <= 1)
  {
    arrayj[i] = (translate(customKey));
    Serial.println(arrayj[i]);
    i++;
  }
}

int translate (int x) {
  int y = x - '0';
  return y;
}

int addition(int x, int y) 
{
  result = x + y
  return result;
}

到目前为止,它可以存储来自键盘的两个值,但想法是加、减、乘和除;有没有人对这个项目有任何见解。

感谢任何帮助表示赞赏!:)

标签: c++

解决方案


好的,所以您的代码可以通过多种方式进行优化。对已经内置于 C++ 的运算符使用方法并不是非常理想的。此外,与返回整数的方法相比,返回 long、double 或 float 会更好。

这是您的优化代码

#include <Keypad.h>

const byte ROWS = 4;
const byte COLM = 4;

char keys[ROWS][COLM] =
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {13, 12, 11, 10};
byte colmPins[COLM] = {9, 8, 7, 6};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colmPins, ROWS, COLM);

int num_array[2];
int iteration;

void setup ()
{
  Serial.begin(9600); 
}

void loop ()
{
  char customKey = keypad.getKey();

  if (customKey != NO_KEY && iteration <= 1)
  {
    num_array[iteration] = (translate(customKey));
    Serial.println(num_array[iteration]);
    iteration ++;
  }
}

int translate (int x) 
{
  return x - '0';
}

变化:

我返回了这些值,而不是创建一个全新的变量来存储方法的结果。我还更改了一些变量名称以使它们更易于维护。


推荐阅读