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