#include <U8g2lib.h>
#include <Arduino.h>
#include <RTClib.h>
#include <Wire.h>
// Initialize the OLED display
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
RTC_DS3231 rtc;
//Constants
char daysOfTheWeek[7][12] = {"Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const int btSet = 8;
const int btUp = 7;
const int btDown = 6;
const int buzzer = 9;
//Variables
int DD,MM,YY,H,M,S;
int btnCount = 0;
unsigned long previousMillis = 0;
unsigned long currentMillis;
int set;
int up;
int down;
String sDD;
String sMM;
String sYY;
String sH;
String sM;
String sS;
float T;
boolean setupScreen = false;
boolean backlightON = true;
// Declare a variable to hold the number to be displayed
int number = 42;
void setup() {
u8g2.begin();
rtc.begin();
//Serial.begin(57600);
pinMode(btSet, INPUT_PULLUP);
pinMode(btUp, INPUT_PULLUP);
pinMode(btDown, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
}
void loop() {
getTime();
readBtn();
if (!setupScreen){
oledPrint();
}
else{
oledSetup();
}
}
void getTime() {
if (!setupScreen){
DateTime now = rtc.now();
DD = now.day();
MM = now.month();
YY = now.year();
H = now.hour();
M = now.minute();
S = now.second();
T = rtc.getTemperature();
}
}
void readBtn() {
set = digitalRead(btSet);
up = digitalRead(btUp);
down = digitalRead(btDown);
if (set==LOW){
if(btnCount<5){
btnCount++;
setupScreen = true;
if(btnCount==1){
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0, 10);
u8g2.print("- - - - - - NASTAV - - - - - -");
u8g2.setCursor(0, 25);
u8g2.print("- - CAS A DATUM - - ");
u8g2.sendBuffer();
delay(1000);
u8g2.clearBuffer();
u8g2.sendBuffer();
}
}
else {
u8g2.clearBuffer();
rtc.adjust(DateTime(YY, MM, DD, H, M, 0));
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(20, 10);
u8g2.print(". . . Ukladam . . . .");
u8g2.sendBuffer();
delay(2000);
setupScreen = false;
btnCount=0;
}
delay(250);
}
if (set==LOW || up==LOW || down==LOW) {
digitalWrite(buzzer, HIGH);
}
else {
digitalWrite(buzzer, LOW);
}
if (down==LOW && btnCount==0) {
if (backlightON==true) {
u8g2.setPowerSave(1);
backlightON = false;
}
else {
u8g2.setPowerSave(0);
backlightON = true;
}
delay(250);
}
}
void oledPrint() {
String teplota = "Teplota: " + String(T);
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0, 10);
u8g2.print(teplota);
u8g2.setCursor(80, 10);
u8g2.print("C");
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(00, 25);
u8g2.print("Datum -");
u8g2.setCursor(50, 25);
u8g2.print(DD);
u8g2.print(" / ");
u8g2.print(MM);
u8g2.print(" / ");
u8g2.print(YY);
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(45 - u8g2.getStrWidth("Cas - "), 40);
u8g2.print("Cas - ");
u8g2.setCursor(50, 40);
u8g2.print(H);
u8g2.print(" : ");
u8g2.print(M);
u8g2.print(" : ");
u8g2.print(S);
u8g2.sendBuffer();
delay(500);
}
void oledSetup(){
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.clearBuffer();
if (btnCount==1){
u8g2.setCursor(30, 40);
u8g2.print(">");
if (up == LOW){
if (H<23){
H++;
}
else {
H=0;
}
delay(250);
}
if (down == LOW){
if (H>0){
H--;
}
else {
H=23;
}
delay(250);
}
}
else if (btnCount==2){
u8g2.setCursor(55, 40);
u8g2.print(">");
if (up == LOW){
if (M<59){
M++;
}
else {
M=0;
}
delay(250);
}
if (down == LOW){
if (M>0){
M--;
}
else {
M=59;
}
delay(250);
}
}
else if (btnCount==3){
u8g2.setCursor(45, 25);
u8g2.print(">");
if (up == LOW){
if (DD<31){
DD++;
}
else {
DD=1;
}
delay(250);
}
if (down == LOW){
if (DD>1){
DD--;
}
else {
DD=31;
}
delay(250);
}
}
else if (btnCount==4){
u8g2.setCursor(70, 25);
u8g2.print(">");
if (up == LOW){
if (MM<12){
MM++;
}
else {
MM=1;
}
delay(250);
}
if (down == LOW){
if (MM>1){
MM--;
}
else {
MM=12;
}
delay(250);
}
}
else if (btnCount==5){
u8g2.setCursor(90, 25);
u8g2.print(">");
if (up == LOW){
if (YY<2999){
YY++;
}
else {
YY=2000;
}
delay(250);
}
if (down == LOW){
if (YY>2000){
YY--;
}
else {
YY=2999;
}
delay(250);
}
}
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0, 25);
u8g2.print("Datum - ");
u8g2.setCursor(50, 25);
u8g2.print(DD);
u8g2.print(" /");
u8g2.setCursor(75, 25);
u8g2.print(MM);
u8g2.print(" /");
u8g2.setCursor(100, 25);
u8g2.print(YY);
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.setCursor(0, 40);
u8g2.print("Cas - ");
u8g2.setCursor(35, 40);
u8g2.print(H);
u8g2.setCursor(50, 40);
u8g2.print(":");
u8g2.setCursor(65, 40);
u8g2.print(M);
u8g2.print(": ");
u8g2.print(S);
u8g2.sendBuffer();
delay(1000);
}