Chuyển tới nội dung
Home » Arduino With A Ds1307 Rtc And Lcd Display | Step 5: Displaying In Lcd

Arduino With A Ds1307 Rtc And Lcd Display | Step 5: Displaying In Lcd

DS1307 RTC module With Arduino (Tiny RTC ).

Hiển thị thời gian thực (RTC DS1307) lên LCD16x2 bằng giao tiếp I2C trong môi trường Arduino

Ở bài viết hôm trước mình đã hướng dẫn các bạn cách sử dụng Module thời gian thực RTC DS1307 và cách hiển thị ký tự lên màn hình LCD 16×2 bằng giao tiếp I2C.

Tiếp tục trong chuỗi bài viết về LCD hôm nay mình sẽ hướng dẫn các bạn làm thế nào để hiển thị thời gian lên LCD16x2.

Để hiểu hơn về bài viết hôm nay các bạn đọc lại bài viết bên dưới rồi chúng ta tiếp tục nha.

Hiển thị thời gian thực lên LCD16x2 sử dụng module RTC DS1307

Màn hình LCD 16×2 Arduino UNO R3
GND GND
VCC 5V
SDA A4/SDA
SCL A5/SCL
Module RTC DS1307
GND GND
VCC 5V
SDA A4/SDA
SCL A5/SCL

Linh kiện cần thiết cho dự án

Tên linh kiện Số lượng Shopee
Arduino Uno R3 Mua ngay
Cáp nạp Mua ngay
Module RTC DS1307 Mua ngay
Màn hình LCD 16×2 Mua ngay
Module I2C LCD 16×2 Mua ngay
Dây cắm (Đực – Cái) Mua ngay

Thư viện

  • Thư viện hỗ trợ sử dụng module RTC DS1307: Tải ngay.
  • Thư viện hỗ trợ sử dụng màn hình LCD I2C: Tải ngay.
DS1307 RTC module With Arduino (Tiny RTC ).
DS1307 RTC module With Arduino (Tiny RTC ).

What is Arduino Digital Clock?

  • This Digital clock uses the DS1307 RTC Module as its brain for its time calculation.
  • The Arduino reads the signal from the module and displays the time on an LCD display.
  • One can customize this to make an integrated alarm clock, Arduino Timer for time-based application projects, and many more.
  • This module is very cheap and common and can be found easily in the market. this can also be used in many other DIY projects also.
  • We can use different types of displays such as 7-segment displays, OLED displays, LED matrix, RGB LEDs, etc.
  • to display the time. You can make an Automatic pet Feeder, Automatic Light, time-based plant watering system, and much more using this. This reduces the manual stress on us.

Wiring 2: with OLED i2c

For the OLED version they both share 5V and A4/A5 for SDA/SCL

Libraries

  • DS1307 RTC library: – Download here from Github or Download Here.
  • Time Library Download here from Github or Download Here.
  • LCD i²c library: Download here LCD i²c NewLiquidCrystal library.
  • OLED libraries:

    • Adafruit OLED SSD1306 library: Download here from Github or Donwload here.
    • Adafruit GFX Library Download here from Github or Download here.

Codes

Make sure to check the video tutorial above to know what code does what, or check the pictures below.

How to use DS1307 RTC with Arduino and I2C LCD
How to use DS1307 RTC with Arduino and I2C LCD

Step 1: Components Required

Microcontroller

  • Arduino Nano

LCD

  • 16 x 2 LCD

LCD interfacing board

  • Three pin LCD interface Board

RTC Module

  • DS 1307 I2C RTC

Wires

  • Female to Female jumper wire ——-9

Step 5: Displaying in LCD

Upload this code to display in LCD and i have also attached the program code for download.

Program Code

#include

#include

#include

LiquidCrystal_SR lcd(6,5,9);

// Pin 6 – Data Enable/ SER, Pin 5 – Clock/SCL, Pin 9 -SCK

#define Display_Clock_Every_N_Seconds 10

#define Display_ShortHelp_Every_N_Seconds 60

String tz;

int hours = 0;

int minutes = 0;

int seconds = 0;

int dates = 0;

int months = 0;

int years = 0;

int ap = 0;

void setup()

Serial.begin(9600);

lcd.begin(16,2);

pinMode(A3, OUTPUT);

digitalWrite(A3, HIGH);

pinMode(A2, OUTPUT);

digitalWrite(A2, LOW);

void loop()

RTC.readClock();

ap = RTC.isPM();

if(ap == 1)

tz = “PM”;

else

tz =”AM”;

lcd.home();

hours = RTC.getHours();

minutes = RTC.getMinutes();

seconds = RTC.getSeconds();

dates = RTC.getDate();

months = RTC.getMonth();

years = RTC.getYear();

lcd.print(hours);

lcd.print(“:”);

lcd.print(minutes);

lcd.print(“:”);

lcd.print(seconds);

lcd.print(” “);

lcd.print(tz);

lcd.setCursor(0, 1);

lcd.print(dates);

lcd.print(“:”);

lcd.print(months);

lcd.print(“:”);

lcd.print(years);

delay(250);

lcd.clear();

lcd.home();

lcd.print(hours);

lcd.print(” “);

lcd.print(minutes);

lcd.print(” “);

lcd.print(seconds);

lcd.print(” “);

lcd.print(tz);

lcd.setCursor(0, 1);

lcd.print(dates);

lcd.print(” “);

lcd.print(months);

lcd.print(” “);

lcd.print(years);

delay(250);

lcd.clear();

Arduino Digital Clock using DS1307 RTC Module and LCD Display
Arduino Digital Clock using DS1307 RTC Module and LCD Display

