Konfigurasi Modul RTC DS1307 via Program Serial (Serial Monitor)

Setting DS1307 melalui serial monitor
Setting DS1307 over Serial monitor
Sebelumnya sudah saya paparkan mengenai penggunaan modul DS1307 untuk keperluan RTC pada Arduino. Nah dalam aplikasinya, kadang hasil pewaktuan tidak sesuai dengan jam dan tanggal saat ini. Untuk memudahkan konfigurasi ulang maka dibuatlah fitur setting tanggal dan jam. Pada aplikasi jam digital kita dapat melihat pada umumnya proses pengaturan dilakukan melalui tombol-tombol. Pada post ini, akan saya coba paparkan mengenai metode konfigurasi ini via komunikasi serial. Prosesnya dapat dilakukan saat arduino terhubung dengan perangkat lainnya melalui komunikasi serial seperti PC atau bluetooth. 

A. Wiring
Rangkaian masih menggunakan modul basic yaitu arduino dan DS1307
Setting DS1307 over Serial monitor

B. Kode Program
Sebelumnya silahkan install library RTClib dan StringSplitter terlebih dahulu! (download pada link tersebut). 
#include "StringSplitter.h"
#include "RTClib.h"

RTC_DS1307 rtc;
char c;
String phrase;
char HariDalamMinggu[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
int Y,M,D,hh,mm,ss;
void setup() {
  Serial.begin(9600);
  phrase.reserve(100);
  
  if (! rtc.begin()) {
    Serial.println("RTC tidak terhubung, Cek kembali wiring!");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC tidak bekerja, Setel ulang waktu!");
    //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
  Serial.println("Test modul RTC DS1307!");
  delay(500);
  print_intro();
}

void loop() {
  while (Serial.available() > 0) {
    c = Serial.read();
    phrase += c;
    if (c == '\n') {
      Serial.println();
      decode_c();
    }
  }
  
  DateTime now = rtc.now();
  
  Serial.print(HariDalamMinggu[now.dayOfTheWeek()]);
  Serial.print(", ");
  Serial.print(now.day(), DEC); Serial.print('/');
  Serial.print(now.month(), DEC); Serial.print('/');
  Serial.print(now.year(), DEC);  Serial.print("  ");

  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
  delay(1000);
}

void decode_c(){
  if (phrase.charAt(phrase.length() - 1) == '\n') {
        Serial.print(phrase);
        StringSplitter *splitter = new StringSplitter(phrase, ',', 6);  
        int itemCount = splitter->getItemCount();
        Serial.println("Data count: " + String(itemCount));
       
        Y = splitter->getItemAtIndex(0).toInt();
        M = splitter->getItemAtIndex(1).toInt();
        D = splitter->getItemAtIndex(2).toInt();
        hh = splitter->getItemAtIndex(3).toInt();
        mm = splitter->getItemAtIndex(4).toInt();
        ss = splitter->getItemAtIndex(5).toInt();
        
        //validasi
        if((Y<2020)||(M>12)||(D>31)||(hh>24)||(mm>60)||(ss>60)){
          Serial.println("Pengaturan tidak diterima!");
          Serial.println("Sesuaikan dengan tanggal dan waktu yang berlaku");
          Serial.println();
        }
        else{
          Serial.println("Pengaturan diterima!");
          rtc.adjust(DateTime(Y, M, D, hh, mm, ss));
          Serial.print("Mohon tunggu sebentar .");
          int count=0;
          while(count != 10){
            Serial.print(".");
            count++;
            delay(500);     
          } 
        }
        Serial.println();
        phrase="";
        delay(2000);
  } 
}

void print_intro(){
  Serial.println("### Konfigurasi DS1307 Via Serial Command ###");
  Serial.println("    format -> Y,M,D,h,m,s");
  Serial.println("    contoh -> 2020,5,10,7,0,0");
  Serial.println("              10 mei 2020 jam 7:00");
  Serial.println();
  delay(1000);
}
Beberapa point dari program ini adalah
  • Format pengaturan: perintah yang dimasukan terdiri dari 6 buah dengan  urutan tahun, bulan, tanggal, jam, menit dan detik. Data-data tersebut dipidahkan dengan tanda koma. Tanda koma digunakan sebagai karakter (",") yang digunakan untuk proses split data menggunakan fungsi StringSplitter().
  • Untuk validasi data yang di input, maka dibuat beberapa rule terkait nilai tahun (harus diatas 2019), bulan (1-12), tanggal (1-31), jam (1-24), menit (1-60) dan detik (1-60)

C. Hasil
Hasil dari program diatas kurang lebih seperti berikut:

Setting DS1307 over Serial monitor

Pencarian Terkait:
  1. Easy Setting RTC DS1307
  2. Pengaturan modul RTC DS1307 dengan serial
  3. DS1307 Configuration over serial program
  4. Serial Monitor RTC DS1307 setting