#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Largura da tela OLED em pixels
#define SCREEN_HEIGHT 64 // Altura da tela OLED em pixels
#define OLED_RESET -1 // Reset do display não conectado ao Arduino
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#include <Keypad.h>
const byte ROWS = 4; // Quatro linhas
const byte COLS = 4; // Quatro colunas
char keys[ROWS][COLS] = {
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','*'},
{'C','0','=','/'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; // Conecta a linha do teclado ao seguinte pinos do Arduino.
byte colPins[COLS] = {9, 8, 7, 6}; // Conecta a coluna do teclado ao seguinte pinos do Arduino.
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
String inputString = "";
float num1, num2;
char op;
bool calculating = false;
void setup() {
// Inicializa o display OLED
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("Erro ao iniciar o display OLED"));
for(;;);
}
display.display();
delay(2000); // Espera 2 segundos antes de iniciar
display.clearDisplay();
display.setTextSize(1); // Tamanho do texto
display.setTextColor(SSD1306_WHITE); // Cor do texto
display.setCursor(0,0); // Inicializa o cursor na posição (0,0)
display.println("Calculadora"); // Título
display.display();
delay(2000); // Espera 2 segundos antes de continuar
}
void loop() {
char key = keypad.getKey();
if (key != NO_KEY) {
if (key == 'C') {
inputString = ""; // Limpa a string de entrada
display.clearDisplay();
display.setCursor(0,0);
display.println("Calculadora");
display.display();
calculating = false;
} else if (key == '=') {
if (inputString.length() > 0) {
num2 = inputString.toFloat();
float result;
switch (op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
}
display.clearDisplay();
display.setCursor(0,0);
display.print(num1);
display.print(" ");
display.print(op);
display.print(" ");
display.print(num2);
display.print(" = ");
display.print(result);
display.display();
inputString = ""; // Limpa a string de entrada
calculating = false;
}
} else {
if (!calculating) {
num1 = inputString.toFloat();
inputString = ""; // Limpa a string de entrada
calculating = true;
}
op = key;
}
}
display.clearDisplay();
display.setCursor(0,0);
display.println("Calculadora:");
display.setCursor(0,10);
display.println(inputString);
display.display();
}