#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Endereço I2C e dimensões do display
const byte ROWS = 4;
const byte COLS = 3;
char Keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'^', '0', '#'}
};
byte rowPins[ROWS] = {18, 5, 17, 16}; // Linhas do teclado
byte colPins[COLS] = {4, 0, 15}; // Colunas do teclado (evitando GPIO 2)
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) {
Serial.print("Tecla pressionada: ");
Serial.println(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 == '#') { // Tecla de calcular
float resultado = calcularResultado();
lcd.clear();
lcd.print("Resultado:");
lcd.setCursor(0, 1);
lcd.print(resultado);
delay(2000);
lcd.clear();
Numero1 = "";
Numero2 = "";
primeiroNumero = true;
}
else if (key == '^') { // Usei a tecla '^' como "limpar"
lcd.clear();
Numero1 = "";
Numero2 = "";
primeiroNumero = true;
}
else { // Teclas numéricas
if (primeiroNumero) {
Numero1 += key;
lcd.clear();
lcd.print(Numero1);
} else {
Numero2 += key;
lcd.clear();
lcd.print(Numero1);
lcd.print(operacion);
lcd.print(Numero2);
}
}
}
}
// Função para calcular o resultado
float calcularResultado() {
float num1 = Numero1.toFloat();
float num2 = Numero2.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");
delay(2000);
lcd.clear();
return 0; // Retorna 0 em caso de erro
}
break;
case '^':
resultado = pow(num1, num2);
break;
}
return resultado;
}