0% found this document useful (0 votes)
32 views7 pages

Include Wire.h

The document shows code for using an I2C connection to read and write time data from a DS3231 real-time clock module. It includes functions to initialize I2C communication, write the initial time, read the current time, and display it continuously on the serial monitor.

Uploaded by

mugipangestu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
32 views7 pages

Include Wire.h

The document shows code for using an I2C connection to read and write time data from a DS3231 real-time clock module. It includes functions to initialize I2C communication, write the initial time, read the current time, and display it continuously on the serial monitor.

Uploaded by

mugipangestu
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 7

#include <Wire.

h>

void setup()

Wire.begin();

Serial.begin(9600);

Serial.println("\nI2C Scanner");

void loop()

byte error, address;

int nDevices;

Serial.println("Scanning...");

nDevices = 0;

for(address = 1; address < 127; address++ )

Wire.beginTransmission(address);

error = Wire.endTransmission();

if (error == 0)

Serial.print("I2C device found at address 0x");

if (address<16)

Serial.print("0");

Serial.print(address,HEX);
Serial.println(" !");

nDevices++;

else if (error==4)

Serial.print("Unknow error at address 0x");

if (address<16)

Serial.print("0");

Serial.println(address,HEX);

if (nDevices == 0)

Serial.println("Not found\n");

else

Serial.println("done\n");

delay(5000);
#include "Wire.h"

#define DS3231_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal

byte decToBcd(byte val)

return( (val/10*16) + (val%10) );

// Convert binary coded decimal to normal decimal numbers

byte bcdToDec(byte val)

return( (val/16*10) + (val%16) );

void setup()

Wire.begin();

Serial.begin(9600);

// set the initial time here:

// DS3231 seconds, minutes, hours, day, date, month, year

setDS3231time(30,35,21,1,27,12,15);

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)

// sets time and date data to DS3231

Wire.beginTransmission(DS3231_I2C_ADDRESS);

Wire.write(0); // set next input to start at the seconds register


Wire.write(decToBcd(second)); // set seconds

Wire.write(decToBcd(minute)); // set minutes

Wire.write(decToBcd(hour)); // set hours

Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)

Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)

Wire.write(decToBcd(month)); // set month

Wire.write(decToBcd(year)); // set year (0 to 99)

Wire.endTransmission();

void readDS3231time(byte *second,

byte *minute,

byte *hour,

byte *dayOfWeek,

byte *dayOfMonth,

byte *month,

byte *year)

Wire.beginTransmission(DS3231_I2C_ADDRESS);

Wire.write(0); // set DS3231 register pointer to 00h

Wire.endTransmission();

Wire.requestFrom(DS3231_I2C_ADDRESS, 7);

// request seven bytes of data from DS3231 starting from register 00h

*second = bcdToDec(Wire.read() & 0x7f);

*minute = bcdToDec(Wire.read());

*hour = bcdToDec(Wire.read() & 0x3f);

*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());

*month = bcdToDec(Wire.read());

*year = bcdToDec(Wire.read());

void displayTime()

byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

// retrieve data from DS3231

readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,

&year);

// send it to the serial monitor

Serial.print(hour, DEC);

// convert the byte variable to a decimal number when displayed

Serial.print(":");

if (minute<10)

Serial.print("0");

Serial.print(minute, DEC);

Serial.print(":");

if (second<10)

Serial.print("0");

Serial.print(second, DEC);

Serial.print(" ");
Serial.print(dayOfMonth, DEC);

Serial.print("/");

Serial.print(month, DEC);

Serial.print("/");

Serial.print(year, DEC);

Serial.print(" Day of week: ");

switch(dayOfWeek){

case 1:

Serial.println("Sunday");

break;

case 2:

Serial.println("Monday");

break;

case 3:

Serial.println("Tuesday");

break;

case 4:

Serial.println("Wednesday");

break;

case 5:

Serial.println("Thursday");

break;

case 6:

Serial.println("Friday");

break;

case 7:
Serial.println("Saturday");

break;

void loop()

displayTime(); // display the real-time clock data on the Serial Monitor,

delay(1000); // every second

You might also like