다음 예제들은 DFRobot사의 LCD쉴드를 이용하여 실험을 진행하였다.
[그림 2] 실험에 사용된 LCD쉴드와 회로도
회로도를 보면 RS가 8번 핀, RW가 9번핀, 그리고 D4~D7번 핀이 4번에서 7번핀까지로 결선되어 있음을 알 수 있다. 따라서 LiquidCrystal 클래스의 인스턴스는 첫 번째 생성자를 이용하여 다음과 같이 생성하면 된다.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); |
이제 예제들을 작성해 보도록 하겠다.
첫 번째 예제
첫 번째 예제로 간단한 문자열을 출력하는 프로그램이다.
// 헤더파일을 인클루드 시킨다.#include <LiquidCrystal.h>// 회로도를 참조하여 LCD 객체를 생성/초기화시킨다.LiquidCrystal lcd(8, 9, 4, 5, 6, 7);void setup() {// LED의 행수와 열수를 주어 표시를 시작한다.lcd.begin(16, 2);// LDC에 문자열을 표시한다.lcd.print("hello, world!");}void loop() {// 커서의 위치를 0열, 1행(두 번재 행)으로 설정한다.lcd.setCursor(0, 1);// 초를 표시한다.lcd.print(millis()/1000);} |
두 번째 예제
LiquidCrystal 라이브러리에는 blink() 와 noBlink() 함수가 있는데 깜박이는 직사각형의 커서를 표시할 것인지 아닌지를 설정하는 함수이다. 다음 예제를 이것을 이용한 것이다.
#include <LiquidCrystal.h>LiquidCrystal lcd(8, 9, 4, 5, 6, 7);void setup() {lcd.begin(16, 2);lcd.print("hello, world!");}void loop() {lcd.noBlink();delay(3000);lcd.blink();delay(3000);} |
유사한 함수로 cursor() 함수와 noCursor()함수가 있는데 이것은 밑줄 모양의 커서를 표시할 것인가 말 것인가를 설정하는 것이다. 이 경우 밑줄 커서는 깜박이지 않는다.
세 번째 예제
LiquidCrystal 라이브러리의 공용 멤버함수 중에는 display()함수와 noDisplay()함수가 있다. 함수 명에서 알 수 있듯이 화면에 표시를 할 것인지 말 것인지를 설정하는 것이다.
#include <LiquidCrystal.h>LiquidCrystal lcd(8, 9, 4, 5, 6, 7);void setup() {lcd.begin(16, 2);lcd.print("hello, world!");}void loop() {lcd.display();delay(3000);lcd.noDisplay();delay(3000);} |
위 예제어서 noDisplay()함수가 실행되면 화면에 표시된 문자열이 사라지지만 그 내용은 내부 메모리에 여전히 남아있다. 따라서 display()함수가 호출되면 되살아나는 것이다. 또한 이 함수들을 이용하면 화면 전체를 깜박이는 효과를 줄 수도 있다.
네 번째 예제
문자열이 표시되는 방향을 바꾸는 함수로 rightToLeft()함수와 leftToRight()함수가 있다. 다음 예제는 이것을 이용한 것이다.
#include <LiquidCrystal.h>LiquidCrystal lcd(8, 9, 4, 5, 6, 7);int thisChar = 'a';void setup() {lcd.begin(16, 2);lcd.cursor();}void loop() {// ‘m’ 이 표시되면 방향을 바꾼다.if (thisChar == 'm') {lcd.rightToLeft();}// 's'가 표시되면 방향을 다시 바꾼다.if (thisChar == 's') {lcd.leftToRight();}// 'z'가 표시된 후 처음 조건으로 다시 리셋한다.if (thisChar > 'z') {lcd.clear(); // 화면을 지운 후 커서를 처음 자리로thisChar = 'a';}lcd.write(thisChar);delay(1000);thisChar++;} |
다섯 번째 예제
이번에는 터미널에 입력한 문자를 LCD에 표시하는 프로그램을 작성해 보자.
#include <LiquidCrystal.h>LiquidCrystal lcd(8, 9, 4, 5, 6, 7);void setup() {lcd.begin(16, 2);Serial.begin(9600);}void loop() {// 문자가 전송되면if (Serial.available()) {// 전체 문자열이 들어올 때까지 잠시 기다린다.delay(100);lcd.clear();// 전송된 모든 문자를 표시한다.while (Serial.available() > 0) {lcd.write(Serial.read());}}} |
여섯 번째 예제
화면의 내용을 스크롤(scroll)하는 예제이다.
#include <LiquidCrystal.h>LiquidCrystal lcd(8, 9, 4, 5, 6, 7);void setup() {lcd.begin(16, 2);lcd.print("hello, world!");delay(1000);}void loop() {// 왼쪽으로 스크롤for (int cnt = 0; cnt < 13; cnt++) {lcd.scrollDisplayLeft();delay(150);}// 오른쪽으로 스크롤for (int cnt = 0; cnt < 29; cnt++) {lcd.scrollDisplayRight();delay(150);}// 다시 왼쪽으로 스크롤하여 제자리로for (int cnt = 0; cnt < 16; cnt++) {lcd.scrollDisplayLeft();delay(150);}delay(1000);} |
이 예제에서는 scrollDisplayLeft() 함수와 scrollDisplayRight() 함수를 이용하여 수동으로 이동시켰다. 반면 autoScroll()함수를 사용하면 문자가 표시되기 전에 왼쪽으로 자동으로 이동이 된다.
'하드웨어 > 아두이노' 카테고리의 다른 글
아두이노의 TWI (I2C) 개요 (0) | 2015.05.29 |
---|---|
아두이노의 디지털 핀 두 개와 저항 하나로 터치 센서 구현 (1) | 2015.05.29 |
아두이노의 LiquidCrystal 라이브러리 개요 (0) | 2015.05.29 |
아두이노 servo 라이브러리로 서보 모터 제어하기 (0) | 2015.05.29 |
아두이노 라이브러리의 분류 (0) | 2015.05.29 |