Cara Atur Jam RTC Arduino Menggunakan Serial Monitor

Posted on

Set RTC melalui Serial Monitor Arduino

Cara Atur Jam RTC Arduino Menggunakan Serial Monitor – Pada saya akan membagikan cara dan kode progam dimana kita dapat mengatur waktu pada RTC (Real Time Clock) melalui komunikasi Serial.

Cara sangat bermanfaat dan dapat digunakan dalam berbagai aplikasi, dimana kita harus mengatur waktu hanya dengan komunikasi Serial.

Cara Atur Jam RTC Arduino Menggunakan Serial Monitor

Bagaimana cara kerjanya?

Jadi, kita gunakan karakter atau kata tertentu, bilamana karakter itu kita masukkan, maka ia akan merubah jadwal tertentu. Maka dari itu saya set perintah berikut:

  • TG untuk merubah Tanggal
  • BL untuk merubah Bulan
  • TH untuk merubah Tahun
  • JM untuk merubah Jam
  • MT untuk merubah Menit
  • DT untuk merubah Detik

Rangkaian

Untuk rangkaiannya dan jenis RTC nya sebagai contoh kita gunakan DS3231. Adapun contoh program juga dapat digunakan untuk RTC DS1307.  Adapun rangakaiannya seperti berikut:
Cara Atur Jam RTC Arduino Menggunakan Serial Monitor

Untuk koneksi dari RTC DS3231 atau juga satu family dengannya DS1307 menggunakan komunikasi I2C. Maka pin yang digunakan hanya 4 yaitu VCC, GND, SDA dan SCL.

Untuk mengoperasikan RTC menggunakan Arduino, silahkan download library RTClib pada link berikut:

Download DS3231 Libary RTClib

Jika sudah, masukkan library Libary RTClib yang telah teman-teman download ke Arduino IDE dengan cara:
  • Buka Arduino IDE
  • Klik Sketch > Include Library > Add .ZIP Library
  • Cari Library RTClib-master.zip yang telah teman-teman download
  • Klik Ok
Selain itu, anda juga dapat menambahkan library yang tersedia pada library manager Arduino IDE dengan cara:

  • Klik menu Sketch > Include Library > Manage Libraries
  • Cari RTClib
  • Kemudian klik install.

Program

Untuk programnya adalah sebagai berikut:

#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][7] = {"Ahad", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
char Month [13][10] = {" ", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember"};
String read_string = " ";
int read_int = 0;

void setup () {
Serial.begin(9600);


if (! rtc.begin()) {
Serial.println("Tidak ada RTC");
Serial.flush();
abort();
}
}

void loop () {
bacaRTC();
aturRTC();
delay(1000);
}

void bacaRTC()
{
DateTime now = rtc.now();

Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); // Menampilkan Hari
Serial.print(", ");
Serial.print(now.day(), DEC); // Menampilkan tanggga
Serial.print(' ');
Serial.print(Month[now.month()]); // Menampilkan bulan
Serial.print(' ');
Serial.print(now.year(), DEC); // Menampilkan tahun
Serial.print(", ");
Serial.print(now.hour(), DEC); // Menampilkan jam
Serial.print(':');
Serial.print(now.minute(), DEC); // Menampilkan menit
Serial.print(':');
Serial.print(now.second(), DEC); // Menampilkan detik
Serial.println('n');
}
void aturRTC() {
DateTime now = rtc.now();

while (Serial.available() > 0) {

read_string = Serial.readStringUntil('n');
read_string.trim();
delay(100);

//Hari tidak dapt diubah karena akan berubah sendiri sesuai tanggal

//Jika tanggal
if (read_string == "TG") {
Serial.print("Masukkan Tanggal: ");

//Tahan sebentar menunggu data baru dikirim
while (!Serial.available()) {}

read_int = Serial.parseInt();
Serial.println(read_int);

rtc.adjust(DateTime(now.year(), now.month(), read_int, now.hour(), now.minute(), now.second()));
}

//Jika bulan
if (read_string == "BL") {
Serial.print("Masukkan Bulan: ");

//Tahan sebentar menunggu data baru dikirim
while (!Serial.available()) {}

read_int = Serial.parseInt();
Serial.println(read_int);

rtc.adjust(DateTime(now.year(), read_int, now.day(), now.hour(), now.minute(), now.second()));
}

//Jika tahun
if (read_string == "TH") {
Serial.print("Masukkan Tahun: ");

//Tahan sebentar menunggu data baru dikirim
while (!Serial.available()) {}

read_int = Serial.parseInt();
Serial.println(read_int);

rtc.adjust(DateTime(read_int, now.month(), now.day(), now.hour(), now.minute(), now.second()));
}

//Jika jam
if (read_string == "JM") {
Serial.print("Masukkan Jam: ");

//Tahan sebentar menunggu data baru dikirim
while (!Serial.available()) {}

read_int = Serial.parseInt();
Serial.println(read_int);

rtc.adjust(DateTime(now.year(), now.month(), now.day(), read_int, now.minute(), now.second()));
}

//Jika menit
if (read_string == "MT") {
Serial.print("Masukkan Menit: ");

//Tahan sebentar menunggu data baru dikirim
while (!Serial.available()) {}

read_int = Serial.parseInt();
Serial.println(read_int);

rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), read_int, now.second()));
}

//Jika detik
if (read_string == "DT") {
Serial.print("Masukkan Detik: ");

//Tahan sebentar menunggu data baru dikirim
while (!Serial.available()) {}

read_int = Serial.parseInt();
Serial.println(read_int);

rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), now.minute(), read_int));
}
}
}

Sekarang, silahkan upload program diatas, kemudian buka Serial Monitor. Lalu gunakan perintah berikut maka akan keluar perintah lainnya, masukkan nilai waktunya. Maka nilai RTC akan berubah.

Semoga bermanfaat.

Leave a Reply

Your email address will not be published.