0.96인치 128x64 OLED에 날짜와 시간을 표시해보자

이전글 ‘0.96인치 128x64 OLED에 원하는 글이나 그림을 출력해보자’와 이어집니다.

Arduino Time library가 필요합니다.

http://playground.arduino.cc/Code/Time에서 받아 라이브러리 폴더에 넣습니다.

0.96인치 128x64 OLED에 날짜와 시간을 표시해보자

#include <Time.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

///////////////////////////////////////////////////////////////////
//----- OLED instance
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13

Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif
///////////////////////////////////////////////////////////////////

void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC);
  setTime(12,51,21,20,6,14); // Set time to Friday 12:51:21pm June 20 2014

  // Skip adafruit splash.
  display.display();
  display.clearDisplay();
}

void  loop() {
  display.clearDisplay();
  digitalClockDisplay();
}

void digitalClockDisplay() {
  // Digital clock display of the time
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(20,30);
  display.print(hour());
  printDigits(minute());
  printDigits(second());
  display.println();

  // Digital clock display of the day
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(22,20);
  display.print(year());
  display.print(".");
  display.print(month());
  display.print("/");
  display.print(day());
  display.print("  ");
  display.print(printWeekday(weekday()));
  display.display();
}

void printDigits(int digits) {
  display.print(":");
  if(digits < 10)
    display.print('0');
  display.print(digits);
}

String printWeekday(int weekday) {
  if(weekday == 1)
    return "Sun";
  if(weekday == 2)
    return "Mon";
  if(weekday == 3)
    return "Tue";
  if(weekday == 4)
    return "Wed";
  if(weekday == 5)
    return "Thu";
  if(weekday == 6)
    return "Fri";
  if(weekday == 7)
    return "Sat";
}

setTime()에서 시간을 설정하고 digitalClockDisplay()에서 화면을 주기적으로 업데이트를 해줍니다.

setTime(hr,min,sec,day,month,yr)

예를들어 2014년 6월 20일 오후 12시 51분 21초로 설정하고 싶다면 setTime(12,51,21,20,6,14)이라고 설정하면 됩니다.

자동으로 시간을 맞춰주고 싶다면 블루투스를 사용하여 스마트폰과 연결되면 스마트폰에서 현재 시간을 전송하게 하여 설정하면 되겠죠?