#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include <string.h>
#include "hardware/gpio.h"
#define I2C_ADDR 0x68 // Endereço do dispositivo I2C
static void BCD(char *buf, uint8_t val);
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
while(true) {
uint8_t regs[7];
uint8_t aux[2];
uint16_t pos = 0;
int tpos = 1;
char leitura[] = "Data: xx/xx/xx Hora: xx:xx:xx\n";
if (tpos == 2) {
aux[0] = pos >> 8;
aux[1] = pos & 0xFF;
i2c_write_blocking (i2c0, I2C_ADDR, aux, 2, true);
} else {
aux[0] = pos & 0xFF;
i2c_write_blocking (i2c0, I2C_ADDR, aux, 1, true);
}
i2c_read_blocking(i2c0, I2C_ADDR, regs, 7, false);
BCD (leitura+6, regs[4]);
BCD (leitura+9, regs[5]);
BCD (leitura+12, regs[6]);
BCD (leitura+21, regs[2] & 0x3F);
BCD (leitura+24, regs[1]);
BCD (leitura+27, regs[0] & 0x7F);
printf (leitura);
sleep_ms(5000);
}
return 0;
}
// Converte numero BDC para ASCII
static void BCD (char *buf, uint8_t val) {
buf[0] = (char) ((val >> 4) + '0');
buf[1] = (char) ((val & 0x0F) + '0');
}