icon

All in one clock

0 20718 Medium

Clock alarm temprture senseor and timer, all in one device using an arduino uno and RTC

projectImage

Things used in this project

 

Hardware components

HARDWARE LIST
1 Arduino UNO
1 Arduino Proto Shield
1 Real Time Clock (RTC)
1 DFRobot I2C 16x2 Arduino LCD Display Module
5 Tactile Switch, Top Actuated
1 Buzzer
1 Breadboard (generic) (Optional)test before soldering
1 Hook Up Wire Kit, 22 AWG
1 AM2302 DHT22 3 pins dht22

Software apps and online services

Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Solder Wire, Lead Free 
Cable Cutter, 143mm
3D Printer (generic). For the case
Hot glue gun (generic). Hold the part of the case togther you can also use other glue

Story

 

In this project we will make an arduino clock alarm with timer and a temperature sensor.

Wiring:

projectImage

Button #1 Mode - connected to digtal pin 2

 

Button #2 Select - connected to digtal pin 4

 

Button #3 Plus - connected to digtal pin 3

 

Button #4 Minus - connected to digtal pin 12

 

Button #5 Timer on/0ff - connected to digtal pin 11

 

You can wire all of the component to a breadboard or wire to a arduino proto shield if you would like to use the case.

 

To set time you will need to hold the mode button on screen 1.

Custom parts and enclosures

 

Schematics

 

