반응형

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


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

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

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

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


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



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


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


▶ 실습 절차  : 

1. 실습목표

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

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

   - 커서 (9,1) 위치에 숫자를 표시하고 UP버튼은 1씩 증가, Down버튼은 1씩 감소 시킨다

   - LEFT, RIGHT 버튼으로 현재의 커서 위치를 좌우로 이동 시킬 수 있게

2. 실습절차

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

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

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

 - 각 버튼의 ADC 값은 Serial 통신() 화면을 통해 아래와 같은지 확인해보고, switch~case구문에 사용될 적정 범위 값을 임의로 정하라.  (RST 버튼은 보드의 Reset 버튼과 같은 기능-설정 되어 있음)


※ 버튼 이름 



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


▶ LCD 함수 표 ( LiquidCrystal.h 파일 포함된 )



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

#include <LiquidCrystal.h>

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

int lcd_key     = 0;

int adc_key_in  = 0;

int counter = 0;           // 숫자 증감을 위한 변수

int cur = 0;                 // cursor 위치값 변수

#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); // 키패드와 연결된 AO핀의 아날로그값                        

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

 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 출력 메세지

}


void loop() {

 lcd.cursor();                     // LCD에 커서를 표시

 lcd.setCursor(9,1);            // (9,1) 위치로 커서를 옮김

 lcd.print(counter);            // (9,1) 위치에 숫자를 표시

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

 lcd.print(counter);

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

switch (lcd_key) {         // 버튼 확인을 위한 스위치 구문

case btnRIGHT:      {            // 오른쪽 버튼

     lcd.print("RIGHT  ");

     lcd.setCursor(cur++,1); // 버튼이 눌러질때 마다 커서를 우로1칸이동

     delay(500);

     break;         }

   case btnLEFT:        {            // 왼쪽 버튼

     lcd.print("LEFT   ");

     lcd.setCursor(cur--,1);   // 버튼이 눌러지는 동안 빠른 루틴 회전에

     delay(500);                // 의한 입력 방지를 위해 delay  삽입

     break;           }

   case btnUP:          {            // 위쪽 버튼

     lcd.print("UP    ");

     lcd.setCursor(9,1);

     lcd.print(counter++);    // 버튼 누를 때 마다 숫자 값을 +1 증가

     delay(500);

     break;     }

   case btnDOWN:     {            // 아래쪽 버튼

     lcd.print("DOWN  ");

     lcd.setCursor(9,1);    

     lcd.print(counter--);     // 버튼 누를 때 마다 숫자 값을 -1 씩 감소

     delay(500);       

     break;     }   

   case btnSELECT:     {            // 선택 버튼

     lcd.print("SELECT");

     break;         }

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

     lcd.print("NONE  ");

     break;         }     

    }   

 }


▶ 실행 영상 : 





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


LCDshield_Keypad_control2.ino



반응형
반응형

【 아두이노 기초 】 #17 문자 LCD 쉴드 이용하기



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

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

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

이 외에 I2C모듈을 내장한 LCD의 경우 보다 적은 핀 연결이 가능하고 통신도 수월해지는 장점이 있다. 


※ 쉴드(Shield)는 특정 기능을 갖는 보드로, 아두이노와 결합하여 호환 가능한 여러 부가 모듈과 연결하는 커넥터 구조를 포함한 부품이다. 특정 입출력 기능을 담당하는 부품으로, 아두이노에서 중요한 부품 중 하나이다. 아두이노의 입출력 커넥터에 연결할 수 있는 커넥터를 사용하고 각 부분품은 커넥터에 연결함으로써 적층 구조로 서로 연결한다.

예시 그림) 




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




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


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


▶ 실습 절차  : 



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

#include <LiquidCrystal.h>       // LCD를 사용하기 위한 헤더파일

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // 사용할 핀 설정(주의:쉴드 핀 배열 임)

int i = 0; // 카운트를 할 변수

void setup(){

   lcd.begin(16, 2);                  // 16자리 2줄을 사용하도록 초기화

   lcd.setCursor(0,0);                // 첫째 줄 맨 처음으로 커서 위치 설정

   lcd.print("Welcome Taegu!");  // 출력할 문자

}

void loop(){

  for(i=0;i<=16;i++ )    {

    lcd.setCursor(i,0);               // 1씩 증가시킨 위치로 커서가 이동

    lcd.print("Welcome Taegu!");  // 메세지 입력  

    lcd.setCursor(i,1);

    lcd.print("electronics"); 

    delay(250);               // 글자가 너무 빨리 지나가니 딜레이 설정

    lcd.clear();

 }

        //문자가 오른쪽 끝까지 갔으니 1씩 감소시켜 좌로 이동

  for(i=16;i>=0;i-- )    {

    lcd.setCursor(i,0);                   // 1씩 증가시킨 위치로 커서가 이동

    lcd.print("Welcome Taegu!");    // 메세지 입력

    lcd.setCursor(i,1);

    lcd.print("electronics"); 

    delay(250); 

    lcd.clear(); 

  }

}





