[매드정] 아두이노 강좌 - 20. LCD KEYPAD 모듈 동작

안녕하세요~ 매드 입니다.

오늘은 LCD KEYPAD 모듈 동작에 대해서 알아보도록 하겠습니다.

원래는 LCD를 먼저 진행했어야 했는데 어떻게 하다보니 이제서야 진행하네요.

아무래도 처음 진행하는 것이다보니 조금 사용하기 쉬운 쉴드 모듈로 진행해 보도록 하겠습니다.


20-1. LCD KEYPAD 모듈?

< 출처 : 구글 사진 >

사진에 보고 있는 것이 LCD KEYPAD 모듈입니다. DFROBOT에서 만든 것인데요~ 이 쉴드의 장점은 LCD와 키패드가 일체형으로 되어 있다는 점 입니다. 그리고 KEY 입력의 경우 저항을 이용한 좋은 아이디어 회로로 아두이노의 ADC 한포트만을 이용해서 입력 받는다는 것이 장점이 되겠네요!

LCD는 CLCD라고 해서 문자를 출력할 수 있는 LCD가 달려있는데요. 줄여서 CLCD라고 부릅니다. 이 LCD의 장점은 사용하는 문자를 미리 저장해 놓고 주소값만을 읽어서 쉽게 문자를 출력할 수 있다는 점이 장점이 되겠네요! 다른 일반 LCD 같은 경우 하나하나 정확한 위치에 점을 찍어서 문자를 표시하는 것인데 CLCD는 간편하게 주소값만을 불러오면 되죠. 단점은 CLCD는 내가 원하는 그림이나 문자를 표시할 수 없고 저장된 것만 이용할 수 있습니다. 다른 LCD는 원하는 대로 문자나 그림을 표시할 수 있죠!

KEYPAD 같은 경우에는 특별한게 없으니 여기서는 넘어가고 회로에서 신기한 회로를 보도록 하겠습니다.


20-2. 회로도
< 출처 : www.dfrobot.com >

회로도 입니다~ 잘 안보이시죠~? ㅎㅎ www.dfrobot.com 으로 가시면 회로도를 크게 보실 수 있습니다.

중요한 부분이 회로의 오른쪽 부분이구요! 오른쪽 위부분이 CLCD 회로! 아래가 KEYPAD 회로가 되겠네요~

블로그에서 잘 안보이지만 www.dfrobot.com 가셔서 회로도를 받으셨다는 가정으로 설명 드릴께요~ ㅎㅎ KEY를 여러개 연결하고 가운데 각각 저항을 병렬로 연결해서 키가 눌릴때마다 아두이노의 ADC핀으로 각각 다른 전압값이 입력되게 됩니다~ ㅎㅎ

그것을 이용해서 여러가지 키를 입력 받게 되는 것이죠. 간단하죠~? 이전에 한번 설명 드렸던 '전압분배법칙' 을 응용한 회로라고 보시면 될 것 같네요~ ㅎㅎ

그럼 바로 펌웨어를 짜보도록 할까요~?



20-3. 펌웨어

#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

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

// read the buttons
int read_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) return btnNONE; // 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)   return btnRIGHT;
  if (adc_key_in < 250)  return btnUP;
  if (adc_key_in < 450)  return btnDOWN;
  if (adc_key_in < 650)  return btnLEFT;
  if (adc_key_in < 850)  return btnSELECT;

  // 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;
  */


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

void setup()
{
  lcd.begin(16, 2);              // start the library
}

void loop()
{
  lcd.setCursor(0, 0);
  lcd.print("Hello Maduinos!!"); // print a simple message
  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
  {
    case btnRIGHT:
      {
        lcd.print("3+7 = ");
        lcd.print(3 + 7);
        break;
      }
    case btnLEFT:
      {
        lcd.print("LEFT   ");
        break;
      }
    case btnUP:
      {
        lcd.print("UP    ");
        break;
      }
    case btnDOWN:
      {
        lcd.print("DOWN  ");
        break;
      }
    case btnSELECT:
      {
        lcd.print("SELECT");
        break;
      }
    case btnNONE:
      {
        lcd.print("NONE  ");
        break;
      }
  }
  delay(100);
  lcd.clear();
}

역시나 펌웨어도 DFROBOT 홈페이지에서 퍼왔습니다. 제가 조금 수정하긴 했지만 바탕은 똑같으니 여기까지 따라오셨던 어려분 모두 잘 하셨으리라 믿습니다~



다음주는 개인적으로 여행을 떠나 방송을 쉴 것 같구요!

다다음주에는 릴레이와 조이스틱을 준비해보도록 하겠습니다.

이제 슬슬 중급강좌도 끝나가네요~ >.< 고급 강좌에서는 지금까지 다루었던 것들을 응용하고 조금 난이도 있는 과정을 진행해 보려고 합니다.

개구리가 멀리 뛰기위해 움츠리는 것처럼!! ㅎㅎ 힘들어서 끝까지 가봐요!~ >.<

그럼 다음주에 뵈요~~

댓글 쓰기

11 댓글

  1. 앗 이건 들었어야 하는데 주말에 시간이 요즘 안나네요 ㅎㅎㅎ

    답글삭제
    답글
    1. ㅎㅎ ㅠ 저도 요즘 정신없네요 ㅎㅎ 강좌를 막 쉬고 있어요 ㅎㅎ

      삭제
    2. 앗 드론 1팀...저도 레이싱 조립해서 날리고는 있지만 ㅋㅋ

      삭제
    3. 괌에서 4/10 하프 마라톤(1233번) 3:10:05초 뛰셨네요 대단합니다..
      아쉽게도 여기는 사진을 못 올리는 군요 ㅎㅎ 짝짝짝...

      삭제
    4. ㅋㅋ 드론1팀 이였습니다~ .. 이번 마라톤은 망했어요 ㅠㅠ 다음부터 해외 마라톤은.. 10키로만 하는걸로.. ㅎㅎㅎㅎ 그..그런데 어떻게 아셨어요!? ㅋㅋ

      삭제
    5. 괌 마라톤 치니 서이트가 뜨고 명단 검색이 있길래 하프 뛰신다고 해서 찾아봤죠 ㅋㅋ

      삭제
  2. 혹시 저 lcd키패드 아랫부분 키옆부분 Vin 부분에 12v 전원연결해서 사용해도 되나요?

    답글삭제
    답글
    1. 안녕하세요~ 매드입니다.
      말씀하신 vin 에는 12v 연결 가능합니다.
      아두이노에서 발열은 조금 나실꺼에요^^
      감사합니다~

      삭제
    2. 아 감사합니다 ㅎㅎ 되네요
      그리구 한가지더 물어보려고하는데요 키패드를 설정온도로 변경했는데 올리고 내리고 할수있게요
      근데 이게 꾹눌러야 바뀌더군요 한번 누를때마다 바뀌는걸원햇는데 이거는 어떻게해야하나요??

      삭제
    3. 이거는 코드 상황에 따라 다를 수 있겠네요. 키패드 인식하는 위로 delay 구문이 없어야됩니다~~
      키패드 읽는 Adc 동작을 타이머로 동작하게 한번 해보면 될것 같아요~

      삭제
    4. 아하 감사합니다 ㅋㅋ 한번해보고 다시 글올리겟습니다 ㅎ

      삭제