<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://lms.onnocenter.or.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Arduino%3A_RTC_DS3231_hack</id>
	<title>Arduino: RTC DS3231 hack - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://lms.onnocenter.or.id/wiki/index.php?action=history&amp;feed=atom&amp;title=Arduino%3A_RTC_DS3231_hack"/>
	<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Arduino:_RTC_DS3231_hack&amp;action=history"/>
	<updated>2026-04-28T21:00:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://lms.onnocenter.or.id/wiki/index.php?title=Arduino:_RTC_DS3231_hack&amp;diff=51308&amp;oldid=prev</id>
		<title>Onnowpurbo: Created page with &quot;==Source==   #include &quot;Wire.h&quot;  #define DS3231_I2C_ADDRESS 0x68  // Convert normal decimal numbers to binary coded decimal  byte decToBcd(byte val)  {    return ( (val / 10 *...&quot;</title>
		<link rel="alternate" type="text/html" href="https://lms.onnocenter.or.id/wiki/index.php?title=Arduino:_RTC_DS3231_hack&amp;diff=51308&amp;oldid=prev"/>
		<updated>2018-06-07T00:28:11Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==Source==   #include &amp;quot;Wire.h&amp;quot;  #define DS3231_I2C_ADDRESS 0x68  // Convert normal decimal numbers to binary coded decimal  byte decToBcd(byte val)  {    return ( (val / 10 *...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Source==&lt;br /&gt;
&lt;br /&gt;
 #include &amp;quot;Wire.h&amp;quot;&lt;br /&gt;
 #define DS3231_I2C_ADDRESS 0x68&lt;br /&gt;
 // Convert normal decimal numbers to binary coded decimal&lt;br /&gt;
 byte decToBcd(byte val)&lt;br /&gt;
 {&lt;br /&gt;
   return ( (val / 10 * 16) + (val % 10) );&lt;br /&gt;
 }&lt;br /&gt;
 // Convert binary coded decimal to normal decimal numbers&lt;br /&gt;
 byte bcdToDec(byte val)&lt;br /&gt;
 {&lt;br /&gt;
   return ( (val / 16 * 10) + (val % 16) );&lt;br /&gt;
 }&lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
   Wire.begin();&lt;br /&gt;
   Serial.begin(9600);&lt;br /&gt;
   &lt;br /&gt;
   // set the initial time here:&lt;br /&gt;
   // DS3231 seconds, minutes, hours, day, date, month, year&lt;br /&gt;
   setDS3231time(30,33,9, 2 ,28,11,16);&lt;br /&gt;
 }&lt;br /&gt;
 void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte&lt;br /&gt;
                    dayOfMonth, byte month, byte year)&lt;br /&gt;
 {&lt;br /&gt;
   // sets time and date data to DS3231&lt;br /&gt;
   Wire.beginTransmission(DS3231_I2C_ADDRESS);&lt;br /&gt;
   Wire.write(0); // set next input to start at the seconds register&lt;br /&gt;
   Wire.write(decToBcd(second)); // set seconds&lt;br /&gt;
   Wire.write(decToBcd(minute)); // set minutes&lt;br /&gt;
   Wire.write(decToBcd(hour)); // set hours&lt;br /&gt;
   Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)&lt;br /&gt;
   Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)&lt;br /&gt;
   Wire.write(decToBcd(month)); // set month&lt;br /&gt;
   Wire.write(decToBcd(year)); // set year (0 to 99)&lt;br /&gt;
   Wire.endTransmission();&lt;br /&gt;
 }&lt;br /&gt;
 void readDS3231time(byte *second,&lt;br /&gt;
                     byte *minute,&lt;br /&gt;
                     byte *hour,&lt;br /&gt;
                     byte *dayOfWeek,&lt;br /&gt;
                     byte *dayOfMonth,&lt;br /&gt;
                     byte *month,&lt;br /&gt;
                     byte *year)&lt;br /&gt;
 {&lt;br /&gt;
   Wire.beginTransmission(DS3231_I2C_ADDRESS);&lt;br /&gt;
   Wire.write(0); // set DS3231 register pointer to 00h&lt;br /&gt;
   Wire.endTransmission();&lt;br /&gt;
   Wire.requestFrom(DS3231_I2C_ADDRESS, 7);&lt;br /&gt;
   // request seven bytes of data from DS3231 starting from register 00h&lt;br /&gt;
   *second = bcdToDec(Wire.read() &amp;amp; 0x7f);&lt;br /&gt;
   *minute = bcdToDec(Wire.read());&lt;br /&gt;
   *hour = bcdToDec(Wire.read() &amp;amp; 0x3f);&lt;br /&gt;
   *dayOfWeek = bcdToDec(Wire.read());&lt;br /&gt;
   *dayOfMonth = bcdToDec(Wire.read());&lt;br /&gt;
   *month = bcdToDec(Wire.read());&lt;br /&gt;
   *year = bcdToDec(Wire.read());&lt;br /&gt;
 }&lt;br /&gt;
 void displayTime()&lt;br /&gt;
 {&lt;br /&gt;
   byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;&lt;br /&gt;
   // retrieve data from DS3231&lt;br /&gt;
   readDS3231time(&amp;amp;second, &amp;amp;minute, &amp;amp;hour, &amp;amp;dayOfWeek, &amp;amp;dayOfMonth, &amp;amp;month,&lt;br /&gt;
                  &amp;amp;year);&lt;br /&gt;
   // send it to the serial monitor&lt;br /&gt;
   Serial.print(hour, DEC);&lt;br /&gt;
   // convert the byte variable to a decimal number when displayed&lt;br /&gt;
   Serial.print(&amp;quot;:&amp;quot;);&lt;br /&gt;
   if (minute &amp;lt; 10)&lt;br /&gt;
   {&lt;br /&gt;
     Serial.print(&amp;quot;0&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   Serial.print(minute, DEC);&lt;br /&gt;
   Serial.print(&amp;quot;:&amp;quot;);&lt;br /&gt;
   if (second &amp;lt; 10)&lt;br /&gt;
   {&lt;br /&gt;
     Serial.print(&amp;quot;0&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   Serial.print(second, DEC);&lt;br /&gt;
   Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
   Serial.print(dayOfMonth, DEC);&lt;br /&gt;
   Serial.print(&amp;quot;/&amp;quot;);&lt;br /&gt;
   Serial.print(month, DEC);&lt;br /&gt;
   Serial.print(&amp;quot;/&amp;quot;);&lt;br /&gt;
   Serial.print(year, DEC);&lt;br /&gt;
   Serial.print(&amp;quot; Day of week: &amp;quot;);&lt;br /&gt;
   switch (dayOfWeek) {&lt;br /&gt;
     case 1:&lt;br /&gt;
       Serial.println(&amp;quot;Sunday&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case 2:&lt;br /&gt;
       Serial.println(&amp;quot;Monday&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case 3:&lt;br /&gt;
       Serial.println(&amp;quot;Tuesday&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case 4:&lt;br /&gt;
       Serial.println(&amp;quot;Wednesday&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case 5:&lt;br /&gt;
       Serial.println(&amp;quot;Thursday&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case 6:&lt;br /&gt;
       Serial.println(&amp;quot;Friday&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case 7:&lt;br /&gt;
       Serial.println(&amp;quot;Saturday&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
   displayTime(); // display the real-time clock data on the Serial Monitor,&lt;br /&gt;
   delay(1000); // every second&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Onnowpurbo</name></author>
	</entry>
</feed>