Skip to content Skip to sidebar Skip to footer

Antarmuka Menu dan submenu pada LCD dan Tombol menggunakan Arduino

Dalam perancangan sistem mikrokontroller yang cukup kompleks yang ditampilkan pada display LCD (Liquid Crystal Display) biasanya digunakan menu dan submenu. Menu menampilkan bagian utama dari fungsi yang dibangun dan submenu menampilkan isi dari menu yang dipilih. Tombol digunakan sebagai selektor untuk menu dan sub menu.  Tutorial kali ini LCD dan tombol digunakan sebagai penampil dan input sedangkan arduino adalah sebagai Pemroses data.

baca juga : 10 Project Arduino paling populer

Bahan yang dibutuhkan :
1. Arduino UNO
2. LCD 2004
3. Tombol Push Button
4. Laptop atau PC

Skema rangkaian dpat dilihat pada gambar berikut :

Skema rangkaian
Pada skematik rangkaian diatas terdapat 4 buah tombol push button yang terhubung dengan Ground dan pin analog arduino. Dengan demikian maka tombol akan menghasilkan logika 0 hanya jika tombol tersebut ditekan. Jika tombol tidak ditekan maka tidak akan menghasilkan logika apapun, maka ditambahkan Internal Pullup Resistor pada program agar dapat menghasilkan logika 1 apabila tidak ditekan.



Tombol tersebut terdiri dari tombol menu,  up, down, dan OK.  Fungsi masing-masing tombol tersebut adalah :
  1. Menu :  Tombol untuk masuk ke menu dari halaman utama
  2. UP       :  Tombol untuk menaikkan kursor
  3. Down : Tombol untuk Menurunkan kursor
  4. OK       : Tombol untuk memilih menu
Tombol menu juga bisa digunakan untuk kembali (back).

Rangkaian diatas menggunakan LCD 2004 dengan modul I2C dan Arduino UNO, untuk mengubah konfigurasi tinggal disesuaikan pada program. Listing program dapat dilihat  dibawah :