Components Required

  • Arduino UNO
  • DS1307 RTC Module with Built-in cell.
  • I2C LCD Module
  • 16×2 LCD Display
  • Jumper Wires
  • Breadboard
  • USB Cable to connect Arduino UNO with your Computer

Components Table/buy table

You can buy the whole components from the given link we have to share the amazon link. from where you can get a good discount on the components.

Step 4: Setting the Time and Date in RTC

Upload the below code to set time and date.Uploading this code will load the time and date to RTC from your computer.After uploading the code open serial monitor to see the time and date.

NOTE

Don’t use latest version of arduino IDE for programming.If you use latest arduino IDE, you cannot set time and date in RTC.You also need to add some libraries if you use latest IDE.I found problem with the latest arduino IDE.I strongly recommend to use arduino 1.6.1 IDE version.If you use this version you no need to add libraries because all the libraries were inbuilt in this version.I have also attached the libraries for latest arduino IDE users.

Program Code

#include

#include “RTClib.h”

RTC_DS1307 RTC;

void setup ()

Serial.begin(9600);

Wire.begin();

RTC.begin(); // load the time from your computer.

if (! RTC.isrunning())

Serial.println(“RTC is NOT running!”);// This will reflect the time that your sketch was compiled

RTC.adjust(DateTime(__DATE__, __TIME__));

void loop ()

DateTime now = RTC.now();

Serial.print(now.month(), DEC);

Serial.print(‘/’);

Serial.print(now.day(), 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);

Arduino | DS1307 RTC with Arduino Uno and LCD Keypad Shield | Included with the Simple Settings Menu
Arduino | DS1307 RTC with Arduino Uno and LCD Keypad Shield | Included with the Simple Settings Menu

Code 6: OLED code 2

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

/* This code works with DS1307 RTC with OLED display

* It displays the time and date in a 12h format H:M:s M/D/Y with the displaying of am/pm

*/

#include

#include

#include

#include

#include

#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 32 // OLED display height, in pixels

#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)

bool a;

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Declaring the display name (display)

tmElements_t tm;

