상세 컨텐츠

본문 제목

013. Arduino 아두이노 - 1602 IIC I2C LCD 사용해보기

embedded/arduino

by ZelKun 2016. 2. 9. 10:31

본문

반응형

   

시리얼 모니터로도 충분히 데이터를 볼 수 있지만

언제까지 모니터만 볼 수는 없으니 LCD를 이용하려고 합니다

   

사용하려는 LCD는 1602 LCD 인데요 16x2 즉 16개의 문자 2줄이라는 이야기에요

16개의 문자를 2줄 총 32자를 쓸수 있어요

   

가지고 있는 LCD 모듈은 IIC & I2C(Inter-Integrated Circuit) 모듈이 같이 나온제품으로

기존의 16핀이 아닌 4핀으로 사용가능합니다

대신 I2C 라이브러리를 추가해야 합니다 :  https://github.com/marcoschwartz/LiquidCrystal_I2C


아두이노 키트 구매하신분이라면 대부분 이 LCD 모듈이 들어있지요

단가가 싸거든요 ㅋㅋㅋ


뒤에 붙은게 IIC(I2C) 모듈

16개의 핀을 안써도 되는 편리함이 있어요

   

사진출처 : http://theelectromania.blogspot.kr/2016/01/clock-and-calendar-using-arduino-due.html

회로도를 퍼왔더니 아두이노 Mega 이미지네요

   

전원만 넣으면 이렇게 나옵니다

   


IIC(I2C) 에는 핀이 4개가 있는데요 친절하게 다 써있네요

파란 십자드라이버가 들어갈거 같은 부분을 조이면 밝기 조절이 가능합니다

IIC

arduino

GND

GND

VCC

5v

SDA(Serial Data Line)

A4 & SDA

SCL(Serial CLock)

A5 & SCL

SDA, SCL 은 A4,A5 혹은 아두이노 좌측상단의 SDA, SCL 에다 연결하면 됩니다

참고로 SDA, SCL 은 A4, A5로 이미 예약(UNO기준)되 있는거라 변경할 수 없습니다

   

A4, A5

SDA, SCL

   

이제 라이브러리를 다운 받습니다

라이브러리 : https://github.com/marcoschwartz/LiquidCrystal_I2C

라이브러리 추가를 모르시면 이쪽을 참고하세요 : http://zelkun.tistory.com/54

   

그리고 예제를 보드에 업로드 합니다 간단하게 Hello, world!를 출력하는 예제입니다

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

// set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()

{

lcd.init(); // initialize the lcd

// Print a message to the LCD.

lcd.backlight();

lcd.print("Hello, world!");

}

   

void loop()

{

}

lcd.print ("Hello, world"); 는 말그대로 LCD에 Hello, world를 출력하라는겁니다

lcd관련함수는 라이브러리에 이미 들어있습니다

   

잘 나오네요

   

스케치 버전에 따라 라이브러리가 다르기때문에 제대로 표시되는걸 찾아야 합니다..

스케치 1.6 버전에 1.0 라이브러리를 추가했더니 문자가 제대로 안나오....네요;;;;

다행히도 깃허브에서 받은 라이브러리는 잘나오네요

   

Hello, world! 만 찍어보면 재미없으니 다른것도 찍어봅니다

Hello, world!

cds: 조도센서 측정값

이렇게 찍어보려고 해요

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

// set the LCD address to 0x27 for a 16 chars and 2 line display

   

void setup()

{

lcd.init(); // initialize the lcd

// Print a message to the LCD.

lcd.backlight();

lcd.print("Hello, world!");

}

   

void loop()

{

int d = analogRead(A0);

lcd.setCursor(0, 1);

lcd.print("cds:");

lcd.setCursor(5, 1);

lcd.print(d);

delay(1000);

}

lcd.setCursor() 함수는 문자 출력 위치를 변경하는 것으로 (x, y) 입니다

상단 윗줄은 (0,0) 부터 시작하니 하단은 (0, 1)부터 시작합니다

delay를 안주면 수치가 너무 빨리 바껴서 알아보기 힘듭니다


그리고 cds: 부분은 변하질 않으니 setup 에다 넣어도 상관없습니다

   

참고로 시리얼 모니터를 열어도 출력되는게 없으니 시리얼모니터도 쓰려면

Serial.begin(9600); 을 추가하고 Serial.print 를 사용해야합니다

   



-- 2018.01.17 추가 --

댓글에 안된다고 하시는분이 있어서 다시 테스트를 진행했습니다

우선 노트북(맥북)에 설치된 스케치는 1.8.2 버전으로 깃허브에서 라이브러리를 다시 받아서 추가하고

예제로 제공하는 HelloWorld를 업로드 해봤습니다


결과적으로는 정상적으로 출력되네요


이전에 추가했던 라이브러리를 사용했을때는 문자가 단일(1글자) 만나와서

커서를 한칸씩 이동해서 출력을 해서 테스트했었는데 뻘짓이였네요



아래는 테스트용으로 작성했던 hello, world! 출력과 bye를 번갈아 출력하는 걸로

lcd 옵션에 화면 clear하는게 있을것 같은데 찾기 귀찮으니

그냥 공백문자로 다 지우고 새로 뿌리도록 했습니다.


성공하시길...


#include <Wire.h> 

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

// set the LCD address to 0x27 for a 16 chars and 2 line display

void setup()

{

  Serial.begin(9600);

  lcd.init(); // initialize the lcd 

                // Print a message to the LCD.

  lcd.backlight();

}


void loop()

{

  lcd.setCursor(0, 0);

  lcd.print(" ");

  lcd.print(" ");

  lcd.print(" ");

  lcd.print(" ");

  lcd.print(" ");


  lcd.setCursor(0, 0);

  lcd.print("b");

  lcd.print("y");

  lcd.print("e");

  Serial.print("bye\n");


  delay(1000);

  lcd.setCursor(0, 0);

  lcd.print(" ");

  lcd.print(" ");

  lcd.print(" ");

  

  lcd.setCursor(0, 0);

  lcd.print("h");

  lcd.print("e");

  lcd.print("l");

  lcd.print("l");

  lcd.print("o");

  Serial.print("hello\n");

  delay(1000);



   

참고 : http://www.geeetech.com/wiki/index.php/Serial_I2C_1602_16×2_Character_LCD_Module

참고 : http://theelectromania.blogspot.kr/2016/01/clock-and-calendar-using-arduino-due.html

반응형

관련글 더보기

댓글 영역