#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
int count = 0, column = 0, row = 0;
int gap = 0;
char keys[ROWS][COLS] = {
{'1','2','3', '+'},
{'4','5','6', '-'},
{'7','8','9', '*'},
{'E','0','=', '/'}
};
char temp[6];
char output;
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 7, 8, 9}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char keypadText(char input){
switch(input){
case '1':
if(count==1){
return '1';
}
else if(count==2){
return 'A';
}
else if(count==3){
return 'B';
}
else if(count==4){
return 'C';
}
break;
case '2':
if(count==1){
return '2';
}
else if(count==2){
return 'D';
}
else if(count==3){
return 'E';
}
else if(count==4){
return 'F';
}
break;
case '3':
if(count==1){
return '3';
}
else if(count==2){
return 'G';
}
else if(count==3){
return 'H';
}
else if(count==4){
return 'I';
}
break;
case '4':
if(count==1){
return '4';
}
else if(count==2){
return 'J';
}
else if(count==3){
return 'K';
}
else if(count==4){
return 'L';
}
break;
case '5':
if(count==1){
return '5';
}
else if(count==2){
return 'M';
}
else if(count==3){
return 'N';
}
else if(count==4){
return 'O';
}
break;
case '6':
if(count==1){
return '6';
}
else if(count==2){
return 'P';
}
else if(count==3){
return 'Q';
}
else if(count==4){
return 'R';
}
break;
case '7':
if(count==1){
return '7';
}
else if(count==2){
return 'S';
}
else if(count==3){
return 'T';
}
else if(count==4){
return 'U';
}
break;
case '8':
if(count==1){
return '8';
}
else if(count==2){
return 'V';
}
else if(count==3){
return 'W';
}
else if(count==4){
return 'X';
}
break;
case '9':
if(count==1){
return '9';
}
else if(count==2){
return 'Y';
}
else if(count==3){
return 'Z';
}
break;
case '0':
if(count==1){
return '0';
}
else if(count==2){
return ' ';
}
else{
return '0';
}
break;
case 'E':
if(count!=0){
return 'E';
}
break;
case '=':
if(count!=0){
return '=';
}
break;
case '+':
if(count!=0){
return '+';
}
break;
case '-':
if(count!=0){
return '-';
}
break;
case '*':
if(count!=0){
return '*';
}
break;
case '/':
if(count!=0){
return '/';
}
break;
}
}
void setup() {
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
}
void loop(){
char key = keypad.getKey();
char nextKey;
if (key != NO_KEY){
temp[count] = key;
count++;
gap = 0;
for(int i = count; i > 0; i--){
if(temp[i-1] == key){
output = keypadText(key);
}
}
}
else if(key == NO_KEY){
gap++;
}
if(gap >= 8 && count != 0){
count = 0;
lcd.print(output);
column++;
if(column>16){
row++;
column = 0;
}
lcd.setCursor(column, row);
}
delay(75);
}