#include "RTClib.h"
#include "ShiftRegister74HC595.h"
#include "Wire.h"
RTC_DS1307 rtc;
ShiftRegister74HC595<2> sr(11, 12, 8);
int MatricaSatDeset[4];
int MatricaSatJedan[4];
int MatricaMinDeset[4];
int MatricaMinJedan[4];
int SatDeset=0;
int SatJedan=0;
int MinDeset=0;
int MinJedan=0;
int SatDesetStari;
int SatJedanStari;
int MinDesetStari;
int MinJedanStari;
byte GumbSat=7;
byte GumbMin=6;
byte GumbProg=3;
int ProgSat;
int ProgMin;
bool program=false;
void setup(){
Serial.begin(9600);
pinMode(GumbSat, INPUT_PULLUP);
pinMode(GumbMin, INPUT_PULLUP);
pinMode(GumbProg, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(GumbProg), programiranje, FALLING);
if (! rtc.begin()) {
abort();
}
//if (! rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//}
}
void loop(){
DateTime now = rtc.now();
ProgSat=now.hour();
ProgMin=now.minute();
SatDeset=now.hour()/10;
SatJedan=now.hour()-SatDeset*10;
MinDeset=now.minute()/10;
MinJedan=now.minute()-MinDeset*10;
if (SatDesetStari==SatDeset){
}
else{
gasenje(12);
brojmatrica(SatDeset, MatricaSatDeset);
paljenje(12, MatricaSatDeset);
}
if (SatJedanStari==SatJedan){
}
else{
gasenje(8);
brojmatrica(SatJedan, MatricaSatJedan);
paljenje(8, MatricaSatJedan);
}
if (MinDesetStari==MinDeset){
}
else{
gasenje(4);
brojmatrica(MinDeset, MatricaMinDeset);
paljenje(4, MatricaMinDeset);
}
if (MinJedanStari==MinJedan){
}
else{
gasenje(0);
brojmatrica(MinJedan, MatricaMinJedan);
paljenje(0, MatricaMinJedan);
}
SatDesetStari=SatDeset;
SatJedanStari=SatJedan;
MinDesetStari=MinDeset;
MinJedanStari=MinJedan;
//if (digitalRead(GumbProg)==0){
//program=!program;
//delay(200);
//}
if (program==1){
gasenje(12);
gasenje(8);
gasenje(4);
gasenje(0);
delay(500);
paljenje(12, MatricaSatDeset);
paljenje(8, MatricaSatJedan);
paljenje(4, MatricaMinDeset);
paljenje(0, MatricaMinJedan);
delay(500);
}
if (digitalRead(GumbProg)==0){
program=!program;
delay(200);
}
if (program==1 && digitalRead(GumbSat)==0){
//delay(200);
ProgSat++;
rtc.adjust(DateTime(now.year(), now.month(), now.day(), ProgSat, now.minute(), 0));
}
if (program==1 && digitalRead(GumbMin)==0){
//delay(200);
ProgMin++;
rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), ProgMin, 0));
}
//}
Serial.println(program);
//delay(500);
}
void brojmatrica(int broj, int i_matrica[4]){
int binarnamreza[4]={8,4,2,1};
int j;
if (broj>0){
while (broj>0){
for (int i=0; i<4; i++){
j=broj/binarnamreza[i];
i_matrica[i]=j;
broj=broj-j*binarnamreza[i];
}
}
}
else {
for (int i=0; i<4; i++){
i_matrica[i]=0;
}
}
}
void paljenje (int pomak, int u_matrica[4]){
for (int i=0; i<4; i++){
if (u_matrica[i]==1){
sr.set(pomak+abs(3-i), HIGH);
}
}
}
void gasenje (int pomak){
for (int i=0; i<4; i++){
sr.set(pomak+i, LOW);
}
}
void programiranje() {
program = !program;
delay(200);
}