#include <stdio.h> // Biblioteca padrão para entrada e saída, utilizada para printf.
#include "pico/stdlib.h" // Biblioteca padrão para funções básicas do Pico, como GPIO e temporização.
#include "hardware/i2c.h" // Biblioteca para controle do I2C
#define I2C_ADDR 0x68 // Endereço do dispositivo I2C
int main() {
stdio_init_all();
i2c_init(i2c0, 100 * 1000); // Inicializa I2C0 a 100khz
gpio_set_function(4, GPIO_FUNC_I2C); // SDA
gpio_set_function(5, GPIO_FUNC_I2C); // SCL
gpio_pull_up(4); // Habilita pull-up para SDA
gpio_pull_up(5); // Habilita pull-up para SCL
uint8_t buffer[8]; // Armazenar os dados enviados ao RTC
buffer[0] = 0x00; // Endereço de início no RTC
buffer[1] = ((0 / 10) << 4) | (0 % 10); // Segundos
buffer[2] = ((27 / 10) << 4) | (27 % 10); // Minutos
buffer[3] = ((13 / 10) << 4) | (13 % 10); // Horas
buffer[5] = ((24 / 10) << 4) | (24 % 10); // Dias
buffer[6] = ((9 / 10) << 4) | (9 % 10); // Meses
buffer[7] = ((24 / 10) << 4) | (24 % 10); // Anos
// Configurar a data e hora do RTC
i2c_write_blocking(i2c0, I2C_ADDR, buffer, 8, false);
while(true) {
buffer[0] = 0x00; // Endereço de início no RTC
// Envia o endereço de início do RTC
i2c_write_blocking(i2c0, I2C_ADDR, buffer, 1, true);
// Faz a leitura dos bytes do RTC
i2c_read_blocking(i2c0, I2C_ADDR, buffer, 7, false);
// BCD para Decimal
int segundos = (buffer[0] >> 4) * 10 + (buffer[0] & 0x0F);
int minutos = (buffer[1] >> 4) * 10 + (buffer[1] & 0x0F);
int horas = (buffer[2] >> 4) * 10 + (buffer[2] & 0x0F);
int dias = (buffer[4] >> 4) * 10 + (buffer[4] & 0x0F);
int meses = (buffer[5] >> 4) * 10 + (buffer[5] & 0x0F);
int anos = (buffer[6] >> 4) * 10 + (buffer[6] & 0x0F);
// Imprime a data e hora no formato DD/MM/YY - HH:MM:SS
printf("Data: %02d/%02d/%02d Hora: %02d:%02d:%02d\n", dias, meses, anos, horas, minutos, segundos);
sleep_ms(5000);
}
return 0;
}