#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"

#define DS_ADDR 0x68 // Endereço do dispositivo I2C
#define SDA_PIN 2
#define SCL_PIN 3

void show_formated_date(int years, int months, int days, int hours, int minutes, int seconds) {
  printf("%02d/%02d/%04d - %02d:%02d:%02d\n\n", days, months, years, hours, minutes, seconds);
  // 24/09/2024 –13:27:00
}

void ds_write(uint8_t reg, uint8_t value) {
  uint8_t data[2] = {reg, value};
  i2c_write_blocking(i2c1, DS_ADDR, data, 2, true);
}

uint8_t ds_read(uint8_t reg) {
  uint8_t value;
  i2c_write_blocking(i2c1, DS_ADDR, &reg, 1, true); // Envia o endereço do registro
  i2c_read_blocking(i2c1, DS_ADDR, &value, 1, false); // Lê o valor do registro
  return value;
}

uint8_t bcd_to_decimal(uint8_t bcd) {
  return (bcd >> 4) * 10 + (bcd & 0x0F);
}

uint8_t decimal_to_bcd(uint8_t decimal) {
    return ((decimal / 10) << 4) + (decimal % 10);
}

int main() {
  stdio_init_all();

  // Inicializa o I2C no I2C_PORT com os pinos definidos
  i2c_init(i2c1, 100 * 1000);
  gpio_pull_up(SDA_PIN);
  gpio_pull_up(SCL_PIN);
  gpio_set_function(SDA_PIN, GPIO_FUNC_I2C);
  gpio_set_function(SCL_PIN, GPIO_FUNC_I2C);
  sleep_ms(100);

  // Configura o DS1307
  ds_write(0x00, decimal_to_bcd(0));
  ds_write(0x01, decimal_to_bcd(27)); // Define minutos como 0
  ds_write(0x02, decimal_to_bcd(13));
  ds_write(0x04, decimal_to_bcd(24));
  ds_write(0x05, decimal_to_bcd(9));
  ds_write(0x06, decimal_to_bcd(24)); // Define segundos como 24 (0-99)

  while (1) {
  // Leitura dos valores
  uint8_t seconds = bcd_to_decimal(ds_read(0x00));
  uint8_t minutes = bcd_to_decimal(ds_read(0x01));
  uint8_t hours = bcd_to_decimal(ds_read(0x02));
  uint8_t days = bcd_to_decimal(ds_read(0x04));
  uint8_t months = bcd_to_decimal(ds_read(0x05));
  uint16_t years = 2000 + bcd_to_decimal(ds_read(0x06));

  fflush(stdout);

  show_formated_date(years, months, days, hours, minutes, seconds);

  sleep_ms(5000);
  }
}
BOOTSELLED1239USBRaspberryPiPico©2020RP2-8020/21P64M15.00TTT
GND5VSDASCLSQWRTCDS1307+