반응형

【 아두이노기초】 #20 LCD쉴드 이용하기II(keyPAD-키패드)


 LCD 액정 디스플레이를 이용하기 위해서는 다소 복잡한 선 연결이 필요했다. 

(앞 강좌 참조: http://rasino.tistory.com/128  or  http://rasino.tistory.com/132 )

하지만 아두이노 우노 보드 위에 삽입되는 LCD 쉴드를 이용하면 간편히 연결되어 LCD 디스플레이 하기가 훨씬 간편해지는 장점이 있다.

이 외에 I2C모듈을 내장한 LCD의 경우 보다 적은 핀 연결이 가능하고 통신도 수월해지는 장점이 있다. 이번 시간에는 LCD shield (쉴드)의 키패드 (Keypad)를 다루어 보도록 하자


▶ LCD 키패드 쉴드( 1602) 와 키패드 실물 이미지 :



▶ 부대품 목록 : 아두이노 보드


▶ 부품 목록    : LCD키패드 쉴드( 1602 )  


▶ 실습 절차  : 

1. 실습목표

   - 라인 1번 줄에 ‘Push the buttons’ 를 출력한다 

   - 라인 2번 줄에 각 버튼을 누를 때 마다 버튼 이름이 출력 되도록 한다.

2. 실습절차

 - LCD 쉴드의 키패드는 A0 (아날로그 포트) 연결되어 있고 각 버튼 마다 출력 전압값이 다르게 설계되어 있다.

 - 아날로그 포트(A0)10비트(2^10=1023)의 데이터 값으로 입력 되는데, 각 버튼 마다 다른 값이 입력되는 것이다.

 - 아래 각 버튼 별 ADC 값 표를 참고하고 switch~case 구문을 이용하여 버튼이 눌러지면 해당 버튼 이름을 표시

 - 각 버튼의 ADC 값은 Serial 통신() 화면을 통해 확인하고 적정 범위 값을 임의로 정하라.


※ 버튼 이름 



▶ 버튼 별 전압 값과 변환 입력되는 ADC값 표


▶ 프로그램 (코드& 설명) : 

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);  // LCD 제어를 위한 핀 설정

int lcd_key     = 0;

int adc_key_in  = 0;

#define btnRIGHT  0

#define btnUP     1

#define btnDOWN   2

#define btnLEFT   3

#define btnSELECT 4

#define btnNONE   5

int read_LCD_buttons()  {

adc_key_in =analogRead(0); // 키패드와 연결된 A0핀의아날로그값                        

// 읽어온 아날로그의 값에 따라 눌려진 버튼을 판단함

 if (adc_key_in > 1000 ) return btnNONE;   // 모니터링 값 : 1023

 if (adc_key_in < 20)   return btnRIGHT// 모니터링 값 :    0 

 if (adc_key_in < 150)  return btnUP;     // 모니터링 값 100

 if (adc_key_in < 300)  return btnDOWN;   // 모니터링 값 :  258

 if (adc_key_in < 500)  return btnLEFT;   // 모니터링 값 :  411

 if (adc_key_in < 700)  return btnSELECT; // 모니터링 값 :  641 

 return btnNONE;                   // 기타의 경우 btnNONE 리턴함

 }

void setup()

{

 lcd.begin(16, 2);              // LCD 초기화

 lcd.setCursor(0,0);            // LCD 출에 출력

 lcd.print("Push the buttons"); // LCD 출력 메세지

 Serial.begin(9600); 

 }

void loop() {

 lcd.setCursor(0,1);                  // 2번째 1번째 칸 커서 위치시킴   

 lcd_key = read_LCD_buttons(); // 눌려진 버튼이름 출력 하는 함수 호출

 switch (lcd_key)                    // 버튼 확인

 {

   case btnRIGHT:      {            // 오른쪽 버튼

     lcd.print("RIGHT ");

     Serial.println(adc_key_in);

     break;  

      }

   case btnLEFT:        {            // 왼쪽 버튼

     lcd.print("LEFT   ");

     Serial.println(adc_key_in);

     break;     

     }

   case btnUP:          {            // 위쪽 버튼

     lcd.print("UP    ");

     Serial.println(adc_key_in);

     break;

     }

   case btnDOWN:     {            // 아래쪽 버튼

     lcd.print("DOWN  ");

     Serial.println(adc_key_in);

     break;

     }

   case btnSELECT:     {            // 선택 버튼

     lcd.print("SELECT");

     Serial.println(adc_key_in);

     break;         }

     case btnNONE:     {           // 아무것도 누르지 않음

     lcd.print("NONE  ");

     Serial.println(adc_key_in);

     break;      }     } 

}



▶ 실행 영상 : 




▶ 아두이노 코드 다운로드 : 


LCDshield_Keypad_control.ino


반응형