#include #include #include LiquidCrystal lcd(13, 12, 11, 10, 9, 8); long first = 0; long second = 0; double total = 0; char customKey; 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] = {7,6,5,4}; //connect to the row pinouts of the keypad byte colPins[COLS] = {3,2,1,0}; //connect to the column pinouts of the keypad //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS); void setup() { lcd.begin(16, 2); for(int i=0;i<=3;i++); lcd.setCursor(0,0); lcd.print("CALCULATOR"); lcd.setCursor(0,1); lcd.print("GREATECH"); delay(2500); lcd.clear(); lcd.setCursor(0, 0); } void loop() { customKey = customKeypad.getKey(); switch(customKey) { case '0' ... '9': lcd.setCursor(0,0); first = first * 10 + (customKey - '0'); lcd.print(first); break; case '+': first = (total != 0 ? total : first); lcd.setCursor(0,1); lcd.print("+"); second = SecondNumber(); total = first + second; lcd.setCursor(0,3); lcd.print(total); first = 0, second = 0; break; case '-': first = (total != 0 ? total : first); lcd.setCursor(0,1); lcd.print("-"); second = SecondNumber(); total = first - second; lcd.setCursor(0,3); lcd.print(total); first = 0, second = 0; break; case '*': first = (total != 0 ? total : first); lcd.setCursor(0,1); lcd.print("*"); second = SecondNumber(); total = first * second; lcd.setCursor(0,3); lcd.print(total); first = 0, second = 0; break; case '/': first = (total != 0 ? total : first); lcd.setCursor(0,1); lcd.print("/"); second = SecondNumber(); lcd.setCursor(0,3); second == 0 ? lcd.print("Invalid") : total = (float)first / (float)second; lcd.print(total); first = 0, second = 0; break; case 'C': total = 0; lcd.clear(); break; } } long SecondNumber() { while( 1 ) { customKey = customKeypad.getKey(); if(customKey >= '0' && customKey <= '9') { second = second * 10 + (customKey - '0'); lcd.setCursor(0,2); lcd.print(second); } if(customKey == '=') break; } return second; }