#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
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}; // Піни для підключення рядків клавіатури
byte colPins[COLS] = {5, 4, 3, 2}; // Піни для підключення стовпців клавіатури
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адреса і розмір LCD-дисплея (16 символів на 2 рядки)
String inputString = ""; // Змінна для збереження введених символів
double num1 = 0, num2 = 0; // Змінні для збереження першого та другого числа
char operation = '\0'; // Змінна для збереження операції (+, -, *, /)
void setup() {
lcd.begin(16, 2); // Ініціалізація LCD-дисплея
lcd.setCursor(0, 0);
lcd.print("Arduino Calculator");
lcd.setCursor(0, 1);
lcd.print("Enter an equation:");
delay(2000);
lcd.clear();
}
void loop() {
char key = keypad.getKey(); // Отримання натиснутої клавіші
if (key) {
if (key == 'C') { // Очистити введені дані
inputString = "";
num1 = num2 = 0;
operation = '\0';
lcd.clear();
} else if (key == '=') { // Обчислити результат
if (inputString.length() > 0 && operation != '\0') {
num2 = inputString.toDouble();
double result;
switch (operation) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
}
lcd.setCursor(0, 0);
lcd.print(inputString + " =");
lcd.setCursor(0, 1);
lcd.print(result);
}
inputString = "";
num1 = num2 = 0;
operation = '\0';
delay(2000);
lcd.clear();
} else if (key == '+' || key == '-' || key == '*' || key == '/') {
if (inputString.length() > 0 && operation == '\0') {
num1 = inputString.toDouble();
operation = key;
inputString = "";
lcd.setCursor(0, 0);
lcd.print(num1);
lcd.setCursor(0, 1);
lcd.print(key);
}
} else {
inputString += key;
lcd.print(key);
}
}
}