NS.One : Real Time Clock DS3231

Membuat jam digital dengan NS.One, cukup mudah, karena dalam software sudah disediakan pustaka untuk penggunaan chip Real Time Clock DS1307 atau DS3231, yang terhubung secara I2C.Real Time Clock DS3231
Tampak dalam gambar, LCD 16×2 dan modul RTC DS3231, keduanya terhubung secara I2C dengan board Robot Edukasi AVR, dan diprogram dengan software NS.One. Robot Edukasi AVR menggunakan mikrokontroler AVR ATmega32.

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

#define I2C_ADDR 0x27  // Define I2C Address where the PCF8574A is
#define BACKLIGHT_PIN 3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  RTC.begin();  
 //   RTC.adjust(DateTime(__DATE__, __TIME__));  
  lcd.begin (16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(LOW);
  lcd.home();                             
  lcd.print("NS.One I2C test");  
  lcd.setCursor(0,1);       
  lcd.print("Hello NS.One");
  delay(2000);
  lcd.clear();
}

void loop()
{  
  static char buff[16];
  static char* week[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
  DateTime now = RTC.now();
  lcd.home();
  sprintf(buff,"%02d/%02d/%02d %s", now.day(), now.month(), now.year(), week[now.dayOfWeek()] );
  lcd.print(buff);
  lcd.setCursor(0,1);
  sprintf(buff,"%02d:%02d:%02d", now.hour(), now.minute(), now.second());
  lcd.print(buff);
  delay(1000);
}

PS. Proses menulis ke LCD I2C memerlukan waktu yang cukup. Untuk itu, perintah penulisan ke LCD I2C tidak disarankan untuk ditempatkan dalam ISR – Interrupt Service Routine. Untuk LCD paralel, tidak masalah.