/**
  Simple Serial-like debug interface example
  for the Franzininho DIY (ATtiny85 chip) on the Wokwi simulator.
  by Anderson Costa with ❤ for the Wokwi community

  TinyDebug Library by Uri Shaked https://github.com/wokwi/TinyDebug

  Visit https://wokwi.com to learn about the Wokwi Simulator
  Visit https://franzininho.com.br to learn about the Franzininho
*/
#include <TinyWireM.h>
#include <TinyDebug.h>

#define DS1307_ADDR 0x68
#define LED1        PB1

uint8_t seconds;
uint8_t minutes;
uint8_t hours;
uint8_t dayOfWeek;
uint8_t day;
uint8_t month;
uint16_t year;

void setup() {
  Debug.begin();
  TinyWireM.begin();
  pinMode(PIN1, OUTPUT);
  delay(2000);
}

void loop() {
  uint8_t wireRet = 0;

  TinyWireM.beginTransmission(DS1307_ADDR);      // Reset DS1307 register pointer
  TinyWireM.send(0x00);
  wireRet = TinyWireM.endTransmission();

  if (wireRet) {                                 // Report any send esrrors
    Debug.print("SendError: ");
    Debug.println(wireRet, DEC);
    delay(1500);
  }

  // Request 7 bytes from DS1307
  TinyWireM.requestFrom(DS1307_ADDR, 7);

  seconds = bcdToDec(TinyWireM.receive() & 0x7F);
  minutes = bcdToDec(TinyWireM.receive());
  hours = bcdToDec(TinyWireM.receive());
  dayOfWeek = TinyWireM.receive();
  day = bcdToDec(TinyWireM.receive());
  month = bcdToDec(TinyWireM.receive());
  year = bcdToDec(TinyWireM.receive()) + 2000;

  Debug.print("Current time: ");
  Debug.print(hours);
  Debug.print(":");
  Debug.print(minutes);
  Debug.print(":");
  Debug.println(seconds);

  Debug.print("Current date: ");
  Debug.print(day);
  Debug.print("/");
  Debug.print(month);
  Debug.print("/");
  Debug.println(year);
  Debug.println();

  digitalWrite(LED1, HIGH);
  delay(500);
  digitalWrite(LED1, LOW);
  delay(500);
}

// Convert binary coded decimal to normal decimal numbers
uint8_t bcdToDec(uint8_t value) {
  return ((value / 16 * 10) + (value % 16));
}
GND5VSDASCLSQWRTCDS1307+