void setup() {

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Start the OLED display

display.clearDisplay();

display.display();

void loop() {

RTC.read(tm);

display.setTextSize(2);

display.setTextColor(WHITE);

display.setCursor(17,0);

ampm(tm.Hour);

display.print(“:”);

display.print(tm.Minute);

display.print(“:”);

display.print(tm.Second);

display.setTextSize(1);

if(a==true)

display.print(“am”);

if(a==false)

display.print(“pm”);

display.setCursor(17,17);

display.setTextSize(2);

display.print(tm.Month);

display.print(‘/’);

display.print(tm.Day);

display.print(‘/’);

display.print(tmYearToCalendar(tm.Year));

display.display();

delay(1000);

display.clearDisplay();

void ampm(int Hour){ //ampm function takes the hour value 0-23

if(Hour==0){ //if it’s 0 it becomes 12

Hour=12;

a=true; //true if it’s am, false otherwise

display.print(Hour);

else if(Hour>0 && Hour<12){

a=true; //normal value

display.print(Hour);

else if(Hour==12){

a=false; //changing to pm

display.print(Hour);

else if(Hour>12){

Hour=Hour-12; //substract 12 to bring it back to 1,2,3,…

a=false;

display.print(Hour);

Code mẫu RTC DS1307

#include

#include #include “RTClib.h” RTC_DS1307 rtc; LiquidCrystal_I2C lcd(0x3F,16,2); char daysOfTheWeek[7][12] = {“Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”}; void setup () { Serial.begin(9600); lcd.init(); lcd.backlight(); if (! rtc.begin()) { lcd.print(“Couldn’t find RTC”); while (1); } if (! rtc.isrunning()) { lcd.print(“RTC is NOT running!”); } rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));//auto update from computer time //rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));// to set the time manualy } void loop () { DateTime now = rtc.now(); lcd.setCursor(4, 1); if(now.hour()<=9) { lcd.print(“0”); lcd.print(now.hour()); } else { lcd.print(now.hour()); } lcd.print(‘:’); if(now.minute()<=9) { lcd.print(“0”); lcd.print(now.minute()); } else { lcd.print(now.minute()); } lcd.print(‘:’); if(now.second()<=9) { lcd.print(“0″); lcd.print(now.second()); } else { lcd.print(now.second()); } lcd.print(” “); lcd.setCursor(1, 0); lcd.print(daysOfTheWeek[now.dayOfTheWeek()]); lcd.print(“,”); if(now.day()<=9) { lcd.print(“0”); lcd.print(now.day()); } else { lcd.print(now.day()); } lcd.print(‘/’); if(now.month()<=9) { lcd.print(“0”); lcd.print(now.month()); } else { lcd.print(now.month()); } lcd.print(‘/’); if(now.year()<=9) { lcd.print(“0”); lcd.print(now.year()); } else { lcd.print(now.year()); } }

Bạn sẽ học được gì

  • Có kiến thức cơ bản về Robotics
  • Chế tạo Robot dò đường thông minh
  • Đánh thức nhà khoa học bên trong bạn
  • Tìm hiểu thêm về Robotics, các thuật toán Robot tự động
  • Kiến thức nền tảng để chế tạo các máy móc tự động phục vụ đời sống sinh hoạt, lao động sản xuất
  • Kiến thức để chế tạo sản phẩm, tham gia các cuộc thi khoa học công nghệ trong nước và quốc tế
7 projects Build LED LCD Alarm Clock using DS1307 with Arduino | Lesson 105
7 projects Build LED LCD Alarm Clock using DS1307 with Arduino | Lesson 105

Arduino Digital Clock Circuit Diagram

Connection Table

Arduino UNO DS1307 RTC Module
( +5V ) VCC
GND GND
A4 Pin ( SDA ) SDA Pin
A5 Pin ( SCL ) SCL Pin
Arduino UNO I2C Module
( +5V ) VCC
GND GND
A4 Pin ( SDA ) SDA Pin
A5 Pin ( SCL ) SCL Pin
16*2 LCD Display I2C Module
16 Pin-connected 16 Pin-connected

Since we are using an I2C based Display controller, we need to use only 4 wire connections for the display.

We use PCBWAY to make PCB in our all projects & Products.NowPCB Prototype the Easy Way!

the most professional PCB manufacturer for prototyping and low-volume production to work with in the world. With more than a decade in the field, PCBWAY committed to meeting the needs of customers from different industries in terms of quality, delivery, cost-effectiveness, and any other demanding requests. As one of the most experienced PCB manufacturers and SMT Assemblers in China, we pride ourselves to be your best business partners as well as good friends in every aspect of your PCB needs. They strive to make your R&D work easy and hassle-free.

So, we recommend PCBWAY for all PCB services you need.

website pcbway.com

You can order your pcb there.

Arduino Digital Clock Arduino Code

NOTE- You need to install the three libraries LiquidCrystal_I2C.h, Wire.h, and DS1307.h which can be downloaded from HERE into your Arduino IDE before uploading the code.


#include

// RTC LIBRARY #include

// WIRE LIBRARY #include //I2C LIBRARY LiquidCrystal_I2C lcd(0x27,16,2); // Init the DS3231 using the hardware interface DS3231 rtc(SDA, SCL); void setup() { lcd.init(); lcd.backlight(); // Setup Serial connection Serial.begin(9600); // Initialize the rtc object rtc.begin(); // The following lines can be uncommented to set the date and time // rtc.setDOW(FRIDAY); // Set Day-of-Week to SUNDAY // rtc.setTime(9, 58, 0); // Set the time to 12:00:00 (24hr format) //rtc.setDate(6, 12, 2019); // Set the date to January 1st, 2014 } void loop() { // Send Day-of-Week Serial.print(rtc.getDOWStr()); Serial.print(" "); // Send date Serial.print(rtc.getDateStr()); Serial.print(" -- "); // Send time Serial.println(rtc.getTimeStr()); lcd.setCursor(0,0); lcd.print(rtc.getDateStr ()); lcd.setCursor(0,1); lcd.print(rtc.getTimeStr ()); lcd.setCursor(9,1); lcd.print(rtc.getDOWStr()); // Wait one second before repeating :) delay (1000); }


Once the uploading of code is complete, LCD Display will be able to show the Time as per the code uploaded. I hope you found this guide helpful in making the project. If you have any doubts, you can put them in the comment section below.

How to use DS1307 RTC with Arduino + LCD/OLED 12h/24h formats
How to use DS1307 RTC with Arduino + LCD/OLED 12h/24h formats

Code 1: Library example – SetTime

Important !! First time you must wire the module and upload the “SetTime” example, it sets the module to the compiling time of the code which is technically your real time and date. And here are the codes I’ve made for the LCD and OLED: Download here 3 LCD codes, Download here 3 OLED codes, or check below:

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

#include

#include

#include

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;

N.B: If you are testing the module with multiple things it’s better to close the “SetTime” example, open it again and upload to the board, otherwise your module will be programmed with the first time the “SetTime” example was compiled, and you may think that your module doesn’t work well !!

Code 4: LCD code 3

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

/* This code is to use with DS1307 RTC and LCD i²c screen

* It displays the time and date H:M:s M/D/Y as 12h format with the display of am/pm

*/

#include

#include

#include

#include

#define I2C_ADDR 0x27 //I2C adress, you should use the code to scan the adress first (0x27) here

#define BACKLIGHT_PIN 3 // Declaring LCD Pins

#define En_pin 2

#define Rw_pin 1

#define Rs_pin 0

#define D4_pin 4

#define D5_pin 5

#define D6_pin 6

#define D7_pin 7

bool a;

tmElements_t tm;

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup() {

lcd.begin (16,2);

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

lcd.setBacklight(HIGH); //Lighting backlight

lcd.home();

lcd.print(“Hi”);

delay(1000);

void loop() {

lcd.clear();

if (RTC.read(tm)) {

ampm(tm.Hour); //To show the hour we call a function ampm

lcd.print(‘:’);

lcd.print(tm.Minute);

lcd.print(‘:’);

lcd.print(tm.Second);

if(a==true)

lcd.print(” am”);

if(a==false)

lcd.print(” pm”);

lcd.setCursor(0,1);

lcd.print(tm.Month);

lcd.print(‘/’);

lcd.print(tm.Day);

lcd.print(‘/’);

lcd.print(tmYearToCalendar(tm.Year));

delay(1000);

void ampm(int Hour){ //ampm function takes the hour value 0-23

if(Hour==0){ //if it’s 0 it becomes 12

Hour=12;

a=true; //true if it’s am, false otherwise

lcd.print(Hour);

else if(Hour>0 && Hour<12){

a=true; //normal value

lcd.print(Hour);

else if(Hour==12){

a=false; //changing to pm

lcd.print(Hour);

else if(Hour>12){

Hour=Hour-12; //substract 12 to bring it back to 1,2,3,…

a=false;

lcd.print(Hour);

How to use  DS1307 RTC with Arduino   and lcd 20x04 I2C DIY
How to use DS1307 RTC with Arduino and lcd 20×04 I2C DIY

Code 5: OLED code 1

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

/* This code works with DS1307 RTC with OLED display

* It displays the time and date in a simple 24h format H:M:s D/M/Y

*/

#include

#include

#include

#include

#include

#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 32 // OLED display height, in pixels

#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Declaring the display name (display)

tmElements_t tm;

void setup() {

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Start the OLED display

display.clearDisplay();

display.display();

void loop() {

RTC.read(tm);

display.setTextSize(2);

display.setTextColor(WHITE);

display.setCursor(17,0);

display.print(tm.Hour);

display.print(“:”);

display.print(tm.Minute);

display.print(“:”);

display.print(tm.Second);

display.setCursor(17,17);

display.print(tm.Day);

display.print(‘/’);

display.print(tm.Month);

display.print(‘/’);

display.print(tmYearToCalendar(tm.Year));

display.display();

delay(1000);

display.clearDisplay();

Introduction

In this article, we will be making an Arduino Digital Clock project using the DS1307 RTC module.

We will be using a 16×2 LCD display with an I2C interface to display the time and some other components. If you want to make your own DIY project,

you can use the basic structure of this project. We have already made various Arduino projects, Embedded projects, and Arduino tutorials on our website. You can visit them if you are new to the world of electronics and Arduino.

How do I use a Real Time Clock with Arduino?  RTC 1307
How do I use a Real Time Clock with Arduino? RTC 1307

Step 3: Interfacing LCD

In the schematic diagram LCD is interfaced using only 3 pins.I had used 3 pin interface board to connect LCD to arduino.This interface board has shift register.Generally we interface LCD using atleast 6 pins.This is an old method.The new method to connect LCD is using 3 pin interface board.If you don’t have this interface board,you can make it on your own.Click on below link to know how to create it.

Code 2: LCD code 1

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

/* This code is to use with DS1307 RTC and LCD i²c screen

* It displays the time and date H:M:s D/M/Y as simple format 24h

*/

#include

#include

#include

#include

#define I2C_ADDR 0x27 //I2C adress, you should use the code to scan the adress first (0x27) here

#define BACKLIGHT_PIN 3 // Declaring LCD Pins

#define En_pin 2

#define Rw_pin 1

#define Rs_pin 0

#define D4_pin 4

#define D5_pin 5

#define D6_pin 6

#define D7_pin 7

tmElements_t tm; //RTC instance

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup() {

lcd.begin (16,2);

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

lcd.setBacklight(HIGH); //Lighting backlight

lcd.home();

lcd.print(“Hi”); //Hi 😀

delay(1000);

void loop() {

lcd.clear();

if (RTC.read(tm)) { //If there’s a correct reading

lcd.print(tm.Hour);

lcd.print(‘:’);

lcd.print(tm.Minute);

lcd.print(‘:’);

lcd.print(tm.Second);

lcd.setCursor(0,1);

lcd.print(tm.Day);

lcd.print(‘/’);

lcd.print(tm.Month);

lcd.print(‘/’);

lcd.print(tmYearToCalendar(tm.Year));

delay(1000);

How to make Real Time Clock With Alarm using Arduino and RTC DS3231
How to make Real Time Clock With Alarm using Arduino and RTC DS3231

Introduction: Interfacing DS1307 I2C RTC With Arduino

In this tutorial i am going to show how to easily make a digital clock using DS1307 RTC module.RTC is Real Time Clock.Real time clock is used to keep record off time and to display time.It is used in many digital electronics devices like computers, electronics watches, date loggers and situation where you need to keep track of time.The advantage of real time clock is that it keeps record of time if the power is also not available.RTC has a CMOS battery.This CMOS battery is used to keep record of time when the power not available.This RTC will keep record of time for years without power since it uses very less power.

Code 3: LCD code 2

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

/* This code is to use with DS1307 RTC and LCD i²c screen

* It displays the time and date HH:MM:ss DD/MM/YY 24h as 2 digits format e.g: 02 instead of 2

*/

#include

#include

#include

#include

#define I2C_ADDR 0x27 //I2C adress, you should use the code to scan the adress first (0x27) here

#define BACKLIGHT_PIN 3 // Declaring LCD Pins

#define En_pin 2

#define Rw_pin 1

#define Rs_pin 0

#define D4_pin 4

#define D5_pin 5

#define D6_pin 6

#define D7_pin 7

tmElements_t tm;

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup() {

lcd.begin (16,2);

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

lcd.setBacklight(HIGH); //Lighting backlight

lcd.home();

lcd.print(“Hi”);

delay(1000);

void loop() {

lcd.clear();

if (RTC.read(tm)) {

print2digits(tm.Hour);

lcd.print(‘:’);

print2digits(tm.Minute);

lcd.print(‘:’);

print2digits(tm.Second);

lcd.setCursor(0,1);

print2digits(tm.Day);

lcd.print(‘/’);

print2digits(tm.Month);

lcd.print(‘/’);

lcd.print(tmYearToCalendar(tm.Year));

delay(1000);

void print2digits(int number) { //Testing on the number before displaying it

if (number >= 0 && number < 10) { //if it’s 0<=x<10 we add a 0 before e.g: 4 -> 04

lcd.print(‘0’);

lcd.print(number);

Arduino Turn on / off anything at a specific time (Trigger a Relay with DS3231 RTC)
Arduino Turn on / off anything at a specific time (Trigger a Relay with DS3231 RTC)

How Does It Work?

  • The RTC Module uses a crystal oscillator to output signals at regular intervals.
  • It also has a Built-In battery which acts as a backup for the RTC module in case if the power supply interrupts to prevent resetting of the module.
  • the module is capable of counting seconds, minutes, hours, days, weeks, months, and years. Arduino uses the I2C communication protocol to send data to the LCD display,
  • which we are using here to display the time. The display updates every second to tell the most accurate time since the module is much accurate to tell the time.
  • The module is capable of running for more than 5 years continuously without affecting the count in time. this is possible because of the in-built cell.

Lời kết

Tham gia cộng đồng Arduino KIT Để nhận được nhiều kiến thức bổ ích, các bạn Đăng ký để nhận thông báo khi có bài viết mới nhé. Tham gia Cộng đồng Arduino KIT để cùng nhau thảo luận và chia sẽ kiến thức về lập trình Arduino. Nếu các bạn thấy bài viết bổ ích nhớ Like và Share cho mọi người cùng học nhé.

Chúc các bạn thành công.

Trân trọng.

Time is vital in today’s society, and when it comes to certain electronics, timing is crucial; just like us, they require a means to keep track of time, and precise time. So, how do electronics accomplish this? A Real-Time Clock, or RTC, is a timekeeping device embedded inside an Integrated Circuit, or IC. The answer is DS1307. Many time-critical applications and devices rely on it, including servers, GPS, and data loggers.

About the DS1307

The DS1307 is a battery-backed clock/calendar with 56 bytes of SRAM. The clock/calendar displays data in seconds, minutes, hours, days, dates, months, and years. Each month’s end date is automatically changed, particularly for months with fewer than 31 days.

They come in the form of integrated circuits (ICs) that control time like a clock and date like a calendar. The key advantage of RTC is that it has a battery backup system that keeps the clock/calendar working even if the power goes out. The RTC requires a tiny amount of electricity to stay active. These RTCs may be found in various applications, including embedded devices and computer motherboards.

DS1307 Pinout

SQThe pin may be programmed to emit one of four square-wave frequencies: 1Hz, 4kHz, 8kHz, or 32kHz.

DS If your module has a DS18B20 temperature sensor fitted immediately next to the battery holder, the pin is designed to output temperature information (labeled as U1).

SCL is the I2C interface’s clock input, which is used to synchronize data transfer across the serial interface.

SDA is the I2C serial interface’s data input/output.

VCC This pin powers the module. It can range from 3.3 to 5.5 volts.

GND is a ground pin.

BAT is a backup supply input for any standard 3V lithium battery or another energy source that allows the gadget to keep a precise time when the primary power is lost.

DS1307 Module Parts

The DS1307 RTC module includes all onboard components necessary for the proper operation of a DS3107 chip. Furthermore, it has a holder for a 20mm 3V lithium coin battery. Any CR2032 battery can be used in this module. Let’s go through each of the module’s components one by one. The DS1307 keeps track of the seconds, minutes, hours, days, and months. This chip resets its seconds, minutes, hours, and date at the end of every month. Time can be displayed in 12-hour format with AM and PM or in 24-hour format.

32kHz Crystal Oscillator:

The DS1307 chip requires a 32KHz external crystal oscillator to function (time-keeping). As a result, the RTC module has a 32KHz external crystal oscillator. However, there is one issue with this 32KHz crystal oscillator: changes in ambient temperature alter the crystal oscillator’s oscillation frequency. The difference in the external crystal oscillation frequency of 32KHz is insignificant. However, in the long term, it is a mistake. It causes a monthly clock drift of 2-3 minutes.

Onboard 24C32 EEPROM:

The DS1307 RTC module also has a 24C32 EEPROM onboard. This EEPROM has a 32-byte capacity and only allows for regional read-write operations. Using an RTC module for Alarm-based projects may leverage this memory to save time. For example, we wish to wake up every day at 8:00 a.m. We may record this time value in EEPROM, and an alarm will sound anytime the time equals the saved value.

These EEPROM chips use the I2C interface to connect with microcontrollers like Arduino. As a result, it uses the same I2C bus as the DS1307. To communicate with EEPROM (o 0x50 Hex) and DS1307 chip on the same I2C bus, different slave addresses are set to them.

Backup Battery:

A holder for connecting a CR2032 coil cell may be found on the rear side of an RTC module. This backup battery is intended to preserve precise time even if the primary power supply attached to the DS1307 fails. This chip has a power sensor circuit that detects main power and switches to the backup coil cell when main power is lost.

DS18B20 Sensor:

An external DS18B20 digital temperature sensor can be connected to an empty slot on this module. The three empty pinouts in the bottom right corner serve as a placeholder for the DS18B20 sensor, whose output may be received through the RTC module’s DS pin.

DS1307 Sensor Module Schematic

Programming the DS1307 and Setting Time

Connecting the DS1307 module to the Arduino in the setup below is all that is required to set up time in the module.

After making the above connections, you need to connect the Arduino Uno to your PC, open Arduino IDE, and install Arduino DS1307 Time Set Library. Open the Arduino IDE and select Library Manager from the menu bar. Now look for RTCLib and get the most recent version, as shown in the figure below.

The code is simple to understand. The time will be set and shown on the serial monitor.

rtc.adjust(DateTime(F(__DATE__),F(__TIME__)));

In this line, the rtc object adjusts the time according to the time on your machine. It will modify the time on your computer.

rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

You may manually set the time on this line by giving the following date-time values to the function: year, month, day, hour, minute, and second. In the code below, we’ll set the system’s time. As a result, this line has been commented out.

#include

#include

RTC_DS3231 rtc; char t[32]; void setup() { Serial.begin(9600); Wire.begin(); rtc.begin(); rtc.adjust(DateTime(F(__DATE__),F(__TIME__))); //rtc.adjust(DateTime(2019, 1, 21, 5, 0, 0)); } void loop() { DateTime now = rtc.now(); sprintf(t, “%02d:%02d:%02d %02d/%02d/%02d”, now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year()); Serial.print(F(“Date/Time: “)); Serial.println(t); delay(1000); }

Now we know how to set time in the module, let’s use it with an LCD to make a simple clock

Material Required

  • Arduino Uno
  • DS1307 Module
  • LCD Display
  • I2C LCD Driver Module

After gathering the above material, make the connections indicated in the circuit diagram below.

Connect the DS1307 RTC’s SDA and SCL pins to Arduino’s SDA and SCL pins. To show the date and time, a 16×2 LCD is attached.

Code to display time on LCD

Wire.h is used to connect with the module via I2C, LiquidCrystal_I2C.h is used to show time on the LCD display, and RTClib.h is used to set and format the time on the display.

#include

#include #include

This line sets the address for the 16×2 LCD display to communicate over the I2C protocol.

LiquidCrystal_I2C lcd(0x27,16,2);

The code will report DS1307 RTC Module is not Present on the serial monitor if the project is started with a broken connection.

if (! rtc.begin()) { Serial.println(“DS1307 RTC Module is not Present”); while (1); }

If the RTC loses power and the time in the module becomes incorrect, the code will automatically adjust the time in the module using the computer’s clock. So make sure the clock on your computer is set to the correct time when setting the time.

if (rtc.lostPower()) { Serial.println(“RTC power failure, resetting the time!”); rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); }

This code block resets the LCD cursor to 0 and outputs the date in the Date/Month/Year format.

void displayTime() { lcd.setCursor(0,0); lcd.print(“Time:”); lcd.print(now.hour()); lcd.print(‘:’); lcd.print(now.minute()); lcd.print(‘:’); lcd.print(now.second()); lcd.print(” “); }

The cursor is set to 1 in this portion of the code, and the time is printed in the format Hour: Minute: Second.

void displayDate() { lcd.setCursor(0,1); lcd.print(“Date:”); lcd.print(now.day()); lcd.print(‘/’); lcd.print(now.month()); lcd.print(‘/’); lcd.print(now.year()); }

The date and time will appear on the LCD screen when you have entered the code.

Frequently Asked Questions about DS1307 RTC Module

What is the difference between DS1307 and DS3231?

The only difference between the DS3231 and the DS1307 is that the DS3231 has a temperature compensated crystal built-in, which makes it more precise, but the chip is also considerably bigger. They share the same I2C address, thus libraries designed for the DS1307 should also function for the DS3231.

What is the address of DS1307?

The address byte starts with the 7-bit DS1307 address, which is 1101000, and then the *direction bit (R/W), which is a 0 for a write. The device produces an acknowledge on the SDA line after receiving and decoding the address byte.

What is the frequency of the clock used in RTC?

The 32-kHz clock is used to run the RTC. There are fixed-length seconds and one variable-length second for each hour. There are 3599 seconds of constant length. The 32-kHz clock ticks precisely 32,768 times per second.

Supporting Files

#include

#include

#include

DateTime now;

RTC_DS3231 rtc;

LiquidCrystal_I2C lcd(0x27,16,2);

void displayDate(void);

void displayTime(void);

void setup ()

Serial.begin(9600);

lcd.begin();

lcd.backlight();

if (! rtc.begin())

Serial.println(“DS1307 RTC Module not Present”);

while (1);

if (rtc.lostPower())

Serial.println(“RTC power failure, resetting the time!”);

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

void loop ()

now = rtc.now();

displayDate();

displayTime();

void displayTime()

lcd.setCursor(0,0);

lcd.print(“Time:”);

lcd.print(now.hour());

lcd.print(‘:’);

lcd.print(now.minute());

lcd.print(‘:’);

lcd.print(now.second());

lcd.print(” “);

void displayDate()

lcd.setCursor(0,1);

lcd.print(“Date:”);

lcd.print(now.day());

lcd.print(‘/’);

lcd.print(now.month());

lcd.print(‘/’);

lcd.print(now.year());

Components and supplies

Resistor 1k ohm

Resistor 10k ohm

Arduino Nano R3

Jumper wires (generic)

Solderless Breadboard Full Size

Pi RTC (DS1307)

Alphanumeric LCD, 16 x 2

Rotary potentiometer (generic)

Apps and platforms

Arduino IDE

Project description

Code

Arduino DS1307 RTC code

c_cpp

copy and paste on your editor

1// Real time clock and calendar with set buttons using DS1307 and Arduino 2 3// include LCD library code 4#include 5// include Wire library code (needed for I2C protocol devices) 6#include

7 8// LCD module connections (RS, E, D4, D5, D6, D7) 9LiquidCrystal lcd(5,6,7,8,9,10); 10 11void setup() { 12 pinMode(3, INPUT_PULLUP); // button1 is connected to pin 8 13 pinMode(4, INPUT_PULLUP); // button2 is connected to pin 9 14 // set up the LCD’s number of columns and rows 15 lcd.begin(16, 2); 16 Wire.begin(); // Join i2c bus 17} 18 19char Time[] = “TIME: : : “; 20char Calendar[] = “DATE: / /20 “; 21byte i, second, minute, hour, date, month, year; 22 23void DS1307_display(){ 24 // Convert BCD to decimal 25 second = (second >> 4) * 10 + (second & 0x0F); 26 minute = (minute >> 4) * 10 + (minute & 0x0F); 27 hour = (hour >> 4) * 10 + (hour & 0x0F); 28 date = (date >> 4) * 10 + (date & 0x0F); 29 month = (month >> 4) * 10 + (month & 0x0F); 30 year = (year >> 4) * 10 + (year & 0x0F); 31 // End conversion 32 Time[12] = second % 10 + 48; 33 Time[11] = second / 10 + 48; 34 Time[9] = minute % 10 + 48; 35 Time[8] = minute / 10 + 48; 36 Time[6] = hour % 10 + 48; 37 Time[5] = hour / 10 + 48; 38 Calendar[14] = year % 10 + 48; 39 Calendar[13] = year / 10 + 48; 40 Calendar[9] = month % 10 + 48; 41 Calendar[8] = month / 10 + 48; 42 Calendar[6] = date % 10 + 48; 43 Calendar[5] = date / 10 + 48; 44 lcd.setCursor(0, 0); 45 lcd.print(Time); // Display time 46 lcd.setCursor(0, 1); 47 lcd.print(Calendar); // Display calendar 48} 49void blink_parameter(){ 50 byte j = 0; 51 while(j < 10 && digitalRead(3) && digitalRead(4)){ 52 j++; 53 delay(25); 54 } 55} 56byte edit(byte x, byte y, byte parameter){ 57 char text[3]; 58 while(!digitalRead(3)); // Wait until button (pin #8) released 59 while(true){ 60 while(!digitalRead(4)){ // If button (pin #9) is pressed 61 parameter++; 62 if(i == 0 && parameter > 23) // If hours > 23 ==> hours = 0 63 parameter = 0; 64 if(i == 1 && parameter > 59) // If minutes > 59 ==> minutes = 0 65 parameter = 0; 66 if(i == 2 && parameter > 31) // If date > 31 ==> date = 1 67 parameter = 1; 68 if(i == 3 && parameter > 12) // If month > 12 ==> month = 1 69 parameter = 1; 70 if(i == 4 && parameter > 99) // If year > 99 ==> year = 0 71 parameter = 0; 72 sprintf(text,”%02u”, parameter); 73 lcd.setCursor(x, y); 74 lcd.print(text); 75 delay(200); // Wait 200ms 76 } 77 lcd.setCursor(x, y); 78 lcd.print(” “); // Display two spaces 79 blink_parameter(); 80 sprintf(text,”%02u”, parameter); 81 lcd.setCursor(x, y); 82 lcd.print(text); 83 blink_parameter(); 84 if(!digitalRead(3)){ // If button (pin #8) is pressed 85 i++; // Increament ‘i’ for the next parameter 86 return parameter; // Return parameter value and exit 87 } 88 } 89} 90 91void loop() { 92 if(!digitalRead(3)){ // If button (pin #8) is pressed 93 i = 0; 94 hour = edit(5, 0, hour); 95 minute = edit(8, 0, minute); 96 date = edit(5, 1, date); 97 month = edit(8, 1, month); 98 year = edit(13, 1, year); 99 // Convert decimal to BCD 100 minute = ((minute / 10) << 4) + (minute % 10); 101 hour = ((hour / 10) << 4) + (hour % 10); 102 date = ((date / 10) << 4) + (date % 10); 103 month = ((month / 10) << 4) + (month % 10); 104 year = ((year / 10) << 4) + (year % 10); 105 // End conversion 106 // Write data to DS1307 RTC 107 Wire.beginTransmission(0x68); // Start I2C protocol with DS1307 address 108 Wire.write(0); // Send register address 109 Wire.write(0); // Reset sesonds and start oscillator 110 Wire.write(minute); // Write minute 111 Wire.write(hour); // Write hour 112 Wire.write(1); // Write day (not used) 113 Wire.write(date); // Write date 114 Wire.write(month); // Write month 115 Wire.write(year); // Write year 116 Wire.endTransmission(); // Stop transmission and release the I2C bus 117 delay(200); // Wait 200ms 118 } 119 Wire.beginTransmission(0x68); // Start I2C protocol with DS1307 address 120 Wire.write(0); // Send register address 121 Wire.endTransmission(false); // I2C restart 122 Wire.requestFrom(0x68, 7); // Request 7 bytes from DS1307 and release I2C bus at end of reading 123 second = Wire.read(); // Read seconds from register 0 124 minute = Wire.read(); // Read minuts from register 1 125 hour = Wire.read(); // Read hour from register 2 126 Wire.read(); // Read day from register 3 (not used) 127 date = Wire.read(); // Read date from register 4 128 month = Wire.read(); // Read month from register 5 129 year = Wire.read(); // Read year from register 6 130 DS1307_display(); // Diaplay time & calendar 131 delay(50); // Wait 50ms 132}

Downloadable files

Arduino RTC clock schematic

connect all the hardware according to it

Arduino RTC clock schematic

Arduino RTC clock schematic

connect all the hardware according to it

Arduino RTC clock schematic

Comments

Only logged in users can leave comments

ramjipatel376

0 Followers

0 Projects

Table of contents

Intro

How to use DS1307 RTC with Arduino and LCD/OLED

Hi, and welcome to this tutorial, it’s about another RTC (Real Time Clock) module, it’s the DS1307, previously I did a tutorial about the DS1302, and a project where I set it up using a keypad, then an Alarm Clock project based on that module, I also did a tutorial about the DS3132 RTC module.

But today we’re about the DS1307, and I’m gonna use it with Arduino UNO board and I’ll also use a LCD i²c screen and OLED display, to show time and date in different formats.

“The DS1307 serial real-time clock (RTC) is a low power, full binary-coded decimal (BCD) clock/calendar plus 56 bytes of NV SRAM. Address and data are transferred serially through an I2C, bidirectional bus. The clock/calendar provides seconds, minutes, hours, day, date, month, and year information. The end of the month date is automatically adjusted for months with fewer than 31 days, including corrections for leap year.”

– MaximeIntegrated datasheet

Hardware and parts

For this tutorial I’ll be using the following parts, usual Arduino Uno board, OLED i2c display, LCD i2c display and of course the DS1307 RTC module, along side some jump wires and a breadboard:

Wirings

How to use Arduino Real Time Clock module with DS1302 chip
How to use Arduino Real Time Clock module with DS1302 chip

Code 7: OLED code 3

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

/* This code works with DS1307 RTC with OLED display

* It displays the time and date in a 12h format H:M M/D then Year with the displaying of am/pm and blinking “:”

*/

#include

#include

#include

#include

#include

#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 32 // OLED display height, in pixels

#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)

bool a,points;

int x=0;

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); //Declaring the display name (display)

tmElements_t tm;

void setup() {

display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //Start the OLED display

display.clearDisplay();

display.display();

void loop() {

RTC.read(tm);

x=tm.Second%2; //Dividing the seconds value by 2 and store the rest value, it’s either 0 or 1

display.setTextSize(3);

display.setTextColor(WHITE);

display.setCursor(0,10);

ampm(tm.Hour);

if(x==0) //if x=0 we don’t display the “:”

display.print(” “);

if(x==1) //if x=1 we display it, so for every 1s we display or not the “:”

display.print(“:”);

display.print(tm.Minute);

display.setTextSize(1);

display.setCursor(50,0);

if(a==true)

display.print(” am”);

if(a==false)

display.print(” pm”);

display.setCursor(90,5);

display.setTextSize(2);

display.print(tm.Month);

display.print(‘/’);

display.print(tm.Day);

display.setCursor(95,23);

display.setTextSize(1);

display.print(tmYearToCalendar(tm.Year));

display.display();

display.clearDisplay();

void ampm(int Hour){ //ampm function takes the hour value 0-23

if(Hour==0){ //if it’s 0 it becomes 12

Hour=12;

a=true; //true if it’s am, false otherwise

display.print(Hour);

else if(Hour>0 && Hour<12){

a=true; //normal value

display.print(Hour);

else if(Hour==12){

a=false; //changing to pm

display.print(Hour);

else if(Hour>12){

Hour=Hour-12; //substract 12 to bring it back to 1,2,3,…

a=false;

display.print(Hour);

Tests

LCD tests:

And for the OLED

That’s it for this RTC module, if you have any problem feel free to get in touch!

Categories

Keywords searched by users: arduino with a ds1307 rtc and lcd display

Arduino | Ds1307 Rtc With Arduino Uno And Lcd Keypad Shield | Included With  The Simple Settings Menu - Youtube
Arduino | Ds1307 Rtc With Arduino Uno And Lcd Keypad Shield | Included With The Simple Settings Menu – Youtube
Interfacing Ds1307 I2C Rtc With Arduino : 6 Steps (With Pictures) -  Instructables
Interfacing Ds1307 I2C Rtc With Arduino : 6 Steps (With Pictures) – Instructables
Arduino Nano: Show Date/Time From Ds1307 Real Time Clock(Rtc) On I2C 2 X 16 Lcd  Display With Visuino : 16 Steps - Instructables
Arduino Nano: Show Date/Time From Ds1307 Real Time Clock(Rtc) On I2C 2 X 16 Lcd Display With Visuino : 16 Steps – Instructables
Ds1307 Rtc Module With Arduino (Tiny Rtc ). - Youtube
Ds1307 Rtc Module With Arduino (Tiny Rtc ). – Youtube
Interface Ds1307 Rtc Module With Arduino - Display Date/Time On Oled
Interface Ds1307 Rtc Module With Arduino – Display Date/Time On Oled
Arduino Rtc Ds1307 Lcd 16X02 I2C - Youtube
Arduino Rtc Ds1307 Lcd 16X02 I2C – Youtube
In-Depth: Interface Ds1307 Rtc(Real Time Clock) Module With Arduino
In-Depth: Interface Ds1307 Rtc(Real Time Clock) Module With Arduino
Hiển Thị Thời Gian Thực (Rtc Ds1307) Lên Lcd16X2 Bằng Giao Tiếp I2C Trong  Môi Trường Arduino | Arduino Kit
Hiển Thị Thời Gian Thực (Rtc Ds1307) Lên Lcd16X2 Bằng Giao Tiếp I2C Trong Môi Trường Arduino | Arduino Kit
Digital Clock With Arduino | Arduino With Rtc Mini Project
Digital Clock With Arduino | Arduino With Rtc Mini Project
Clock With Thermometer Using Arduino, I2C 16X2 Lcd, Ds1307 Rtc And Dht11  Sensor. - Instructables
Clock With Thermometer Using Arduino, I2C 16X2 Lcd, Ds1307 Rtc And Dht11 Sensor. – Instructables
Arduino Alarm Clock - Hackster.Io
Arduino Alarm Clock – Hackster.Io
In-Depth: Interface Ds1307 Rtc(Real Time Clock) Module With Arduino
In-Depth: Interface Ds1307 Rtc(Real Time Clock) Module With Arduino
How To Use Ds1307 Rtc With Arduino And Lcd/Oled – Surtr Technology
How To Use Ds1307 Rtc With Arduino And Lcd/Oled – Surtr Technology
Digital Clock With Arduino | Arduino With Rtc Mini Project
Digital Clock With Arduino | Arduino With Rtc Mini Project

See more here: kientrucannam.vn

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *