【 아두이노기초】 #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; } }
}
▶ 실행 영상 :
▶ 아두이노 코드 다운로드 :
'아두이노 > 1. 아두이노기초' 카테고리의 다른 글
【 아두이노 기초 】 #23 서보 모터 제어 1 (0) | 2018.09.27 |
---|---|
【 아두이노 기초 】 #22 DC 모터 제어 하기 3 (0) | 2018.09.11 |
【 아두이노 기초 】 #19 DC 모터 제어 하기 2 (0) | 2018.08.31 |
【 아두이노 기초 】 #17 문자 LCD 쉴드 이용하기 (0) | 2018.08.28 |
【 아두이노 기초 】 #16 문자 LCD 제어 실습 III (0) | 2018.08.27 |