LCD(액정표시장치, Liquid Crystal Dispaly)
아두이노 예제 12강에서 진행했던 LCD에 글자 쓰기는 실습을 해보기에는 좋은 예제이다. 하지만 디지털 포트를 많이 차지하기 때문에 여러가지 부품을 사용해야 한다거나 프로젝트를 진행할 시에는 효율적이지 못 하다. 그러므로 이번 시간에는 I2C LCD 모듈을 사용하여 글자를 써보도록 하겠다.
I2C LCD 모듈
기존 LCD에 모듈만 결합한 형태로 GND, VCC, SDA(Serial Data Line), SCL(Serial Clock) 등 총 4개의 핀으로 이루어져 있다. 총 12개의 배선을 단 4개의 배선으로 동작이 가능하기 때문에 여러 부품들을 함께 사용하기에 유용하다. 또한 I2C Converter에 가변 저항도 내장되어 있기 때문에 선명도 조절을 위한 가변 저항을 따로 달아줄 필요가 없다.
Arduino-LiquidCrystal-I2C-library-master.zip
라이브러리 추가 방법은 위 링크를 참고하기 바란다.
사용 함수
함수를 사용하는 방법은 객체이름.함수();와 같이 사용한다. lcd 예제이기 때문에 보통 객체 이름을 lcd로 선언하며, lcd.print("Codingrun");과 같이 사용하면 된다.
실습 내용
LCD에 원하는 문자를 출력해 보자.
준비물
아두이노 보드, I2C LCD, 암수 점퍼선 4개
회로도
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
#include <LiquidCrystal_I2C.h> //LiquidCrystal 라이브러리 추가
LiquidCrystal_I2C lcd(0x3F, 16, 2); //lcd 객체 선언
void setup()
{
lcd.begin(); //LCD 사용 시작
}
void loop()
{
lcd.setCursor(5, 0); // 커서를 5, 0에 가져다 놓아라. (열, 행)
lcd.print("Hi ^^"); // 5, 0에 Hi ^^를 출력해라.
delay(1000); // 1초 대기
lcd.setCursor(3, 1); // 커서를 3, 1로 가져다 놓아라. (열, 행)
lcd.print("Codingrun"); // Codingrun을 입력해라.
delay(1000); // 1초 대기
lcd.clear(); // 글자를 모두 지워라.
delay(1000); // 1초 대기
} |
cs |
글씨 출력이 안 되는 경우 (해결 방법)
LCD 관련 실습을 하다 보면, 네모만 나온다던가, 글씨가 출력이 안 되던가 하는 오류가 종종 일어난다. 가장 흔한 이유 중 하나는 I2C LCD 부품의 주소값이 다르기 때문이다. 이럴땐 i2c_scanner를 통해 주소값을 알아낸 다음, 객체 선언에서 주소값을 바꿔주면 된다.
i2c_scanner를 통해 주소값을 알아내는 방법은 아두이노 공식홈페이지를 참고하면 된다.
https://playground.arduino.cc/Main/I2cScanner
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 |
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: wait for serial monitor
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
} |
cs |
위 코드를 실행 해보면, 시리얼모니터에 내가 가지고 있는 i2c lcd의 주소값을 알 수 있다. 현재 필자는 0X3F이므로 LiquidCrystal_I2C lcd(0x3F, 16, 2); 와 같이 입력하면 정상적으로 실행되는 것을 알 수 있다.
예를 들어 주소값이 0X27로 나온다면, LiquidCrystal_I2C lcd(0x27, 16, 2);과 같이 입력하면 된다.
'아두이노 > 기초 예제' 카테고리의 다른 글
아두이노 예제 14. 블루투스로 LED제어하기(스마트폰 연동) (24) | 2017.02.15 |
---|---|
아두이노 예제 13. 온습도 측정하기 (2) | 2017.01.24 |
아두이노 예제 12. LCD에 글자 표시하기 (30) | 2017.01.19 |
아두이노 예제 11. 모터 제어하기 (14) | 2017.01.19 |
아두이노 예제 10. 서보모터 제어하기 (16) | 2017.01.19 |