Berikut saya mencoba berbagi pengetahuan cara setting RTC DS1307 di Modul Arduino Uno, dan cara memastikan apakah modul RTC yang kita miliki masih bagus apa sudah faulty, baik untuk mempersingkat waktu kita mulai saja, Persiapkan modul Arduino Uno dan Modul RTC DS1307 dan rakit seperti poto dibawah ini :
Setelah modul arduino uno dan RTC DS1307 siap, selanjutnya download library dari RTC DS1307.
untuk download Library RTC DS1307 Bisa di SINI. setelah file librarynya didapat kemudian di copy di dalam library arduino, caranya cari folder ARDUINO pada Program Files ( C),
Program Files ( C ) > Arduino > Libraries, copy kan folder library RTC DS1307 tadi didalam folder Libraries tersebut.
Sekarang kita tinggal ke software arduinonya. buka file software arduino, seperti gambar berikut :
Untuk Setting waktu pada RTC DS1307 bisa kita jalankan program seperti berikut :
#include <TimeLib.h>
#include <DS1307RTC.h>
const char *monthName[12] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
tmElements_t tm;
void setup() {
bool parse=false;
bool config=false;
// get the date and time the compiler was run
if (getDate(__DATE__) && getTime(__TIME__)) {
parse = true;
// and configure the RTC with this info
if (RTC.write(tm)) {
config = true;}
}
Serial.begin(9600);
while (!Serial) ; // wait for Arduino Serial Monitor
delay(200);
if (parse && config) {
Serial.print("DS1307 configured Time=");
Serial.print(__TIME__);
Serial.print(", Date=");
Serial.println(__DATE__); } else if (parse) {
Serial.println("DS1307 Communication Error :-{");
Serial.println("Please check your circuitry");
} else {
Serial.print("Could not parse info from the compiler, Time=\"");
Serial.print(__TIME__);
Serial.print("\", Date=\"");
Serial.print(__DATE__);
Serial.println("\"");
}
}
void loop() {
}
bool getTime(const char *str)
{
int Hour, Min, Sec;
if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
tm.Hour = Hour;
tm.Minute = Min;
tm.Second = Sec;
return true;
}
bool getDate(const char *str)
{
char Month[12];
int Day, Year;
uint8_t monthIndex;
if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
for (monthIndex = 0; monthIndex < 12; monthIndex++) {
if (strcmp(Month, monthName[monthIndex]) == 0) break;
}
if (monthIndex >= 12) return false;
tm.Day = Day;
tm.Month = monthIndex + 1;
tm.Year = CalendarYrToTm(Year);
return true;
}
Setelah di Copy, kemudian kita upload ke modul Arduino, dan hasilnya bisa dilihat pada serial monitor. Seperti Gambar dibawah ;
Setelah dilakukan setting time, dimana ini bisa berfungsi untuk mengetahui apakah RTC masih berfungsi dengan baik dan juga berfungsi untuk menyamakan dengan kondsi waktu realnya.
langkah selanjutnya kita mencoba membaca kondisi waktu yang sedang berjalan di RTC,
copy kan program berikut :
#include <Wire.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}
#include <TimeLib.h>
#include <DS1307RTC.h>
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
}
void loop() {
tmElements_t tm;
if (RTC.read(tm)) {
Serial.print("Ok, Time = ");
print2digits(tm.Hour);
Serial.write(':');
print2digits(tm.Minute);
Serial.write(':');
print2digits(tm.Second);
Serial.print(", Date (D/M/Y) = ");
Serial.print(tm.Day);
Serial.write('/');
Serial.print(tm.Month);
Serial.write('/');
Serial.print(tmYearToCalendar(tm.Year));
Serial.println();
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
Serial.write('0');
}
Serial.print(number);
}
Setelah di copy kemudian upload ke modul arduino, lalu waktu yang sedang berjalan bisa kita monitor melalui serial monitor seperti gambar berikut :
waktu yang tertera pada serial monitor bisa kita bandingkan dengan waktu yang ada di PC atau pada jam telepon seluler kita.
demikian sekilas tentang cara setting time dan read time pada RTC DS1307, semoga bisa bermanfaat.
sy bermslh di bagian "tmElements_tm", solusinya gmn ya??
BalasHapusbermasalahnya spt gimana..?
Hapus"tmElements_tm" tidk dikenali mohon solusi nya gna
Hapuscoba diupdate TimeLib.h nya gan
HapusSilakan Kunjungi juga Link Youtube ini : https://www.youtube.com/channel/UC8o4mbFVPsZ5RjDntZjyYMQ
BalasHapus