#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
const byte ROWS = 4; // Define o número de linhas e colunas do teclado
const byte COLS = 4;
char keys[ROWS][COLS] = { // Define a disposição das teclas
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','*'},
{'C','0','=','/'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; // Define os pinos para as linhas e colunas do teclado
byte colPins[COLS] = {7, 6, 5, 4};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
String inputString = ""; // Variável para armazenar a entrada do teclado
float num1 = 0;
float num2 = 0;
char op;
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Inicializa o display OLED
display.clearDisplay(); // Limpa o display para garantir que esteja vazio
display.display(); // Exibe as mudanças no display
delay(2000);
}
void loop() {
char key = keypad.getKey(); // Obtém a tecla pressionada
if (key != NO_KEY) { // Se uma tecla for pressionada
Serial.println("Tecla pressionada: " + String(key)); // Depuração serial
if (key == 'C') { // Limpa a entrada se 'C' for pressionado
inputString = "";
} else if (key == '=') { // Calcula o resultado quando '=' é pressionado
num2 = inputString.toFloat();
float result = 0;
switch (op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
result = 0; // Tratar divisão por zero
}
break;
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("Resultado: ");
display.print(result);
display.display(); // Exibe as mudanças no display
inputString = "";
} else if (key == '+' || key == '-' || key == '*' || key == '/') { // Salva o operador
num1 = inputString.toFloat();
op = key;
inputString = "";
} else {
inputString += key; // Concatena os números e operadores
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.print("Entrada: ");
display.print(inputString);
display.display(); // Exibe as mudanças no display
}
delay(50); // Pequeno atraso para evitar debounce do teclado
}
}