Modul elektronika I/O Expansion Boardyang merupakan perpaduan layar tampilan LCD 16x2 karakter (LCD Character Display) dan 6 (enam) tombol tekan /  momentary tactile push button ini merupakan Arduino Shield yang dapat dipasangkan langsung di atas ArduinoUno / Mega / Leonardo dan varian lainnya yang kompatibel dengan standard form factorArduino.



Terdapat 5 tombol navigasi (SELECT, LEFT, UP, DOWN, RIGHT) yang dibaca melalui 1 (satu) pin analog untuk menghemat penggunaan pin digital I/O dimana tombol yang ditekan dapat dibaca oleh kanal ADC tunggal (pin A0), plus satu tombol RESET.

Pin Digital #4 s.d #9 pada Arduino digunakan untuk mengendalikan tampilan LCD pada moda paralel 4-bit, HD44780 controller dengan rincian: D4-D7 untuk transmisi perintah/data, D8 untuk pin RS, D9 untuk enable pin (referensi selengkapnya dapat dilihat di datasheet HD44780).

Untuk mengatur tingkat kontras pada LCD sudah terpasang potensiometer yang dapat diputar sesuai dengan kebutuhan. Lampu latar (backlight) dari LCD ini juga dapat dikendalikan nyala/tidaknya oleh piranti lunak lewat pin #10 (backlight activation control feature).

Pin-pin yang tidak digunakan diekspansi (berupa PCB pad) untuk pemakaian lebih lanjut. Juga tersedia pin header ICSP 6-pin untuk untuk memudahkan koneksi dengan programmerISP eksternal.

Contoh Arduino Sketch menggunakan pustaka LiquidCrystalstandar (sudah tersedia di paket piranti lunak Arduino IDE):
//Sample using LiquidCrystal library
#include <LiquidCrystal.h>

/*******************************************************

This program will test the LCD panel and the buttons
Mark Bramwell, July 2010

********************************************************/

// select the pins used on the LCD panel
LiquidCrystallcd(8, 9, 4, 5, 6, 7);

// define some values used by the panel and buttons
intlcd_key = 0;
intadc_key_in = 0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// read the buttons
intread_LCD_buttons()
{
 adc_key_in = analogRead(0); // read the value from the sensor
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
 // we add approx 50 to those values and check to see if we are close
 if(adc_key_in > 1000) returnbtnNONE; // We make this the 1st option for speed reasons since it will be the most likely result
 // For V1.1 us this threshold
 if(adc_key_in < 50) returnbtnRIGHT;
 if(adc_key_in < 250) returnbtnUP;
 if(adc_key_in < 450) returnbtnDOWN;
 if(adc_key_in < 650) returnbtnLEFT;
 if(adc_key_in < 850) returnbtnSELECT;

 // For V1.0 comment the other threshold and use the one below:
/*
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
*/


 returnbtnNONE; // when all others fail, return this...
}

voidsetup()
{
 lcd.begin(16, 2); // start the library
 lcd.setCursor(0,0);
 lcd.print("Push the buttons"); // print a simple message
}
 
voidloop()
{
 lcd.setCursor(9,1); // move cursor to second line "1" and 9 spaces over
 lcd.print(millis()/1000); // display seconds elapsed since power-up


 lcd.setCursor(0,1); // move to the begining of the second line
 lcd_key = read_LCD_buttons();  // read the buttons

 switch(lcd_key) // depending on which button was pushed, we perform an action
 {
   casebtnRIGHT:
     {
     lcd.print("RIGHT ");
     break;
     }
   casebtnLEFT:
     {
     lcd.print("LEFT ");
     break;
     }
   casebtnUP:
     {
     lcd.print("UP ");
     break;
     }
   casebtnDOWN:
     {
     lcd.print("DOWN ");
     break;
     }
   casebtnSELECT:
     {
     lcd.print("SELECT");
     break;
     }
     casebtnNONE:
     {
     lcd.print("NONE ");
     break;
     }
 }
}