▶ 실행 영상 : 





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


Lcd_control3_use_shield.ino









반응형
반응형

【 아두이노 기초 】 #15 문자 LCD 제어 실습 II




 LCD 액정 디스플레이를 이용하여 문자를 출력 해보는 실습을 해보자.

앞 강좌에서는 16by2 LCD와 16by4 LCD를 사용하는 법에 대해 설명하였는데, 이번강좌에서는 사용자 정의 문자라고 할 수 있는 특수한 캐릭터(문자)를 직접 만들어 출력해보도록 하자 (앞 강좌 참조: http://rasino.tistory.com/128 )



▶ 실물 회로도면 :


※ 위 LCD는 I2C 통신 칩이나 기타 부가 장치가 없는 순수한 문자 LCD이다. 때문에 브레드 보드 접속을 위한 핀도 연결 되어 있지 않은 경우 아래와 같은 핀해더를 구해서 16핀만 남겨놓고 자른 다음 LCD 아래쪽에서 부터 연결하여 납땜을 하면 된다.

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


▶ 부품 목록    : 16by2 또는 16by4 LCD , 핀헤더, 반고정 저항 (10KΩ) 


▶ 회로 도면   : 아래를 참조하여 정확하게 연결하도록 한다.



 LCD 핀부위를 확대한 이미지는 아래와 같다  (7,8,9,10 핀은 사용하지 않는다)


LCD와 아두이노 핀 연결 부위 상세 이미지



< LCD 핀 배열 >

16by4와 기본 핀 배열은 같다.




▶ 실습 절차  : 
 (하드웨어)

 (프로그램설치)

 폰트를 이용하지 않고 직접 문자를 만들어 출력하기 위해서는 배열값을 일일이 만들어 주어야 하기 때문에 아래와 같은 프로그램을 이용하면 쉽게 만들어 사용하기 편리하며 코드 값 복사하기에도 간편하다.


 - 5 x 8 캐릭터 디자이너 프로그램 다운로드 (☜ 클릭):



 다운로드 받은 프로그램을 실행시키면 아래와 같은 화면이 뜰 것이다.



그러면 아래 설명을 참고하여 다양한 형태의 캐릭터를 만들어 볼 수 있다.





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

5x8 LCD Display Character Designer툴을 이용한 캐릭터출력

#include <LiquidCrystal.h>  

LiquidCrystal lcd(2,3,4,5,6,7);

byte SpecialChar0[8]={        //Custom Character #0

 B00100,

 B00100,

 B01110,

 B10101,

 B00100,

 B00100,

 B01010,

 B10001   };

// … 배열 1[8] ~  6[8] 까지 생략

byte SpecialChar7[8]= {        //Custom Character #7

 B00100,

 B10101,

 B01110,

 B00100,

 B00100,

 B00100,

 B11011,

 B00000   };  

 lcd.begin(CC,RR);

// CC 는 행(columns), RR는열 (rows) }


void setup(){

lcd.createChar(0, SpecialChar0);

lcd.createChar(1, SpecialChar1);

lcd.createChar(2, SpecialChar2);

lcd.createChar(3, SpecialChar3);

lcd.createChar(4, SpecialChar4);

lcd.createChar(5, SpecialChar5);

lcd.createChar(6, SpecialChar6);

lcd.createChar(7, SpecialChar7);

}

void loop() {

  lcd.setCursor(0,2);

  lcd.print  ("I'm Sung-sik KIM”);

  lcd.setCursor(0, 0);                     

 for(int i=0; i<16; i++)   {

   lcd.setCursor(1, 1);                   // 해당 행과 열로 커서 이동  

   lcd.write(i);                             // 상태 바 업데이트

   // 또는 이렇게 사용 lcd.write(byte(0));   … (byte(1));

  delay(300);                             // 0.3초간 지연 

  }   

}


※ 위 코드에서 만약 16by4 LCD(4줄 LCD)를 사용 한다면 lcd.begin(16,4)로 LCD 셋업 코드를 바꾸면 된다.  LCD 셀의 배열 위치값은 아래 이미지를 참조하라.




▶ 실행 영상 : 




위 캐릭터를 아래 영상처럼 애니메이션 효과로 처리한 영상이다.






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


LCD16by2_sign2.ino

LCD16by2_sign3.ino








반응형