Keypad (dalam konteks arduino) sama halnya dengan keypad pada handphone lawas (tuts) yang terdiri dari setidaknya 12 tombol berupa angka 0 hingga 9 serta karakter * dan karakter #. Untuk menuliskan karakter huruf, maka tuts keypad harus ditekan beberapa kali hingga karakter yang diinginkan muncul.
String / text terdiri atas karakter-karakter penyusunnya, penggunaan keypad 3×4 (numerik) membutuhkan trik khusus dan terdapat bermacam-macam metode, dalam contoh ini menggunakan metode entry deret.
aturan pemakaian umum:
- Masing-masing tuts memiliki beberapa karakter, untuk memilih karakter maka tuts yang sama ditekan berulang-ulang hingga karakter yang diinginkan tampil.
- Jika tuts/tombol tidak ditekan selama 3 detik, maka karakter sebelumnya dimasukkan dalam memory dan sistem lanjut ke karakter berikutnya.
- Jika tuts yang ditekan berbeda dengan tuts sebelumnya, maka karakter terakhir akan dimasukkan dalam memory.
- tuts * berfungsi untuk menghapus karakter terakhir
- jika tuts * pada saat belum ada karakter yang dimasukkan, maka sistem akan kembali ke sistem normal (dalam contoh ini kembali ke keadaan awal).
- tuts # berfungsi seperti ‘enter’ untuk menyimpan string dan kembali ke sistem normal (dalam contoh ini kembali ke keadaan awal).
skema pemanfaatan keypad sebagai entry teks:

koding/sketch masukan keypad sebagai string / teks :
#define periodaKeypad 3000
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x3F, 16, 2);
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {11, 10, 9, 8};
byte colPins[COLS] = {7, 6, 5};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
char pad[11][11] = {
"0 ",
"1?!*#:=/+-",
"2AaBbCc",
"3DdEeFf",
"4GgHhIi",
"5JjKkLl",
"6MmNnOo",
"7PpQqRrSs",
"8TtUuVvWw",
"9XxYyZz",
};
byte padCounter;
char padChar;
bool padDitekan;
byte charCounter;
byte keySebelumnya;
char bufferKeypad[17];
char *bufferKeypadPtr;
long millisKeypad;
void setup() {
Serial.begin(9600);
Serial.println(F("Input string malalui keypad menggunakan arduino"));
Serial.println(F("https://www.project.semesin.com"));
Serial.println();
Wire.begin();
Wire.beginTransmission(0x3F);
if (Wire.endTransmission())
{
lcd = LiquidCrystal_I2C(0x27, 16, 2);
}
lcd.begin();
resetInput();
}
void loop() {
char key = keypad.getKey();
if (key) {
switch (key)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
millisKeypad = millis() + periodaKeypad;
if ((key == keySebelumnya) || (keySebelumnya == 0))
{
padChar = pad[key - '0'][charCounter];
keySebelumnya = key;
}
else if ((padDitekan) && (padCounter < sizeof(bufferKeypad) - 1))
{
*bufferKeypadPtr++ = padChar;
keySebelumnya = key;
charCounter = 0;
padCounter++;
padChar = pad[key - '0'][charCounter];
}
padDitekan = true;
lcd.setCursor(padCounter, 1);
lcd.print(padChar);
lcd.setCursor(padCounter, 1);
charCounter++;
if (!pad[key - '0'][charCounter])
{
charCounter = 0;
}
break;
case '*':
if (padCounter)
{
if (keySebelumnya)
{
keySebelumnya = 0;
}
lcd.setCursor(padCounter, 1);
lcd.print(' ');
charCounter = 0;
padCounter--;
bufferKeypadPtr--;
padChar = *bufferKeypadPtr;
lcd.setCursor(padCounter, 1);
}
else
{
resetInput();
}
break;
case '#':
if ((padDitekan) && (padCounter < sizeof(bufferKeypad) - 1))
{
*bufferKeypadPtr++ = padChar;
}
*bufferKeypadPtr = 0;
Serial.print("String input = ");
Serial.println(bufferKeypad);
lcd.clear();
lcd.noBlink();
lcd.setCursor(0, 0);
lcd.print("String input = ");
lcd.setCursor(0, 1);
lcd.print(bufferKeypad);
delay(3000);
resetInput();
break;
}
}
if ((padDitekan) && (padCounter < sizeof(bufferKeypad) - 1))
{
if (millisKeypad < millis())
{
*bufferKeypadPtr++ = padChar;
keySebelumnya = key;
charCounter = 0;
padCounter++;
padDitekan = false;
lcd.setCursor(padCounter, 1);
lcd.print(' ');
lcd.setCursor(padCounter, 1);
}
}
}
void resetInput()
{
bufferKeypadPtr = bufferKeypad;
charCounter = 0;
padCounter = 0;
keySebelumnya = 0;
padDitekan = false;
lcd.clear();
lcd.print("Masukkan string");
lcd.setCursor(padCounter, 1);
lcd.blink();
}
library entry teks melalui keypad berbasis arduino :
LiquidCrystal-I2C.zip
Keypad.zip