#include <Keypad.h>
#include <LiquidCrystal.h>
// Podłączenie pinów do klawiatury
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] = {27, 26, 25, 33};
byte colPins[COLS] = {32, 14, 13, 12};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// Podłączenie do wyświetlacza LCD
LiquidCrystal lcd(15, 16, 17, 18, 19, 21);
String inputString = ""; // String do przechowywania danych wprowadzanych z klawiatury
float val1, val2, result;
char operation;
void setup(){
lcd.begin(16, 2); // Inicjalizacja wyświetlacza LCD
lcd.print("Simple Calculator");
lcd.setCursor(0, 1);
lcd.print("Enter: ");
Serial.begin(9600); // Inicjalizacja komunikacji szeregowej
}
void loop(){
char key = keypad.getKey(); // Odczytanie wciśniętego klawisza
if (key){
if (key == 'C') { // Czyścimy wszystkie dane
inputString = "";
lcd.setCursor(7, 1);
lcd.print(" ");
} else if (key == '=') { // Wykonujemy obliczenia
if (inputString.indexOf('+') > 0) {
val1 = inputString.substring(0, inputString.indexOf('+')).toFloat();
val2 = inputString.substring(inputString.indexOf('+') + 1).toFloat();
result = val1 + val2;
lcd.setCursor(7, 1);
lcd.print(result);
} else if (inputString.indexOf('-') > 0) {
val1 = inputString.substring(0, inputString.indexOf('-')).toFloat();
val2 = inputString.substring(inputString.indexOf('-') + 1).toFloat();
result = val1 - val2;
lcd.setCursor(7, 1);
lcd.print(result);
} else if (inputString.indexOf('*') > 0) {
val1 = inputString.substring(0, inputString.indexOf('*')).toFloat();
val2 = inputString.substring(inputString.indexOf('*') + 1).toFloat();
result = val1 * val2;
lcd.setCursor(7, 1);
lcd.print(result);
} else if (inputString.indexOf('/') > 0) {
val1 = inputString.substring(0, inputString.indexOf('/')).toFloat();
val2 = inputString.substring(inputString.indexOf('/') + 1).toFloat();
if (val2 != 0) {
result = val1 / val2;
lcd.setCursor(7, 1);
lcd.print(result);
} else {
lcd.setCursor(0, 1);
lcd.print("Error: Divide by 0");
}
}
} else { // Dodajemy wciśnięty klawisz do ciągu znaków
inputString += key;
lcd.setCursor(7, 1);
lcd.print(inputString);
}
}
}