인텔 갈릴레오2 LCD에 Hello, world 출력하기

 프로그램을 처음 배우면 하는 Hello, world 찍기를 갈릴레오2에서도 해보자. 아래의 링크는 기본적인 LCD모듈을 사용했을 때, 사용하는 스케치 코드이다. 실제로 필자가 사용한 모듈은 I2C모듈이 LCD모듈과 합쳐진 모듈이다. 구현하기가 훨씬 간단하다. 먼저 기본 모듈부터 보자.
HelloWorld : https://communities.intel.com/docs/DOC-22456
준비물 : IIC/I2C LCD1602(HD44780 호환)
기본 스케치 파일 : 파일 -> 예제 -> 03. LiquidCrystal -> HelloWorld
 스케치 코드
/*
  LiquidCrystal Library - Hello World

 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.

 This sketch prints "Hello World!" to the LCD
 and shows the time.

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe

 This example code is in the public domain.
 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}
void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

 기본 회로도
 보통 스타터 킷을 구입하게 되면 위와달리 LCD모듈과 I2C라는 모듈이 합쳐진 LCD모듈을 준다. PWD(12, 11, 5, 4, 3, 2) 모듈을 좀더 쉽게 규현해주어 A4, A5와 연결만 하면된다. 다만 LiquidCrystal_I2C 라는 라이브러리를 추가해야만 사용이 가능하다.

 스케치 코드 분석
/*
DEVICE PINOUT (SPI Interface):
PIN 1: GND
PIN 2: +5V
PIN 3: SDA - A4에 연결
PIN 4: SCL - A5에 연결
*/

/* Include the SPI/IIC Library */
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

/* LCD를 16*2 배열로 초기화 한다. */
LiquidCrystal_I2C lcd(0x27,16,2);

void setup()
{
  /* LCD 초기화 */
  lcd.init();
}
/* Main program loop */
void loop()
{
  // 백그라운드를 켠다.
  lcd.backlight();

  lcd.setCursor(0,0);     // 커서를 첫번째 줄에 위치한다.
  lcd.print("Hello, World");
  lcd.setCursor(0,1);
  lcd.print("by JaeHun");

  /* Do nothing */
  while(1);
}

 위 스케치 코드를 그대로 컴파일을 한다면 다음과 같은 오류를 만날 수도 있다.
HelloWorld.ino:3:31: fatal error: LiquidCrystal_I2C.h: No such file or directory
compilation terminated.
 이럴 경우, 아래의 페이지를 방문하여 LiquidCrystal_I2C 라이브러리를 다운받아서 아두이노 IDE가 설치된 libraries 폴더 아래에 압축을 푼다.
설명 페이지 : http://www.dfrobot.com/index.php?route=product/product&product_id=135
라이브러리 파일 : http://www.dfrobot.com/image/data/TOY0046/LiquidCrystal_I2Cv1-1.rar
 그리고 아두이노 IDE를 다시 시작하고 스케치 -> 라이브러리에 추가되었는지 확인한다. 그리고 나서 다시 위 스케치코드를 컴파일 한다.

 회로 만들기
 이번에 사용할 LCD1602 ICC V1 모델이다.
 뒷면의 연결 단자가 4개가 있다. 이를 다음과 같이 연결한다.
PIN 1: GND
PIN 2: +5V
PIN 3: SDA - A4에 연결
PIN 4: SCL - A5에 연결
 연결이 완료 되면 위 스케치 코드를 다시 한 번 업로드한다.
 드디어 "Hello, World"를 출력하였다. 아두이노IDE의 특성인지는 잘모르겠지만, 라이브러리라가 불안전한 것들이 존재한다. LiquidCrystal_I2C 라이브러리에 여러가지 기능을 추가해 놓은 것들이 있는데, 이는 라이브러리 추가가 안될 수 있으니 가급적이면 위 링크에 있는 라이브러리를 사용하기 바란다.

 다른 프로그램들은 회선이 정성적으로 연결되는 순간 작동해 정상여부를 바로 판단할 수 있지만, 이번 LCD프로그램은 초기화 작업이 존재하는 관계로 회로를 변경하였다면 업로드를 다시 한번 실행해야한다.