#include <Arduino.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <Keypad.h>
#define TFT_DC 2
#define TFT_CS 15
Adafruit_ILI9341 tft(TFT_CS, TFT_DC);
const byte ROWS=4, COLS=4;
char keys[ROWS][COLS] = {
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','*'},
{'C','0','=','/'}
};
byte rowPins[ROWS] = {13,12,14,27};
byte colPins[COLS] = {26,25,33,32};
Keypad keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
long a = 0, b = 0;
char op = 0;
bool second = false;
void setup() {
tft.begin();
tft.setRotation(1);
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(3);
tft.setCursor(0, 0);
}
void loop() {
char k = keypad.getKey();
if (!k) return;
if (k >= '0' && k <= '9') {
if (!second) {
a = a*10 + (k - '0');
} else {
b = b*10 + (k - '0');
}
tft.print(k);
} else if (k=='+'||k=='-'||k=='*'||k=='/') {
op = k;
second = true;
tft.print(k);
} else if (k == '=') {
long r = 0;
if (op=='+') r = a + b;
else if (op=='-') r = a - b;
else if (op=='*') r = a * b;
else if (op=='/' && b!=0) r = a / b;
tft.println();
tft.print("= "); tft.print(r);
delay(2000);
// reset
a = b = 0; op = 0; second = false;
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(0, 0);
} else if (k == 'C') {
a = b = 0; op = 0; second = false;
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(0, 0);
}
}