#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int w, h = 10;
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {23, 15, 3, 4}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {19, 18, 5, 2}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
String temp;
String inputString;
bool capslock;
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(w, h);
display.println("Type something: ");
display.display();
}
void loop() {
char key = keypad.getKey();
if (key != NO_KEY && key != 'A' && key != 'B' && key != 'C' && key != 'D' && key != '#' && key != '*') {
temp += key;
}
if (key == 'A'){
capslockButton();
display.clearDisplay();
display.setCursor(w, h);
if (capslock == true){
display.println("CAPS: ON");
}
else {
display.println("CAPS: OFF");
}
display.display();
delay(100);
}
if (key != NO_KEY && key == 'B') {
key = ' ';
inputString += key;
display.clearDisplay();
display.setCursor(w, h);
display.println(inputString);
display.display();
delay(100);
}
if (key != NO_KEY && key == 'C') {
if(inputString.length() > 0) {
int lastIndex = inputString.length() - 1;
inputString.remove(lastIndex);
display.clearDisplay();
display.setCursor(w, h);
display.println(inputString);
display.display();
}
delay(100);
}
if (key != NO_KEY && key == 'D') {
key = '\n';
inputString += key;
display.clearDisplay();
display.setCursor(w, h);
display.println(inputString);
display.display();
delay(100);
}
if (key != NO_KEY && key == '#'){
alphabet();
inputString += temp;
temp.remove(0, temp.length());
display.clearDisplay();
display.setTextSize(2);
display.setCursor(w, h);
display.println(inputString);
display.display();
delay(100);
}
}
void alphabet(){
if (temp == "11" && capslock == false){
temp = 'a';
}
if (temp == "11" && capslock == true){
temp = 'A';
}
if (temp == "111" && capslock == false){
temp = 'b';
}
if (temp == "111" && capslock == true){
temp = 'B';
}
if (temp == "1111" && capslock == false){
temp = 'c';
}
if (temp == "1111" && capslock == true){
temp = 'C';
}
if (temp == "22" && capslock == false){
temp = 'd';
}
if (temp == "22" && capslock == true){
temp = 'D';
}
if (temp == "222" && capslock == false){
temp = 'e';
}
if (temp == "222" && capslock == true){
temp = 'E';
}
if (temp == "2222" && capslock == false){
temp = 'f';
}
if (temp == "2222" && capslock == true){
temp = 'F';
}
if (temp == "33" && capslock == false){
temp = 'g';
}
if (temp == "33" && capslock == true){
temp = 'G';
}
if (temp == "333" && capslock == false){
temp = 'h';
}
if (temp == "333" && capslock == true){
temp = 'H';
}
if (temp == "3333" && capslock == false){
temp = 'i';
}
if (temp == "3333" && capslock == true){
temp = 'I';
}
if (temp == "44" && capslock == false){
temp = 'j';
}
if (temp == "44" && capslock == true){
temp = 'J';
}
if (temp == "444" && capslock == false){
temp = 'k';
}
if (temp == "444" && capslock == true){
temp = 'K';
}
if (temp == "4444" && capslock == false){
temp = 'l';
}
if (temp == "4444" && capslock == true){
temp = 'L';
}
if (temp == "55" && capslock == false){
temp = 'm';
}
if (temp == "55" && capslock == true){
temp = 'M';
}
if (temp == "555" && capslock == false){
temp = 'n';
}
if (temp == "555" && capslock == true){
temp = 'N';
}
if (temp == "5555" && capslock == false){
temp = 'o';
}
if (temp == "5555" && capslock == true){
temp = 'O';
}
if (temp == "66" && capslock == false){
temp = 'p';
}
if (temp == "66" && capslock == true){
temp = 'P';
}
if (temp == "666" && capslock == false){
temp = 'q';
}
if (temp == "666" && capslock == true){
temp = 'Q';
}
if (temp == "6666" && capslock == false){
temp = 'r';
}
if (temp == "6666" && capslock == true){
temp = 'R';
}
if (temp == "66666" && capslock == false){
temp = 's';
}
if (temp == "66666" && capslock == true){
temp = 'S';
}
if (temp == "77" && capslock == false){
temp = 't';
}
if (temp == "77" && capslock == true){
temp = 'T';
}
if (temp == "777" && capslock == false){
temp = 'u';
}
if (temp == "777" && capslock == true){
temp = 'U';
}
if (temp == "7777" && capslock == false){
temp = 'v';
}
if (temp == "7777" && capslock == true){
temp = 'V';
}
if (temp == "88" && capslock == false){
temp = 'w';
}
if (temp == "88" && capslock == true){
temp = 'W';
}
if (temp == "888" && capslock == false){
temp = 'x';
}
if (temp == "888" && capslock == true){
temp = 'X';
}
if (temp == "8888" && capslock == false){
temp = 'y';
}
if (temp == "8888" && capslock == true){
temp = 'Y';
}
if (temp == "88888" && capslock == false){
temp = 'z';
}
if (temp == "88888" && capslock == true){
temp = 'Z';
}
if (temp == "99"){
temp = '#';
}
}
void capslockButton() {
capslock = !capslock;
}