////////////////////////andalanelektro.id////////////////////////////////////////
#include <LiquidCrystal.h>
const int rs = 12,rw = 1, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
int Menu,Up,Down,Ok;
int lockMenu=0,lockUp=0,lockDown=0,lockOk=0;
int dis,sub=0,mode=0;
LiquidCrystal lcd(rs, rw, en, d4, d5, d6, d7);
void setup()
{
  pinMode(A0, INPUT_PULLUP);// mengaktifkan resistor internal
  pinMode(A1, INPUT_PULLUP);
  pinMode(A2, INPUT_PULLUP);
  pinMode(A3, INPUT_PULLUP);
  
  lcd.begin(20, 4);
  
  lcd.setCursor(0,0); lcd.print("    Tutorial Menu   ");
  lcd.setCursor(0,1); lcd.print("         &          "); 
  lcd.setCursor(0,2); lcd.print("      Sub Menu      "); 
  lcd.setCursor(0,3); lcd.print(" andalanelektro.id  "); 
}
void loop() 
{
  Menu= digitalRead(A0);
  Up=   digitalRead(A1);
  Down= digitalRead(A2);
  Ok=   digitalRead(A3);
  tampil();
}
void tampil()
{
  if (Menu==0 && lockMenu==0){lockMenu=1;} if (Menu!=0 && lockMenu==1){lockMenu=0; dis=1;}
  if (Menu==0 && lockMenu==0){lockMenu=1;} if (Menu!=0 && lockMenu==1 && dis>1){lcd.clear(); lockMenu=0; dis=1;}
  
  if (dis==1)
  {
  
      // tampilan awal//
      lcd.setCursor(1,0); lcd.print("Menu 1             ");
      lcd.setCursor(1,1); lcd.print("Menu 2             "); 
      lcd.setCursor(1,2); lcd.print("Menu 3             "); 
      lcd.setCursor(1,3); lcd.print("Menu 4             "); 
      
      if (Down==0 && lockDown==0){lockDown=1;}  //turunkan Cursor ">"
      if (Down!=0 && lockDown==1){lcd.clear(); lockDown=0; mode++;} 
      
      if (Up==0 && lockUp==0){lockUp=1;}   //naikkan Cursor ">"
      if (Up!=0 && lockUp==1){lcd.clear(); lockUp=0; mode--;}
       switch (mode)
      {
        case 0 : lcd.setCursor(0,0); lcd.print(">"); break;
        case 1 : lcd.setCursor(0,1); lcd.print(">"); break;
        case 2 : lcd.setCursor(0,2); lcd.print(">"); break;
        case 3 : lcd.setCursor(0,3); lcd.print(">"); break;
      }  
      if (Ok==0 && lockOk==0){lockOk=1; mode=0;}
      if (Ok!=0 && lockOk==1 && mode==0){lockOk=0; dis=2; lcd.clear(); } // pilih menu 1
      if (Ok!=0 && lockOk==1 && mode==1){lockOk=0; dis=3; lcd.clear(); } // pilih menu 2
      if (Ok!=0 && lockOk==1 && mode==2){lockOk=0; dis=4; lcd.clear(); } // pilih menu 3
      if (Ok!=0 && lockOk==1 && mode==3){lockOk=0; dis=5; lcd.clear(); } // pilih menu 4
      
      if (mode>3 || mode<0) mode=0;
     
  }
  if (dis==2)
  {
    if (sub==0)
    {
      lcd.setCursor(0,0); lcd.print("Menu 1             ");
      lcd.setCursor(1,1); lcd.print("Sub Menu 1        "); 
      lcd.setCursor(1,2); lcd.print("Sub Menu 2        "); 
      lcd.setCursor(1,3); lcd.print("Sub Menu 3        "); 
      if (Down==0 && lockDown==0){lockDown=1;}  //turunkan Cursor ">"
      if (Down!=0 && lockDown==1){lcd.clear(); lockDown=0; mode++;} 
      
      if (Up==0 && lockUp==0){lockUp=1;}   //naikkan Cursor ">"
      if (Up!=0 && lockUp==1){lcd.clear(); lockUp=0; mode--;}
      if (Ok==0 && lockOk==0){lockOk=1; mode=0;}
      if (Ok!=0 && lockOk==1 && mode==0){lockOk=0; lcd.clear(); sub=1; } // Isi submenu 1
      if (Ok!=0 && lockOk==1 && mode==1){lockOk=0; lcd.clear(); sub=2; } // Isi submenu 2
      if (Ok!=0 && lockOk==1 && mode==2){lockOk=0; lcd.clear(); sub=3; } // Isi submenu 3

      if (mode>2 || mode<0) mode=0;
    {
        case 0 : lcd.setCursor(0,1); lcd.print(">"); break;
        case 1 : lcd.setCursor(0,2); lcd.print(">"); break;
        case 2 : lcd.setCursor(0,3); lcd.print(">"); break;
      }  
    }
  }
  
  if (dis==3)
  {
    lcd.setCursor(0,0); lcd.print("Menu 2             ");
    lcd.setCursor(1,1); lcd.print("Sub Menu 1        "); 
    lcd.setCursor(1,2); lcd.print("Sub Menu 2        "); 
    lcd.setCursor(1,3); lcd.print("Sub Menu 3        "); 
  }
    
  if (dis==4)
  {
    lcd.setCursor(0,0); lcd.print("Menu 3             ");
    lcd.setCursor(1,1); lcd.print("Sub Menu 1        "); 
    lcd.setCursor(1,2); lcd.print("Sub Menu 2        "); 
    lcd.setCursor(1,3); lcd.print("Sub Menu 3        "); 
  }  
  
  if (dis==5)
  {
    lcd.setCursor(0,0); lcd.print("Menu 4             ");
    lcd.setCursor(1,1); lcd.print("Sub Menu 1        "); 
    lcd.setCursor(1,2); lcd.print("Sub Menu 2        "); 
    lcd.setCursor(1,3); lcd.print("Sub Menu 3        "); 
  }
  //isi menu1////
  if (dis==2 && sub==1){lcd.setCursor(0,1); lcd.print(" Isi Sub Menu 1:::");}
  if (dis==2 && sub==2){lcd.setCursor(0,1); lcd.print(" Isi Sub Menu 2::");}
  if (dis==2 && sub==3){lcd.setCursor(0,1); lcd.print(" Isi Sub Menu 3:");}
  }
////////////////////////andalanelektro.id////////////////////////////////////////


Setelah berhasil diupload maka tampilan LCD akan seperti ini :

Tampilan awal menu dan sub menu

Jika tombol Menu ditekan

Memilih menu satu dengan OK

Memilih Submenu dengan OK

Pada listing program diatas, yang diisi submenu hanyalah Menu 1, untuk menu lain silahkan ditambahkan sesuai kebutuhan.