#include <U8g2lib.h>
#include <Wire.h>
#include <Keypad.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ A4, /* data=*/ A5, /* reset=*/ U8X8_PIN_NONE);
// Keypad uchun konfiguratsiya
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','+'},
{'4','5','6','-'},
{'7','8','9','*'},
{'C','0','=','/'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Row 1 to 4
byte colPins[COLS] = {5, 4, 3, 2}; // Column 1 to 4
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String inputString = ""; // Kiritilgan raqamlarni saqlash uchun
float result = 0; // Natijani saqlash uchun
void setup() {
u8g2.begin();
u8g2.enableUTF8Print();
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.drawStr(0, 20, "Calculator");
u8g2.sendBuffer();
delay(2000); // kichik intizor
}
void loop() {
char key = keypad.getKey();
if (key) {
if (key == 'C') {
inputString = "";
result = 0;
} else if (key == '=') {
result = evaluateExpression(inputString);
inputString = String(result);
} else {
inputString += key;
}
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.drawStr(0, 20, inputString.c_str());
u8g2.sendBuffer();
}
}
float evaluateExpression(String expression) {
int length = expression.length() + 1;
char charArray[length];
expression.toCharArray(charArray, length);
charArray[length - 1] = '\0';
return atof(charArray);
}