Thinking Different




이번에는 가장 중요한 정보를 출력해주는 1602 I2C LCD 부분에 대해서 코드를 작성해 보도록 하겠습니다.

 

아래와 같이 작동되는 화면을 보실 수 있으며, 온도와 습도, 그리고 경과 일자 시간을 표시합니다.

 

 

 

 

소스코드를 보도록 하겠습니다.

 

 

Incubator_Main.ino

...

#include <LiquidCrystal_I2C.h>

...

bool b_Print = true;

byte EggChar[] = { B01110, B10001, B10011, B11001, B10111, B10001, B10001, B01110 };    // 달걀 모양 (문자)
byte HeartChar[] = { B01110, B10001, B11011, B10101, B10001, B01110, B00100, B11011 };  // 병아리 모양 (문자)

...

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{  
  ...
  
  lcd.init();
  lcd.backlight();
  lcd.createChar(0, EggChar);
  lcd.createChar(1, HeartChar);

  ...
}

void loop() 
{
  ...

  if(millis()-beforeTime>=1000)
  {
    ...
    
    nowTime++;
    beforeTime = millis();

    ...
  }

  // 화면 출력
  LCD_Print();
}

 

 

_lcd.ino

// 화면 출력
void LCD_Print()
{
  if(b_Print == false) return;

  lcd.setCursor(0,0);
  if(mode == 0) lcd.write(0); // 달갈 모양
  else          lcd.write(1); // 병아리 모양
    
  lcd.print(" ");
  lcd.print(NTC, 1);  // 온도 출력
  lcd.write(223);     // 'C 글자의 '출력
  lcd.print("C   ");
  lcd.print((int)humidity);   // DHT11 소수점 표시 안됨
//  lcd.print(humidity,1);    // DHT22 일경우
  lcd.print("%");

  // day : 일수
  lcd.setCursor(0,1);
  lcd.print("Day:");
  lcd.print(day);
  lcd.print("  ");

  // 시
  if(hour<10) lcd.print("0");
  lcd.print(hour);
  lcd.print(":");

  // 분
  if(min<10) lcd.print("0");
  lcd.print(min);
  lcd.print(":");
  
  // 초
  if(sec<10) lcd.print("0");
  lcd.print(sec);
}

 

화면 출력은 별로 어려울게 없고 생각보다 간단합니다. 저장된 변수의 값을 지정된 위치에 출력해주면 됩니다.