11. 아두이노를 이용한 Text LCD 제어 - 스마트 폰으로 제어하는 아두이노 -
강의개요 Text LCD는 LCD화면에 정해진 형태의 문자를 정해진 개수만큼 표시할 수 있도록 만들어진 LCD 디스플레이 장치 간단한 문자 표시가 필요한 각종 임베디드 장치들에서 널리 사용 Text LCD는 실생활에 매우 많이 사용되고 있는 주변장치
11.1 Text LCD(Character LCD)
11.2 아두이노의 Text LCD 제어 함수 아두이노는 Text LCD를 쉽게 제어하기 위하여 LCD 모듈에 문자 등을 표시하기 위하여 Text LCD 라이브러리 함수들을 기본 제공 Text LCD 라이브러리 함수들을 사용하려면 "LiquidCrystal.h"를 스케치에 포함 시켜 작성 필요 LiquidCrystal의 라이브러리 참고 ttp://arduino.cc/en/Reference/LiquidCrystalPrint #include “LiquidCrystal.h”
함수 내 용 LCD 제어 설정 LCD 제어 선과 제어 연결 핀 설정 1 LiquidCrystal lcd( ) 데이터 4bit: LiquidCrystal lcd(RS, E, D4, D5, D6, D7) 데이터 8bit: LiquidCrystal lcd(RS, RW, E, D0, D1, D2, D3, D4, D5, D6, D7) 2 begin( ) LCD의 종류 설정 3 lcd.begin(cols, rows) 연결된 LCD의 가로(칸)과 세로(줄) 입력 4 clear( ) LCD 화면을 모두 삭제하고, 커서의 위치를 첫 위치(0,0)로 이동 5 home( ) 커서의 위치를 첫 위치(0,0)로 이동 6 setCursor( ) 커서의 위치를 설정한 위치로 이동 7 lcd.setCursor(x, y) 가로(x)와 세로(y) 위치를 설정 8 write( ) LCD에 글자를 출력 : lcd.write(data) 사용 9 print( ) LCD에 숫자나 문자열을 출력 10 cursor( ) LCD 화면에 커서(_) 표시 11 noCursor( ) LCD 화면에 커서 감추기 12 blink( ) LCD 화면의 커서를 깜빡임. 13 noBlink( ) LCD 화면의 커서를 깜빡이지 않음 14 display( ) LCD 화면의 내용 표시 15 noDisplay( ) LCD 화면의 내용 사라지게 함 16 scrollDisplayLeft( ) LCD 화면의 내용을 왼쪽으로 한 칸 이동 17 scrollDisplayRight( ) LCD 화면의 내용을 오른쪽으로 한 칸 이동 18 autoscroll( ) LCD 화면이 자동으로 스크롤(이동) 19 noAutoscroll( ) LCD 화면이 자동으로 스크롤(이동) 금지 20 leftToRight( ) LCD 화면에 표시되는 글자가 왼쪽에서 오른쪽 방향으로 출력 21 rightToLeft( ) LCD 화면에 표시되는 글자가 오른쪽에서 왼쪽 방향으로 출력 22 createChar( ) LCD 모듈의 사용자 정의 문자 생성
Text LCD 모듈의 설정 LiquidCrystal lcd()함수 사용 일반적으로 데이터 비트에 따라 4bit 인터페이스와 8bit 인터페이스가 가장 많이 사용 4bit 인터페이스와 8bit 인터페이스는 Text LCD에 문자를 나타내기 위하여 각각 4bit와 8bit의 데이터가 사용되는 것을 의미 RS : 레지스터 선택으로 값이 "0"이면 명령이고, 값이 "1"이면 데이터 의미 E : 값이 "1"이면 LCD 사용 가능 D0~D7 : 데이터 선 4bit 인터페이스 LiquidCrystal lcd(RS, E, D4, D5, D6, D7) 8bit 인터페이스 LiquidCrystal lcd(RS, RW, E, D0, D1, D2, D3, D4, D5, D6, D7)
Text LCD 인터페이스 4bit 인터페이스의 경우 8bit 인터페이스의 경우 Text LCD 모듈 제어핀 데이터 핀 RS RW E D0 D1 D2 D3 D4 D5 D6 D7 아두이노 보드 연결 12 GND 11 5 4 3 2 LiquidCrystal lcd() LiquidCrystal lcd(12, 11, 5, 4, 3, 2) Text LCD 모듈 제어핀 데이터 핀 RS RW E D0 D1 D2 D3 D4 D5 D6 D7 아두이노 보드 연결 38 40 42 22 24 26 28 30 32 34 36 LiquidCrystal lcd() LiquidCrystal lcd(38, 40, 42, 22, 24, 26, 28, 30, 32, 34, 36)
UNO보드와 Text LCD 모듈 연결
예제 11.1 Text LCD 모듈에 "Hello, World!" 출력하기 주요개념 Text LCD 라이브러리 함수 사용 "LiquidCrystal.h"를 스케치에 포함 LiquidCrystal lcd( )함수로 LCD 모듈의 제어선의 연결 핀을 설정 LCD를 초기화 lcd.begin( )함수로 연결된 LCD의 가로(칸)과 세로(줄) 설정 lcd.print()함수로 원하는 문자 출력
예제 11.1의 스케치 #include <LiquidCrystal.h> Text LCD 라이브러리 함수 사용 선언 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); LCD 연결 설정 void setup() { lcd.begin(16, 2); lcd.print("Hello, World!"); } 16칸 2줄 LCD 초기화 문자열 출력 void loop() {
예제 11.2 LCD 모듈에 문자 출력하기 Text LCD 모듈에 함수를 이용하여 출력하기 깜박임을 멈추고, 커서를 감추기 LCD 모듈에 숫자 0부터 10까지 0.2초 간격으로 출력하기 LCD 모듈에 표시된 글자를 1초 간격으로 3번 깜빡이기 LCD 모듈에 표시된 글자를 1초 간격으로 3번 오른쪽 이동하기
예제 11.2의 주요개념 아두이노 TEXT LCD 함수의 커서제어 같은 위치에서 숫자가 표시되게 하기 : lcd.home() 커서 나타내기 : lcd.cursor()함수 커서 사라지기 : lcd.noCursor()함수 커서 깜박이기 : lcd.blink()와 lcd.noBlink() 같은 위치에서 숫자가 표시되게 하기 : lcd.home() 오른 쪽으로 이동 : lcd.scrollDisplayRight()함수 왼쪽으로 이동 : lcd.scrollDisplayLeft()함수
예제 11.2의 스케치1 #include <LiquidCrystal.h> Text LCD 라이브러리 함수 사용 선언 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); LCD 연결 설정 void setup() { lcd.begin(16, 2); } 16칸 2줄 LCD 초기화 void loop() { loop함수 시작 lcd.print("Cursor ON-Blink"); lcd.cursor(); lcd.blink(); delay(3000); lcd.clear(); "Cursor ON-Blink"출력 커서 보이기 깜빡이기 3초 지연 LCD화면 지우기 lcd.print("Cursor OFF"); lcd.noBlink(); lcd.noCursor(); 깜박임 정지 커서 감추기
예제 11.2의 스케치2 for (int i=0; i<=10; i++) { lcd.home(); lcd.print("No : "); lcd.print (i); delay(200); } 0.5초 간격으로 숫자를 0 부터 10까지 출력 for (int i=0; i<3; i++) { lcd.noDisplay(); delay(1000); lcd.display(); LCD 모듈 표시된 글자를 1초간격으로 3번 깜빡임 for (int i=0; i<3; i++){ lcd.scrollDisplayRight(); delay(500); LCD 모듈에 표시된 글자를 3번 오른쪽으로 이동 lcd.scrollDisplayLeft(); 왼쪽으로 이동 lcd.clear(); LCD 화면 지우기 loop함수 끝
예제 11.2의 실행
예제 11.3 LCD 모듈에 사용자 정의문자 출력하기 Text LCD 모듈에 임의 형태 문자를 만들어 출력 주요개념 lcd.createChar()함수 사용하여 새로운 문자를 특수 문자로 정의
예제 11.3의 스케치 #include <LiquidCrystal.h> Text LCD 라이브러리 함수 사용 선언 LiquidCrystal lcd(12, 11, 5, 4, 3, 2); LCD 연결 설정 byte smiley[8] = {B00000, B01010, B10101, B00000, B00100, B10001, B01110, B00000}; 정의된 문자의 2진 데이터 void setup() { lcd.createChar(0, smiley); lcd.begin(16, 2); lcd.write(byte(0)); } 0번 문자에 정의된 문자 지정 16칸 2줄 LCD 초기화 0번 문자 출력 void loop() {
11.3 HBE-MCU-Multi의 TEXT LCD 모듈 16문자*2라인의 표시부를 가지며, 표시부 상단에 커넥터가 위치하며, LCD에는 Backlight 기능이 포함
예제 11.4 LCD 모듈에 문자 출력하기
예제 11.4의 주요개념 Text LCD 함수를 사용하기 위하여 스케치의 첫줄은 lcd관련 헤더 파일을 include "LiquidCrystal lcd(RS, RW, E, D0, D1, D2, D3, D4, D5, D6, D7);" 사용 Text LCD의 데이터 신호와 제어신호에 사용될 DIGITAL 핀들을 설정하고, Text LCD 함수 이름을 설정 제어 신호 RS, RW, E에 각각 핀 38, 40, 42번 할당 데이터 신호 D0~D7에 각각 핀 22, 24, 26, 28, 30, 32, 34, 36번을 순서대로 할당 LiquidCrystal lcd(38,40,42,22,24,26,28,30,32,34,36); Text LCD 모듈 제어핀 데이터 핀 RS RW E D0 D1 D2 D3 D4 D5 D6 D7 LiquidCrystal() 아두이노 보드 연결 38 40 42 22 24 26 28 30 32 34 36
" lcd.begin(16, 2);" setup() 구문에서 사용되는 Text LCD 모듈이 16x2이므로, Text LCD의 가로와 세로 크기를 정의 스케치 구조 아두이노를 실행하였을 때, Text LCD의 커서를 첫째 줄 제일 좌측으로 이동시켜 실행하기 위하여 "lcd.setCursor(0, 0);"를 설정 "lcd.write()" 함수를 사용하여 문자를 한 글자씩 출력 TEXT LCD 커서의 위치를 (3,1) 위치로 옮기기 위하여, "lcd.setCursor(3,1);" 설정 "lcd.print();" 함수를 이용하여 "MCU World !!"라는 문자열을 TEXT LCD의 현재 커서 위치에 출력
예제 11.4의 스케치 #include <LiquidCrystal.h> "LiquidCrystal.h" 파일 include LiquidCrystal lcd(38,40,42,22,24,26,28,30,32,34,36); TextLCD모듈의 rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7 순으로 핀 설정 void setup() { lcd.begin(16, 2); LCD의 가로와 세로 길이 선언(16x2 LCD) lcd.setCursor(0, 0); (0,0)에 커서의 위치 지정 lcd.write('H'); lcd.write('e'); lcd.write('l'); lcd.write('o'); 한 글자씩 LCD에 출력 lcd.setCursor(3, 1); (3,1)에 커서의 위치 지정 lcd.print("MCU World !!"); l문자열을 LCD에 출력 } void loop() {
연습과제 예제 11.2를 스위치 입력으로 기능을 선택하여 동작하도록 수정하라. 예제 11.2를 스마트 폰의 블루트스 기능으로 선택하여 동작하도록 수정하라. LCD 화면에 아날로그 소자인 가변저항(VR)과 광센서(CDS)의 값을 입력 받아 출력하는 프로그램을 작성합니다.
연습과제 베이스 보드의 LCD 모듈에 사용자 정의 문자를 이용하여 아래 글씨를 출력합니다.