본문 바로가기
전기/Arduino

[Arduino] LCD Keypad Shield (1602) #1 연결 방법 및 예제

by 자유로운 생활 2023. 2. 8.
728x90
반응형

■ 이번 포스팅에서는...

더보기

이번 포스팅에서는 아두이노 메가와 LCD Keypad Shield 연결 방법에 대해 알아보고,

예제를 이용하여 간단히 동작시켜 보겠습니다.

 

1. LCD Keypad Shield 연결

 

우선 LCD Keypad Shield에 대해 확인해 봅시다.

아래와 같이 생겼습니다.

LCD Keypad Shield 전면, 후면

위의 사진이 정면, 아래의 사진이 후면입니다.

(참고로, 정면에서 위로 또는 아래로 뒤집은 후 후면 사진을 찍은 것입니다.)

 

이렇게 생긴 녀석을 점퍼선 없이,

어떻게 아두이노와 간단히 연결할 수 있을까!?

 

위의 LCD Keypad Shield 핀들을 색깔에 맞춰서

아두이노 메가 보드에 꼽아주면 됩니다.

완전 결합 직전 모습

첫번째 사진은 아두이노 메가에 LCD Keypad shield를 핀에 맞춰 살짝만 연결하고 위에서 찍은 사진,

두번째 사진은 아두이노 메가를 기준으로 봤을 때, 위쪽 부분 연결부,

세번째 사진은 아래쪽 부분 연결부 입니다.

 

연결부에 표시한 색깔들은 첫번째 첨부하 사진과 동일한 위치를 표시한 것이니,

헷갈리지 않게 한번 더 확인합시다.

 

최종 결합된 모습은 이렇게 되었네요.

 

이렇게 결합을 하고 아두이노에 전원을 인가하면,

LCD 화면에 파란색으로 불이 들어오고,

LCD 화면 아래에 PWR 이라고 써있는 LED가 점등됩니다.

 

위와 같은 방법으로,

점퍼선 없이 바로 결합해서 사용을 하려면,

당연히 아두이노에서 사용할 핀들을

연결된 구조대로 동일하게 셋팅을 해줘야 하겠죠?

 

 

 

2. 예제 동작 및  소스 간략 설명

 

#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to

//const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;

int n = 15;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() 
{
  lcd.begin(16, 2);   // set up the LCD's number of columns and rows:
  lcd.print("Hello, My freind!");    // Print a message to the LCD.
}

void loop() 
{
  lcd.setCursor(n, 0);
  lcd.print("Move! Text!");
  n--;
  if(n < 0) n = 15;
  delay(500);
  lcd.setCursor(0, 0);
  lcd.print("                ");

  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1); 
  lcd.print(millis() / 1000); // print the number of seconds since reset:
}

예제 소스 입니다.

위쪽에 보면 핀 넘버를 다시 정의 했습니다.

 

결과가 화면은 대략 이렇습니다.

처음 전원이 인가되면 Hello, My friend! 문구가 잠시 현시되고,

Move! Text! 라는 문구가 왼쪽으로 한 칸 씩 이동하는 형태로

첫줄에 계속해서 현시됩니다.

그리고 2번째줄 좌측에 어떤 숫자가 계속해서 카운팅 되는 형태로 출력됩니다.

 

lcd.setCursor(n, 0);

→ 커서의 위치를 설정합니다. 첫번째줄의 n번째 칸으로 커서 위치시킴

 

즉, Move! Text! 라는 문구가 

첫번째줄의 16번째 칸에서 출력되기 시작합니다.(n=15 일 때)

이 때, 가로가 총 16칸이니까 16번째 칸에 M만 표시가 됩니다.

 

여기서 헷갈릴 수도 있는 부분은

lcd.setCursor(0, 0) : 16X2 LCD 에서, 첫번째줄 첫번째칸 

lcd.setCursor(15, 0) : 16X2 LCD 에서, 첫번째줄 열여섯번째칸

lcd.setCursor(0, 1) : 16X2 LCD 에서, 두번째줄 첫번째칸

이 되는 것입니다.

즉, 1부터 시작하는 것이 아니라 0부터 시작한다는 점을 유의해야 합니다. 

 

n 값은 loop()를 한 번 돌때마다 1씩 줄어듭니다.

그러다가 n < 0 이 되면, 다시 15가 되죠.

그렇기 때문에 텍스트가 왼쪽으로 한칸씩 계속해서 이동하게 되는 것입니다.

 

millis() 라는 함수는, 뭔가 시간과 관련이 있겠죠?

이 함수는 void loop() 가 계속해서 반복되는 것과는 관련없이

독립적으로 돌아가는 타이머라고 생각하시면 됩니다.

즉, millis 라는 녀석이 어디에선가 숨어서 시간을 계속 카운트 해주고 있구나,

생각하시면 됩니다.

1000으로 나눈 이유는 1000ms는 1s 이니까,

초 단위로 현시하기 위해 나눠준 것이죠.

 

참고로,

 아두이노 홈페이지에 있는 내용에 의하면

 millis 함수는 약 50일 정도까지 셀 수 있다고 하네요...! 

 

한번 직접 연결해서 동작시켜 보시면 

금방 이해가 되실겁니다~!!

728x90
반응형