/*
:Project:Clock_Set_Date_Time
:Author: Tiziano Bianchettin
:Date: 13/01/2017
:Revision: 1
:License: Public Domain
thanks to:
http://arduinoenonsolo.blogspot.it/2012/12/orologio-con-arduino-e-il-ds1307.html
http://www.mauroalfieri.it/
http://www.danielealberti.it/
http://www.maffucci.it/
My electronics laboratory professor "Perito Carli"
*/
//************libraries**************//
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "RTClib.h"
#include <TimeLib.h>
#include <DHT.h>
#include <Adafruit_Sensor.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define DHTPIN 5
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
RTC_DS1307 RTC;
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE);
int P1=6; // Button SET MENU'
int P2=7; // Button +
int P3=8; // Button -
int P4=9; // SWITCH Alarm
#define LED 13
//#define buzzer 10
int hourupg;
int minupg;
int yearupg;
int monthupg;
int dayupg;
int menu =0;
int setAll =0;
uint8_t alarmHours = 0, alarmMinutes = 0; // Holds the current alarm time
void setup() {
Serial.begin(9600);
Wire.begin();
RTC.begin();
RTC.adjust(DateTime(__DATE__, __TIME__));
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextColor(WHITE);
pinMode(P1,INPUT_PULLUP); // https://www.arduino.cc/en/Tutorial/InputPullupSerial
pinMode(P2,INPUT_PULLUP);
pinMode(P3,INPUT_PULLUP);
pinMode(P4,INPUT_PULLUP);
pinMode(LED,OUTPUT);
int menu=0;
}
void loop() {
if(digitalRead(P1)== LOW)
{
menu=menu+1;
}
if((digitalRead(P2)== LOW)&&(digitalRead(P3)== LOW))
{
DisplaySetHourAll();
DisplaySetMinuteAll();
display.clearDisplay();
display.setCursor(0,0);
display.print("ALARM");
display.print(":");
display.print(" ");
display.print(alarmHours, DEC);
display.print(":");
display.print(alarmMinutes, DEC);
display.display();
delay(1000);
}
// in which subroutine should we go?
if (menu==0)
{
DisplayDateTime();
}
if (menu==1)
{
DisplaySetHour();
}
if (menu==2)
{
DisplaySetMinute();
}
if (menu==3)
{
DisplaySetYear();
}
if (menu==4)
{
DisplaySetMonth();
}
if (menu==5)
{
DisplaySetDay();
}
if (menu==6)
{
StoreAgg();
delay(500);
menu=0;
}
delay(100);
}
void DisplayDateTime ()
{
// We show the current date and time
display.clearDisplay();
DateTime now = RTC.now();
display.setCursor(0,39);
display.print("HOUR : ");
if (now.hour()<=9)
{
display.print("0");
}
display.print(now.hour(), DEC);
hourupg=now.hour();
display.print(":");
if (now.minute()<=9)
{
display.print("0");
}
display.print(now.minute(), DEC);
minupg=now.minute();
display.print(":");
if (now.second()<=9)
{
display.print("0");
}
display.print(now.second(), DEC);
display.setCursor(0,47);
display.print("PVM: ");
if (now.day()<=9)
{
display.print("0");
}
display.print(now.day(), DEC);
dayupg=now.day();
display.print(".");
if (now.month()<=9)
{
display.print("0");
}
display.print(now.month(), DEC);
monthupg=now.month();
display.print(".");
display.print(now.year(), DEC);
yearupg=now.year();
char DOW[][10]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
display.setCursor(0,55);
display.print("DAY: ");
display.print(DOW[now.dayOfTheWeek()]);
//Alarm control
if(digitalRead(P4)== LOW)
{
setAll=setAll+1;
}
if (setAll==0)
{
printAllOff();
//noTone (buzzer);
digitalWrite(LED,LOW);
}
if (setAll==1)
if (setAll==1)
{
printAllOn();
DateTime now = RTC.now();
if ( now.hour() == alarmHours && now.minute() == alarmMinutes )
{
DateTime now = RTC.now();
digitalWrite(LED,HIGH);
//tone(buzzer,880); //play the note "A5" (LA5)
//delay (300);
//tone(buzzer,698); //play the note "F6" (FA5)
}
else{
//noTone (buzzer);
digitalWrite(LED,LOW);
}
}
if (setAll==2)
{
setAll=0;
}
display.display();
}
void DisplaySetHour()
{
// time setting
display.clearDisplay();
DateTime now = RTC.now();
if(digitalRead(P2)==LOW)
{
if(hourupg==23)
{
hourupg=0;
}
else
{
hourupg=hourupg+1;
}
}
if(digitalRead(P3)==LOW)
{
if(hourupg==0)
{
hourupg=23;
}
else
{
hourupg=hourupg-1;
}
}
display.setCursor(0,30);
display.print("Set time:");
display.print(hourupg,DEC);
display.display();
delay(200);
}
void DisplaySetMinute()
{
// Setting the minutes
display.clearDisplay();
if(digitalRead(P2)==LOW)
{
if (minupg==59)
{
minupg=0;
}
else
{
minupg=minupg+1;
}
}
if(digitalRead(P3)==LOW)
{
if (minupg==0)
{
minupg=59;
}
else
{
minupg=minupg-1;
}
}
display.setCursor(0,30);
display.print("Set Minutes:");
display.print(minupg,DEC);
display.display();
delay(200);
}
void DisplaySetYear()
{
// setting the year
display.clearDisplay();
if(digitalRead(P2)==LOW)
{
yearupg=yearupg+1;
}
if(digitalRead(P3)==LOW)
{
yearupg=yearupg-1;
}
display.setCursor(0,30);
display.print("Set Year:");
display.print(yearupg,DEC);
display.display();
delay(200);
}
void DisplaySetMonth()
{
// Setting the month
display.clearDisplay();
if(digitalRead(P2)==LOW)
{
if (monthupg==12)
{
monthupg=1;
}
else
{
monthupg=monthupg+1;
}
}
if(digitalRead(P3)==LOW)
{
if (monthupg==1)
{
monthupg=12;
}
else
{
monthupg=monthupg-1;
}
}
display.setCursor(0,30);
display.print("Set Month:");
display.print(monthupg,DEC);
display.display();
delay(200);
}
void DisplaySetDay()
{
// Setting the day
display.clearDisplay();
if(digitalRead(P2)==LOW)
{
if (dayupg==31)
{
dayupg=1;
}
else
{
dayupg=dayupg+1;
}
}
if(digitalRead(P3)==LOW)
{
if (dayupg==1)
{
dayupg=31;
}
else
{
dayupg=dayupg-1;
}
}
display.setCursor(0,30);
display.print("Set Day:");
display.print(dayupg,DEC);
display.display();
delay(200);
}
void StoreAgg()
{
// Variable saving
display.clearDisplay();
display.setCursor(0,30);
display.print("SAVING IN");
display.setCursor(0,40);
display.print("PROGRESS");
RTC.adjust(DateTime(yearupg,monthupg,dayupg,hourupg,minupg,0));
display.display();
delay(500);
}
void DisplaySetHourAll()// Setting the alarm minutes
{
while(digitalRead(P1)==HIGH){
display.clearDisplay();
if(digitalRead(P2)==LOW)
{
if(alarmHours==23)
{
alarmHours=0;
}
else
{
alarmHours=alarmHours+1;
}
}
if(digitalRead(P3)==LOW)
{
if(alarmHours==0)
{
alarmHours=23;
}
else
{
alarmHours=alarmHours-1;
}
}
display.setCursor(0,0);
display.print("Set HOUR Alarm:");
display.print(alarmHours,DEC);
display.display();
delay(200);
}
delay(200);
}
void DisplaySetMinuteAll()// Setting the alarm minutes
{
while(digitalRead(P1)==HIGH){
display.clearDisplay();
if(digitalRead(P2)==LOW)
{
if (alarmMinutes==59)
{
alarmMinutes=0;
}
else
{
alarmMinutes=alarmMinutes+1;
}
}
if(digitalRead(P3)==LOW)
{
if (alarmMinutes==0)
{
alarmMinutes=59;
}
else
{
alarmMinutes=alarmMinutes-1;
}
}
display.setCursor(0,0);
display.print("Set MIN. Alarm:");
display.print(alarmMinutes,DEC);
display.display();
delay(200);
}
delay(200);
}
void printAllOn(){
display.setCursor(0,0);
display.print("Alarm: ");
if (alarmHours <= 9)
{
display.print("0");
}
display.print(alarmHours, DEC);
display.print(":");
if (alarmMinutes <= 9)
{
display.print("0");
}
display.print(alarmMinutes, DEC);
display.display();
}
void printAllOff() {
display.setCursor(0,0);
display.print("Alarm: Off ");
display.display();
}