projectImage
CODE
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <virtuabotixRTC.h>
#include <RTClib.h>
#define DHTPIN 13
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
virtuabotixRTC myRTC(6, 7, 8);
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int buzzer = 9;
const int buttonPin1 = 2;
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 12;
const int buttonPin5 = 11;
//variable
float temp;
boolean buttonActive = false;
boolean longPressActive = false;
long buttonTimer = 0;
long longPressTime = 400;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;
int hours = 20;
int minute = 0;
int secondsSet = 0;
int minutesSet = 0;
int hoursSet = 0;
int monthSet = 0;
int dayMonthSet = 0;
int dayWeekSet = 0;
int yearSet = 0;
int timerMin = 0;
int timerSec = 0;
int timerOn = 0;
int clicks = 0;
int clicks2 = 0;
int clicks3 = 0;
int clicks4 = 0;
String hourSetDisplay;
String secondSetDisplay;
String minuteSetDisplay;
String dayOfMonthSetDisplay;
//String monthSetDisplay;
String hoursSetDisplay;
String minutesSetDisplay;
String secondsSetDisplay;
String dayMonthSetDisplay;
String monthSetDisplay;
String dayWeekDisplay;
String timerSecDisplay;
String timerMinDisplay;
String alarmHourDisplay;
String alarmMinuteDisplay;
int screens = 1;
bool alarmToggle = true;
bool timerToggle = true;
bool alarmToggleSet = true;
int x = 0;
unsigned long previousMillis = 0;
unsigned long interval = 1000UL;
unsigned long previousMillis1 = 0;
unsigned long interval1 = 500UL;
void setup()
{
Serial.begin(9600);
// seconds, minutes, hours, day of the week, day of the month, month, year
//myRTC.setDS1302Time(41, 0, 16, 1, 25, 7, 2021);
myRTC.updateTime();
pinMode(buzzer, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin5, INPUT);
dayMonthSet = myRTC.dayofmonth;
monthSet = myRTC.month;
secondsSet = myRTC.seconds;
minutesSet = myRTC.minutes;
hoursSet = myRTC.hours;
dayWeekSet = myRTC.dayofweek;
yearSet = myRTC.year;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState5 = 0;
dht.begin();
lcd.begin();
lcd.home();
lcd.clear();
}
void loop()
{
//screens
screensSelect:
myRTC.updateTime();
if (screens == 1)
{
screen_1();
}
else if (screens == 2)
{
screen_2();
}
else if (screens == 3)
{
screen_3();
}
else if (screens == 4)
{
set_time();
}
else if (screens == 5)
{
set_date();
}
else if (screens == 6)
{
set_day();
}
else if (screens == 7)
{
set_year();
}
else if (screens == 8)
{
alarmOnOff();
}
//blink
if (millis() - previousMillis1 > interval1)
{
previousMillis1 += interval1;
if (screens != 1)
{
lcd.print(' ');
lcd.print(' ');
}
}
//timer
if (millis() - previousMillis > interval)
{
previousMillis += interval;
if (timerOn == 1)
{
if (timerMin == 0 && timerSec == 0 && timerToggle)
{
timerOn = 0;
Serial.println("timerOn");
delay(170);
for (int i = 0; i < 255; i++)
{
myRTC.updateTime();
analogWrite(buzzer, i);
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == HIGH)
{
timerToggle = false;
noTone(buzzer);
delay(170);
break;
}
delay(10);
}
//timer buzzer
for (int i = 255; i > 0; i--)
{
analogWrite(buzzer, i);
myRTC.updateTime();
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == HIGH)
{
timerToggle = false;
noTone(buzzer);
delay(170);
break;
}
delay(10);
}
noTone(buzzer);
}
else
{
timerSec -= 1;
if (timerSec < 0)
{
if (timerMin != 0)
{
timerMin -= 1;
}
timerSec = 59;
}
}
}
}
//alarm
while (myRTC.hours == hours && myRTC.minutes == minute && alarmToggle && alarmToggleSet)
{
delay(170);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Its: ");
lcd.print(alarmHourDisplay);
lcd.print(":");
lcd.print(alarmMinuteDisplay);
fixTimeDate();
for (int i = 0; i < 255; i++)
{
myRTC.updateTime();
analogWrite(buzzer, i);
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == HIGH)
{
alarmToggle = false;
noTone(buzzer);
delay(170);
goto screensSelect;
}
delay(10);
}
//alarm buzzer
for (int i = 255; i > 0; i--)
{
analogWrite(buzzer, i);
myRTC.updateTime();
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == HIGH)
{
alarmToggle = false;
noTone(buzzer);
delay(170);
goto screensSelect;
}
delay(10);
}
buttonState1 = digitalRead(buttonPin1);
if (buttonState1 == HIGH)
{
alarmToggle = false;
noTone(buzzer);
delay(170);
}
noTone(buzzer);
}
if (myRTC.minutes - 1 == minute)
{
alarmToggle >= true;
}
// Serial.println("alarmToggle:");
// Serial.print(alarmToggle);
// Serial.println("alarmToggleset:");
// Serial.print(alarmToggleSet);
}
//fix all the time for display
void fixSetTime()
{
if (hoursSet < 10)
{
hoursSetDisplay = String(0) + String(hoursSet);
}
else if (hoursSet >= 10)
{
hoursSetDisplay = String(hoursSet);
}
if (minutesSet < 10)
{
minutesSetDisplay = String(0) + String(minutesSet);
}
else if (minutesSet >= 10)
{
minutesSetDisplay = String(minutesSet);
}
if (secondsSet < 10)
{
secondsSetDisplay = String(0) + String(secondsSet);
}
else if (secondsSet >= 10)
{
secondsSetDisplay = String(secondsSet);
}
}
void fixSetDate()
{
if (dayMonthSet < 10)
{
dayMonthSetDisplay = String(0) + String(dayMonthSet);
}
else if (dayMonthSet >= 10)
{
dayMonthSetDisplay = String(dayMonthSet);
}
if (monthSet < 10)
{
monthSetDisplay = String(0) + String(monthSet);
}
else if (monthSet >= 10)
{
monthSetDisplay = String(monthSet);
}
}
void fixTimeDate()
{
if (myRTC.hours < 10)
{
hourSetDisplay = String(0) + String(myRTC.hours);
}
else if (myRTC.hours >= 10)
{
hourSetDisplay = String(myRTC.hours);
}
if (myRTC.minutes < 10)
{
minuteSetDisplay = String(0) + String(myRTC.minutes);
}
else if (myRTC.minutes >= 10)
{
minuteSetDisplay = String(myRTC.minutes);
}
if (myRTC.seconds < 10)
{
secondSetDisplay = String(0) + String(myRTC.seconds);
}
else if (myRTC.seconds >= 10)
{
secondSetDisplay = String(myRTC.seconds);
}
if (myRTC.dayofmonth < 10)
{
dayOfMonthSetDisplay = String(0) + String(myRTC.dayofmonth);
}
else if (myRTC.dayofmonth >= 10)
{
dayOfMonthSetDisplay = String(myRTC.dayofmonth);
}
if (myRTC.month < 10)
{
monthSetDisplay = String(0) + String(myRTC.month);
}
else if (myRTC.month >= 10)
{
monthSetDisplay = String(myRTC.month);
}
// alarm
if (hours < 10)
{
alarmHourDisplay = String(0) + String(hours);
}
else if (hours >= 10)
{
alarmHourDisplay = String(hours);
}
if (minute < 10)
{
alarmMinuteDisplay = String(0) + String(minute);
}
else if (minute >= 10)
{
alarmMinuteDisplay = String(minute);
}
switch (myRTC.dayofweek)
{
case 1:
dayWeekDisplay = "Sun";
break;
case 2:
dayWeekDisplay = "Mon";
break;
case 3:
dayWeekDisplay = "Tue";
break;
case 4:
dayWeekDisplay = "Wed";
break;
case 5:
dayWeekDisplay = "Thu";
break;
case 6:
dayWeekDisplay = "Fri";
break;
case 7:
dayWeekDisplay = "Sat";
break;
}
}
void fixTimer()
{
if (timerMin < 10)
{
timerMinDisplay = String(0) + String(timerMin);
}
else if (timerMin >= 10)
{
timerMinDisplay = String(timerMin);
}
if (timerSec < 10)
{
timerSecDisplay = String(0) + String(timerSec);
}
else if (timerSec >= 10)
{
timerSecDisplay = String(timerSec);
}
}
void screen_1()
{
fixTimeDate();
//display time
temp = dht.readTemperature() - 1;
lcd.setCursor(0, 0);
lcd.print(hourSetDisplay);
lcd.print(":");
lcd.print(minuteSetDisplay);
lcd.print(".");
lcd.print(secondSetDisplay);
lcd.print(" ");
lcd.print("T:");
lcd.print(temp, 0);
lcd.print((char)223);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.print(dayWeekDisplay);
lcd.print(" ");
lcd.print(dayOfMonthSetDisplay);
lcd.print("/");
lcd.print(monthSetDisplay);
lcd.print("/");
lcd.print(myRTC.year);
lcd.print(" ");
//next screen
if (digitalRead(buttonPin1) == HIGH)
{
if (buttonActive == false)
{
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) &&
(longPressActive == false))
{
longPressActive = true;
screens = 4;
delay(170);
}
}
else
{
if (buttonActive == true)
{
if (longPressActive == true)
{
longPressActive = false;
}
else
{
delay(170);
lcd.clear();
screens = 2;
}
buttonActive = false;
}
}
}
void screen_2()
{
//select
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH)
{
if (x == 0)
{
// Toggle on
x = 1;
lcd.setCursor(3, 1);
}
else
{
// Toggle off
lcd.setCursor(0, 1);
x = 0;
}
delay(170);
}
// add time
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH)
{
alarmToggle = true;
//hours up
if (x == 0)
{
hours += 1;
if (hours >= 24)
{
hours = 0;
}
}
//minutes up
if (x == 1)
{
minute += 1;
if (minute >= 60)
{
minute = 0;
}
}
delay(170);
}
buttonState4 = digitalRead(buttonPin4);
//hours down
if (buttonState4 == HIGH)
{
alarmToggle = true;
if (x == 0)
{
hours -= 1;
if (hours < 0)
{
hours = 23;
}
}
//minute down
if (x == 1)
{
minute -= 1;
if (minute < 0)
{
minute = 59;
}
}
delay(170);
}
//print the alarm time:
fixTimeDate();
lcd.setCursor(0, 0);
lcd.print("Alarm Time:");
lcd.setCursor(0, 1);
lcd.print(alarmHourDisplay);
lcd.print(":");
lcd.print(alarmMinuteDisplay);
lcd.print(" ");
if (x == 0)
{
lcd.setCursor(0, 1);
}
else
{
lcd.setCursor(3, 1);
}
//next screen
if (digitalRead(buttonPin1) == HIGH)
{
if (buttonActive == false)
{
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) &&
(longPressActive == false))
{
longPressActive = true;
//stop from hold click;
}
}
else
{
if (buttonActive == true)
{
if (longPressActive == true)
{
longPressActive = false;
}
else
{
//next screen
lcd.clear();
screens += 1;
}
buttonActive = false;
}
}
}
void screen_3()
{
//turn on timer:
buttonState5 = digitalRead(buttonPin5);
if (buttonState5 == HIGH)
{
if (clicks4 == 1)
{
timerOn = 0;
clicks4 = 0;
}
else
{
timerOn = 1;
clicks4 = 8;
}
delay(170);
}
//select min/sec
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH)
{
if (clicks3 == 1)
{
clicks3 = 0;
}
else
{
clicks3 += 1;
}
delay(170);
}
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH)
{
//min up
if (clicks3 == 0)
{
lcd.setCursor(0, 1);
timerMin += 1;
lcd.setCursor(0, 1);
if (timerMin >= 100)
{
timerMin = 0;
}
}
//sec up
if (clicks3 == 1)
{
lcd.setCursor(3, 1);
timerSec += 1;
lcd.setCursor(3, 1);
if (timerSec >= 60)
{
timerSec = 0;
}
}
delay(170);
}
buttonState4 = digitalRead(buttonPin4);
if (buttonState4 == HIGH)
{
//min down
if (clicks3 == 0)
{
lcd.setCursor(0, 1);
timerMin -= 1;
lcd.setCursor(0, 1);
if (timerMin < 0)
{
timerMin = 99;
}
}
//sec down
if (clicks3 == 1)
{
lcd.setCursor(3, 1);
timerSec -= 1;
lcd.setCursor(3, 1);
if (timerSec < 0)
{
timerSec = 59;
}
}
delay(170);
}
//print timer
fixTimer();
lcd.setCursor(0, 0);
lcd.print("Timer:");
lcd.setCursor(0, 1);
lcd.print(timerMinDisplay);
lcd.print(":");
lcd.print(timerSecDisplay);
lcd.print(" ");
if (clicks3 == 0)
{
lcd.setCursor(0, 1);
}
if (clicks3 == 1)
{
lcd.setCursor(3, 1);
}
//next screen
if (digitalRead(buttonPin1) == HIGH)
{
if (buttonActive == false)
{
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) &&
(longPressActive == false))
{
longPressActive = true;
//stop from hold click;
}
}
else
{
if (buttonActive == true)
{
if (longPressActive == true)
{
longPressActive = false;
}
else
{
//next screen
lcd.clear();
screens = 8;
}
buttonActive = false;
}
}
}
void set_time()
{
hoursSet = myRTC.hours;
minutesSet = myRTC.minutes;
secondsSet = myRTC.seconds;
fixSetTime();
//next screen
if (digitalRead(buttonPin1) == HIGH)
{
if (buttonActive == false)
{
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) &&
(longPressActive == false))
{
longPressActive = true;
//stop from hold click;
}
}
else
{
if (buttonActive == true)
{
if (longPressActive == true)
{
longPressActive = false;
}
else
{
//next screen
lcd.clear();
screens += 1;
}
buttonActive = false;
}
}
if (clicks == 0)
{
lcd.setCursor(0, 1);
}
if (clicks == 1)
{
lcd.setCursor(3, 1);
}
if (clicks == 2)
{
lcd.setCursor(6, 1);
}
//select hours/min/sec
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH)
{
if (clicks == 2)
{
clicks = 0;
}
else
{
clicks += 1;
}
delay(170);
}
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH)
{
//hours up
if (clicks == 0)
{
lcd.setCursor(0, 1);
hoursSet += 1;
lcd.setCursor(0, 1);
if (hoursSet >= 24)
{
hoursSet = 0;
}
}
if (clicks == 1)
{
//min up
lcd.setCursor(3, 1);
minutesSet += 1;
lcd.setCursor(3, 1);
if (minutesSet >= 60)
{
minutesSet = 0;
}
}
if (clicks == 2)
{
//sec up
lcd.setCursor(6, 1);
secondsSet += 1;
lcd.setCursor(6, 1);
if (secondsSet >= 60)
{
secondsSet = 0;
}
}
delay(170);
}
buttonState4 = digitalRead(buttonPin4);
if (buttonState4 == HIGH)
{
//hours down
if (clicks == 0)
{
lcd.setCursor(0, 1);
hoursSet -= 1;
lcd.setCursor(0, 1);
if (hoursSet < 0)
{
hoursSet = 23;
}
}
//min down
if (clicks == 1)
{
lcd.setCursor(3, 1);
minutesSet -= 1;
lcd.setCursor(3, 1);
if (minutesSet < 0)
{
minutesSet = 59;
}
}
//sec down
if (clicks == 2)
{
lcd.setCursor(6, 1);
secondsSet -= 1;
lcd.setCursor(6, 1);
if (secondsSet < 0)
{
secondsSet = 59;
}
}
}
//print set time
lcd.setCursor(0, 0);
lcd.print("Set Time: ");
lcd.setCursor(0, 1);
lcd.print(hoursSetDisplay);
lcd.print(":");
lcd.print(minutesSetDisplay);
lcd.print(":");
lcd.print(secondsSetDisplay);
lcd.print(" ");
if (clicks == 0)
{
lcd.setCursor(0, 1);
}
if (clicks == 1)
{
lcd.setCursor(3, 1);
}
if (clicks == 2)
{
lcd.setCursor(6, 1);
}
// seconds, minutes, hours, day of the week, day of the month, month, year
myRTC.setDS1302Time(secondsSet, minutesSet, hoursSet, 6, dayMonthSet, monthSet, 2021);
delay(170);
}
void set_date()
{
dayMonthSet = myRTC.dayofmonth;
monthSet = myRTC.month;
//next screen
if (digitalRead(buttonPin1) == HIGH)
{
if (buttonActive == false)
{
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) &&
(longPressActive == false))
{
longPressActive = true;
//stop from hold click;
}
}
else
{
if (buttonActive == true)
{
if (longPressActive == true)
{
longPressActive = false;
}
else
{
//next screen
lcd.clear();
screens += 1;
}
buttonActive = false;
}
}
//select dayOfMonth/month
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH)
{
if (clicks2 == 1)
{
clicks2 = 0;
}
else
{
clicks2 += 1;
}
delay(170);
}
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH)
{
//add dayOfMonth
if (clicks2 == 0)
{
lcd.setCursor(0, 1);
dayMonthSet += 1;
lcd.setCursor(0, 1);
if (monthSet == 4 || monthSet == 6 || monthSet == 6 || monthSet == 9 || monthSet == 11)
{
if (dayMonthSet > 30)
{
dayMonthSet = 1;
}
}
else
{
if (dayMonthSet > 31)
{
dayMonthSet = 1;
}
}
}
//add month
if (clicks2 == 1)
{
lcd.setCursor(3, 1);
monthSet += 1;
lcd.setCursor(3, 1);
if (monthSet > 12)
{
monthSet = 1;
}
}
delay(170);
}
buttonState4 = digitalRead(buttonPin4);
if (buttonState4 == HIGH)
{
//dayOfMonth down
if (clicks2 == 0)
{
lcd.setCursor(0, 1);
dayMonthSet -= 1;
lcd.setCursor(0, 1);
if (monthSet == 4 || monthSet == 6 || monthSet == 6 || monthSet == 9 || monthSet == 11)
{
if (dayMonthSet < 1)
{
dayMonthSet = 30;
}
}
else
{
if (dayMonthSet < 1)
{
dayMonthSet = 31;
}
}
}
//month down
if (clicks2 == 1)
{
lcd.setCursor(3, 1);
if (monthSet == 1)
{
monthSet = 12;
}
else
{
monthSet -= 1;
}
}
delay(170);
}
fixSetDate();
lcd.setCursor(0, 0);
lcd.print("Set Date: ");
lcd.setCursor(0, 1);
lcd.print(dayMonthSetDisplay);
lcd.print("/");
lcd.print(monthSetDisplay);
lcd.print(" ");
if (clicks2 == 0)
{
lcd.setCursor(0, 1);
}
if (clicks2 == 1)
{
lcd.setCursor(3, 1);
}
// seconds, minutes, hours, day of the week, day of the month, month, year
myRTC.setDS1302Time(secondsSet, minutesSet, hoursSet, dayWeekSet, dayMonthSet, monthSet, 2021);
//delay(170);
}
void set_day()
{
dayWeekSet = myRTC.dayofweek;
buttonState1 = digitalRead(buttonPin1);
//next screen
if (digitalRead(buttonPin1) == HIGH)
{
if (buttonActive == false)
{
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) &&
(longPressActive == false))
{
longPressActive = true;
//stop from hold click;
}
}
else
{
if (buttonActive == true)
{
if (longPressActive == true)
{
longPressActive = false;
}
else
{
//next screen
lcd.clear();
screens += 1;
}
buttonActive = false;
}
}
//day up
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH)
{
lcd.setCursor(0, 1);
dayWeekSet += 1;
lcd.setCursor(0, 1);
if (dayWeekSet > 7)
{
dayWeekSet = 7;
}
delay(170);
}
//day down
buttonState4 = digitalRead(buttonPin4);
if (buttonState4 == HIGH)
{
lcd.setCursor(0, 1);
dayWeekSet -= 1;
lcd.setCursor(0, 1);
if (dayWeekSet < 1)
{
dayWeekSet = 30;
}
delay(170);
}
//print day
fixTimeDate();
lcd.setCursor(0, 0);
lcd.print("Set Day Of Week: ");
lcd.setCursor(0, 1);
lcd.print(dayWeekDisplay);
lcd.print(" ");
lcd.setCursor(3, 1);
// seconds, minutes, hours, day of the week, day of the month, month, year
myRTC.setDS1302Time(secondsSet, minutesSet, hoursSet, dayWeekSet, dayMonthSet, monthSet, 2021);
}
void set_year()
{
yearSet = myRTC.year;
//next screen
buttonState1 = digitalRead(buttonPin1);
if (digitalRead(buttonPin1) == HIGH)
{
if (buttonActive == false)
{
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) &&
(longPressActive == false))
{
longPressActive = true;
//stop from hold click;
}
}
else
{
if (buttonActive == true)
{
if (longPressActive == true)
{
longPressActive = false;
}
else
{
//next screen
lcd.clear();
screens = 1;
}
buttonActive = false;
}
}
//year up
buttonState2 = digitalRead(buttonPin2);
if (buttonState2 == HIGH)
{
lcd.setCursor(0, 1);
yearSet += 1;
lcd.setCursor(0, 1);
delay(170);
}
//year down
buttonState4 = digitalRead(buttonPin4);
if (buttonState4 == HIGH)
{
lcd.setCursor(0, 1);
yearSet -= 1;
lcd.setCursor(0, 1);
delay(170);
}
//print year
lcd.setCursor(0, 0);
lcd.print("Set year: ");
lcd.setCursor(0, 1);
lcd.print(yearSet);
lcd.print(" ");
lcd.setCursor(3, 1);
// seconds, minutes, hours, day of the week, day of the month, month, year
myRTC.setDS1302Time(secondsSet, minutesSet, hoursSet, dayWeekSet, dayMonthSet, monthSet, yearSet);
}
void alarmOnOff()
{
//next screen
buttonState1 = digitalRead(buttonPin1);
if (digitalRead(buttonPin1) == HIGH)
{
if (buttonActive == false)
{
buttonActive = true;
buttonTimer = millis();
}
if ((millis() - buttonTimer > longPressTime) &&
(longPressActive == false))
{
longPressActive = true;
//stop from hold click;
}
}
else
{
if (buttonActive == true)
{
if (longPressActive == true)
{
longPressActive = false;
}
else
{
//next screen
lcd.clear();
screens = 1;
}
buttonActive = false;
}
}
//alarm on/off
buttonState2 = digitalRead(buttonPin2);
buttonState4 = digitalRead(buttonPin4);
if (buttonState2 == HIGH || buttonState4 == HIGH)
{
lcd.setCursor(0, 1);
Serial.println(alarmToggleSet);
if (alarmToggleSet)
{
alarmToggleSet = false;
}
else
{
alarmToggleSet = true;
}
lcd.setCursor(0, 1);
delay(170);
}
//print alarmToggle
lcd.setCursor(0, 0);
lcd.print("Alarm on / off: ");
lcd.setCursor(0, 1);
if (alarmToggleSet == true)
{
lcd.print("On");
}
else
{
lcd.print("Off");
}
lcd.print(" ");
lcd.setCursor(3, 1
}

The article was first published in hackster, August 2, 2021

cr: https://www.hackster.io/dzh121/all-in-one-clock-6ca214

author: dzh121

License
1
BY
licensBg
0