#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const byte ROWS = 4;
const byte COLS = 4;
char Keys[ROWS][COLS] =
{
{'1', '2', '3', '+'},
{'4', '5', '6', '-'},
{'7', '8', '9', '*'},
{'^', '0', '#', '/'}
};
byte rowPins[ROWS] = {18, 5, 17, 16};
byte colPins[COLS] = {4, 0, 2, 15};
Keypad teclado = Keypad(makeKeymap(Keys), rowPins, colPins, ROWS, COLS);
String Numero1 = "";
String Numero2 = "";
char operacion;
boolean primeiroNumero = true;
void setup ()
{
Serial.begin (9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Calculadora");
delay(2000);
lcd.clear();
}
void loop ()
{
char key = teclado.getKey();
if (key)
{
if (key == '+' || key == '-' || key == '*' || key == '/' || key == '^')
{
if (Numero1.length() > 0)
{
operacion = key;
primeiroNumero = false;
lcd.clear();
lcd.print(Numero1);
lcd.print(operacion);
}
}
else if (key == '#')
{
float resultado = calcularResultado();
lcd.clear();
lcd.print ("Resultado:");
lcd.setCursor (0,1);
lcd.print(resultado);
delay(500);
lcd.clear();
Numero1 = "";
Numero2 = "";
primeiroNumero = true;
}
else if (key == '*')
{
lcd.clear();
Numero1 = "";
Numero2 = "";
primeiroNumero = true;
}
else
{
if (primeiroNumero)
{
Numero1 += key;
lcd.clear();
lcd.print(Numero1);
}
else
{
Numero2 += key;
lcd.clear();
lcd.print(Numero1);
lcd.print(operacion);
lcd.print(Numero2);
}
}
}
}
//funcao do codigo
float calcularResultado()
{
float num1 = Numero1.toFloat();
float num2 = Numero1.toFloat();
float resultado = 0.0;
switch (operacion)
{
case '+':
resultado = num1 + num2;
break;
case '-':
resultado = num1 - num2;
break;
case '*':
resultado = num1 * num2;
break;
case '/':
if(num2 != 0)
{
resultado = num1 / num2;
}
else
{
lcd.clear();
lcd.print("ERRO DIV POR 0");
}
break;
case '^':
resultado = pow(num1, num2);
break;
}
return resultado;
}