- Lesson 99-1: Basic clock on Serial monitor using DS3231 with Arduino
- Lesson 99-2: Using Alarm with buzzer and LED with DS3231 RTC with Arduino
- Lesson 99-3: Building LCD Clock Using DS3231 with Arduino
- Lesson 99-4: Building LED 4 digit clock using Arduino and HT16K33 Display -code 1
- Lesson 99-5: Building LED 4 digit clock using Arduino and HT16K33 Display -code 2
- Lesson 99-6: Unlinmited Alarms with DS3231 and Ardino
Lesson 99: Real-Time Cloick DS3231 to build LCD and LED Clock
Lesson 99: Real-Time Cloick DS3231 to build LCD and LED Clock
Please select other codes for this lecture from the links below.
Related or required files and link to this lesson
- Download LCD Library (zip)
- I2C Scanner Arduino Code to find I2C Address
- Purchase HT16K33 4 Digit LED display from Amazon USA
- Purchase HT16K33 4 Digit LED display from Amazon Canada
- Purchase HT16K33 4 Digit LED display from all other Amazon
- Purchase HT16K33 4 Digit LED display from AliExpress
- Purchase HT16K33 4 Digit LED display from AliExpress
- Purchase LCD1602 from Amazon USA
- Purchase LCD1602 from Amazon Canada
- Purchase LCD1602 from all other Amazon
- Purchase LCD1602 from AliExpress
Part 13: Clock and Timers
This code is part of a lesson on building LED clock Arduino and DS3231 RTC clock module. We are using HT16K33 4 digit LED display to make this clock. This is code 99-4. Basic HT16K33 clock.
- 00:00 Introduction
- 04:11 DS3231 Datasheet
- 05:07 DS3231 Wiring
- 06:38 Simple DS3231 Clock code and library
- 10:05 DS3231 Code using Alarm
- 14:07 Running DS3231 Clock code demonstration
- 17:49 Alarm Buzzer and LED wiring for DS3231, code and demo
- 22:21 LCD Clock using DS3231
- 23:57 LCD Clock Code for Arduino
- 28:43 Building Unlimited Alarm using DS3231 clock module
- 29:38 Unlimited alarm wiring diagram
- 31:29 DS3231 using Alarm with relay and AC bulb wiring
- 31:59 DS3231 Unlimited Alarm Arduino code
- 34:38 Demonstration of Unlimited Alarm with reset push button
- 35:40 LED Clock using DS3231 and HT16K33
- 38:45 LED Clock code explained
- 50:38 LED Clock Demonstration and settings
/*
* Lesson 99
* file: DS3231_HT16K33_clock_display
* Digital clock using DS3231 Real Time clock module and Arduino
* Displays time on 4 digits seven segment dispaly HT16K33
* Used DW3231 library and HT16K33 library below
* watch video instruction:
*
* video instruction * https://youtu.be/LEQfzmO9Wm0
* * This code is part of Arduino Step by Step Course which starts here: https://youtu.be/-6qSrDUA5a8
*
* Written by Ahmad Shamshiri on Feb 07, 2021 in Ajax, Ontario, Canada
* www.Robojax.com
*
*
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
DS3231: Real-Time Clock. Simple example
Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-ds3231.html
GIT: https://github.com/jarzebski/Arduino-DS3231
Web: http://www.jarzebski.pl
(c) 2014 by Korneliusz Jarzebski
HT16k33 library
// AUTHOR: Rob Tillaart
// VERSION: 0.1.0
// PURPOSE: demo
// URL: http://www.adafruit.com/products/1002
// URL: https://github.com/RobTillaart/HT16K33
*/
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
#include "HT16K33.h"
HT16K33 seg(0x70);//initialize the display with 0x70 I2C address
//watch video for settings details and demo https://youtu.be/XGsT-0P0gMU
bool showSecond = true;//show or hide seconds. set to false to not show
unsigned int secondDisplayEvery=5000;//show seconds every 10 seconds
unsigned int secondBlinkCount=6;//show 3 blinks of second
unsigned int secondDisplayDuration =20000;//for how long seconds should be shown (in milliseonds)
bool showLeadingZero =true;
bool showSecondNoBlink=true;//just count senconds no blink
unsigned long rememberTime = millis();
void showSeconds1();
void showSeconds2();
void setup()
{
Serial.begin(9600);
// Initialize DS3231
Serial.println("Robojax Digitla Clock");
Serial.println("using DS3231 and HT16K33");
clock.begin();
seg.begin();
Wire.setClock(100000);
seg.displayOn();
seg.setDigits(4);
seg.displayTest(1);
seg.displayOff();
delay(50);
seg.displayOn();
seg.brightness(10);//set brightness from 1-15
// Set sketch compiling time
clock.setDateTime(__DATE__, __TIME__);
// Manual (YYYY, MM, DD, HH, II, SS
//clock.setDateTime(2021, 4, 13, 8, 01, 00);
}
void loop()
{
(showLeadingZero)? seg.setDigits(4) : seg.setDigits(3);
//watch video for details
dt = clock.getDateTime();
printTime();//print time on serial monitor
seg.displayTime(dt.hour,dt.minute);
seg.displayColon(1);
delay(500);
seg.displayColon(0);
delay(500);
(showSecondNoBlink)? showSeconds2() : showSeconds1();
}//
/*
*
* @brief shows seconds on HT16K33 display
* with blinking
* @param none
* @return no return value
* written Feb 06, 2021 by Ahmad Shamshiri
* www.robojax.com
*/
void showSeconds1()
{
int count = secondBlinkCount;
if(showSecond){
if(millis() - rememberTime > secondDisplayEvery)
{
while(count>=0)
{
dt = clock.getDateTime();
count -=1;
seg.setDigits(2);
seg.displayInt(dt.second);
delay(500);
seg.displayOff();
delay(500);
seg.displayOn();
rememberTime = millis() ;
}// while end
}//if
}//if showSecond is true
}//showSecond() end
/*
*
* @brief shows seconds on HT16K33 display
* without blinking.
* @param none
* @return no return value
* written Feb 06, 2021 by Ahmad Shamshiri
* www.robojax.com
*/
void showSeconds2()
{
int count = secondDisplayDuration;
if(showSecond){
if(millis() - rememberTime > secondDisplayEvery)
{
while(count>=0)
{
dt = clock.getDateTime();
count -=50;
seg.setDigits(2);
seg.displayInt(dt.second);
delay(50);
rememberTime = millis() ;
}// while end
}//if
}//if showSecond is true
}//showSeconds2() end
/*
*
* @brief prints time on serial monitor
* @param none
* @return no return value
* written Feb 06, 2021 by Ahmad Shamshiri
* www.robojax.com
*/
void printTime()
{
Serial.print("Raw data: ");
Serial.print(dt.year); Serial.print("-");
Serial.print(dt.month); Serial.print("-");
Serial.print(dt.day); Serial.print(" ");
Serial.print(dt.hour); Serial.print(":");
Serial.print(dt.minute); Serial.print(":");
Serial.print(dt.second); Serial.println("");
}//printTime() end