#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "RTClib.h"
uint8_t month, day, hour, minute, second;
uint16_t year;
RTC_DS3231 rtc;
//char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing reset pin)
#define CT_pin 2
char dddd = 17 ;
//************Button that will be used on Arduino Pins*****************//
int P1 = 14; // Button SET MENU'
int P2 = 12; // Button +
int P3 = 13; // Button -
//************Variables Used Including New Debounce Variable**************//
int hourupg;
int minupg;
int yearupg;
int monthupg;
int dayupg;
int menu=0;
const int debounce = 100;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup()
{
Serial.begin(9600);
pinMode(CT_pin, OUTPUT);
pinMode(P1,INPUT);
pinMode(P2,INPUT);
pinMode(P3,INPUT);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
rtc.adjust(DateTime(__DATE__, __TIME__));
//rtc.adjust(DateTime(2023, 9, 9, 11, 15, 45));
display.display();
delay(2);
display.clearDisplay();
display.clearDisplay();
display.setTextColor(WHITE);
//display.startscrollright(0x00, 0x0F);
display.setTextSize(3);
display.setCursor(0,5);
display.print(" Clock ");
display.display();
delay(1000);
}
void loop()
{
// in which subroutine should we go?
if (menu==0)
{
DisplayDateTime(); // void 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(50);
}
void DisplayDateTime ()
{
// We show the current date and time
DateTime now = rtc.now();
display.clearDisplay();
if(digitalRead(P1)){
menu=1;
delay(debounce);
}
display.setTextSize(2);
display.setCursor(5,0);
if (now.hour()<=9)
{
display.println("0");
display.setCursor(20,0);
}
display.print(now.hour(), DEC);
hourupg=now.hour();
display.setCursor(35,0);
display.print(":");
display.setCursor(50,0);
if (now.minute()<=9)
{
display.print("0");
display.setCursor(65,0);
}
display.print(now.minute(), DEC);
minupg=now.minute();
display.setCursor(80,0);
display.print(":");
if(digitalRead(P1)){
menu=1;
delay(debounce);
}
display.setCursor(95,0);
if (now.second()<=9)
{
display.print("0");
display.setCursor(110,0);
}
display.print(now.second(), DEC);
display.setCursor(0,25);
if (now.day()<=9)
{
display.print("0");
display.setCursor(14,25);
}
display.print(now.day(), DEC);
dayupg=now.day();
if(digitalRead(P1)){
menu=1;
delay(debounce);
}
display.setCursor(36,25);
if (now.month()<=9)
{
display.print("0");
display.setCursor(50,25);
}
display.print(now.month(), DEC);
monthupg=now.month();
display.setCursor(75,25);
display.print(now.year(), DEC);
yearupg=now.year();
if(digitalRead(P1)){
menu=1;
delay(debounce);
}
display.display();
}
void DisplaySetHour()
{
// time setting
while(!digitalRead(P1)){
if(digitalRead(P2)==HIGH)
{
if(hourupg==23)
{
hourupg=0;
}
else
{
hourupg=hourupg+1;
}
delay(debounce);
}
if(digitalRead(P3)==HIGH)
{
if(hourupg==0)
{
hourupg=23;
}
else
{
hourupg=hourupg-1;
}
delay(debounce);
}
display.clearDisplay();
display.setCursor(0,0);
display.print("Set Hour:");
display.setCursor(0,25);
display.print(hourupg,DEC);
display.print(" ");
display.display();
}
menu=2;
delay(debounce);
}
void DisplaySetMinute()
{
// Setting the minutes
while(!digitalRead(P1)){
if(digitalRead(P2)==HIGH)
{
if (minupg==59)
{
minupg=0;
}
else
{
minupg=minupg+1;
}
delay(debounce);
}
if(digitalRead(P3)==HIGH)
{
if (minupg==0)
{
minupg=59;
}
else
{
minupg=minupg-1;
}
delay(debounce);
}
display.clearDisplay();
display.setCursor(0,0);
display.print("Set Minute:");
display.setCursor(0,25);
display.print(minupg,DEC);
display.print(" ");
display.display();
//delay(200);
}
menu=3;
delay(debounce);
}
void DisplaySetYear()
{
// setting the year
while(!digitalRead(P1)){
if(digitalRead(P2)==HIGH)
{
yearupg=yearupg+1;
}
if(digitalRead(P3)==HIGH)
{
yearupg=yearupg-1;
}
delay(debounce);
display.clearDisplay();
display.setCursor(0,0);
display.print("Set Year:");
display.setCursor(0,25);
display.print(yearupg,DEC);
display.print(" ");
display.display();
}
menu=4;
delay(debounce);
}
void DisplaySetMonth()
{
// Setting the month
while(!digitalRead(P1)){
if(digitalRead(P2)==HIGH)
{
if (monthupg==12)
{
monthupg=1;
}
else
{
monthupg=monthupg+1;
}
}
if(digitalRead(P3)==HIGH)
{
if (monthupg==1)
{
monthupg=12;
}
else
{
monthupg=monthupg-1;
}
}
display.clearDisplay();
display.setCursor(0,0);
display.print("Set Month:");
display.setCursor(0,25);
display.print(monthupg,DEC);
display.print(" ");
display.display();
delay(debounce);
}
menu=5;
delay(debounce);
//delay(200);
}
void DisplaySetDay()
{
// Setting the day
delay(debounce);
while(!digitalRead(P1)){
if(digitalRead(P2)==HIGH)
{
if (dayupg==31)
{
dayupg=1;
}
else
{
dayupg=dayupg+1;
}
}
if(digitalRead(P3)==HIGH)
{
if (dayupg==1)
{
dayupg=31;
}
else
{
dayupg=dayupg-1;
}
}
display.clearDisplay();
display.setCursor(0,0);
display.print("Set Day:");
display.setCursor(0,25);
display.print(dayupg,DEC);
display.print(" ");
display.display();
delay(debounce);
}
menu=6;
delay(debounce);
}
void StoreAgg()
{
// Variable saving
display.clearDisplay();
display.setCursor(0,0);
display.print("SAVING IN");
display.setCursor(0,25);
display.print("PROGRESS");
rtc.adjust(DateTime(yearupg,monthupg,dayupg,hourupg,minupg,0));
display.display();
delay(500);
}