#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

#define ds3231_adr 0x68

void setup()
{
  Wire.begin();
  lcd.init();                      // initializacija LCD-a
  lcd.backlight();
  Serial.begin(9600);
  lcd.setCursor(2,0);
  lcd.print(":");
  lcd.setCursor(5,0);
  lcd.print(":");
}


uint8_t currentTime[6]={100,100,100,100,100,100};

void readTime()
{
  Wire.beginTransmission(ds3231_adr);
  Wire.write(0x00);
  byte I2Cerror = Wire.endTransmission();
  if (I2Cerror)
  {
    Serial.print("I2C error :");
    Serial.println(I2Cerror);
    return;
  }

  Wire.requestFrom(ds3231_adr, 3);
  
  // while(Wire.available() != 3) ; 
  byte secondsBCD = Wire.read();
  byte minutesBCD = Wire.read();
  byte hoursBCD = Wire.read();

  uint8_t sec1 = (secondsBCD & 0x0F);
  uint8_t sec10 = (secondsBCD >> 4) ;

  
  uint8_t min1 = (minutesBCD & 0x0F);
  uint8_t min10 = (minutesBCD >> 4) ;

  uint8_t hour1  = (hoursBCD & 0x0F);
  uint8_t hour10 = (hoursBCD >> 4);
  
  if (sec1   !=  currentTime[5])  {
      currentTime[5]=sec1;
      lcd.setCursor(7,0);
      lcd.print(sec1);
  }
  
  if (sec10   !=  currentTime[4])  {
      currentTime[4]=sec10;
      lcd.setCursor(6,0);
      lcd.print(sec10);
  }

  if (min1   !=  currentTime[3])  {
      currentTime[3]=min1;
      lcd.setCursor(4,0);
      lcd.print(min1);
  }

  if (min10   !=  currentTime[2])  {
      currentTime[2]=min10;
      lcd.setCursor(3,0);
      lcd.print(min10);
  }  
  
  if (hour1   !=  currentTime[1])  {
        currentTime[1]=hour1;
        lcd.setCursor(1,0);
        lcd.print(hour1);
    }

    if (hour10   !=  currentTime[0])  {
        currentTime[0]=hour10;
        lcd.setCursor(0,0);
        lcd.print(hour10);
    }  

    Serial.print(hoursBCD,HEX);Serial.print(":");
    Serial.print(minutesBCD,HEX);Serial.print(":");
    Serial.print(secondsBCD,HEX);
    Serial.print("\n");
}

void loop()
{
  readTime();
  delay(100);
}
GND5VSDASCLSQWRTCDS1307+