#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#define RTC_ADDR 0x68 // Endereço I2C do DS1307 [cite: 73]
uint8_t decToBcd(int val) { return (uint8_t)((val/10*16) + (val%10)); }
uint8_t bcdToDec(uint8_t val) { return (uint8_t)((val/16*10) + (val%16)); }
int main() {
stdio_init_all();
i2c_init(i2c1, 100000);
gpio_set_function(14, GPIO_FUNC_I2C); // SDA no GP14
gpio_set_function(15, GPIO_FUNC_I2C); // SCL no GP15
gpio_pull_up(14); gpio_pull_up(15);
// Setup: Seg, Min, Hora, DiaSem, DiaMes, Mes, Ano [cite: 78]
uint8_t config[] = {0x00, 0x00, decToBcd(27), decToBcd(13), 0x03, decToBcd(24), decToBcd(9), decToBcd(24)};
i2c_write_blocking(i2c1, RTC_ADDR, config, 8, false);
while (true) {
uint8_t reg = 0x00, buf[7];
i2c_write_blocking(i2c1, RTC_ADDR, ®, 1, true);
i2c_read_blocking(i2c1, RTC_ADDR, buf, 7, false);
printf("Data/Hora: %02d/%02d/20%02d %02d:%02d:%02d\n",
bcdToDec(buf[4]), bcdToDec(buf[5]), bcdToDec(buf[6]),
bcdToDec(buf[2]), bcdToDec(buf[1]), bcdToDec(buf[0]));
sleep_ms(5000); // Leitura a cada 5 segundos [cite: 76]
}
}