#
# Sistemas Embarcados
# 5.22 Project 17: Using a real-time clock (RTC) module –
# setting/displaying date and time
# Matheus Manfio - 30/11/23
#
from machine import I2C, Pin
from time import sleep
import dht
from pico_i2c_lcd import I2cLcd
from ds1307 import DS1307
# Configurar os pinos SDA e SCL para o I2C
sclPin = Pin(1) # Serial clock pin
sdaPin = Pin(0) # Serial data pin
# Inicializar duas instâncias de I2C para comunicação
i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000) # Usando o construtor I2C para o primeiro dispositivo
i2c_2 = I2C(0, scl=sclPin, sda=sdaPin, freq=400000) # Usando o construtor I2C para o segundo dispositivo
clock = DS1307(i2c_2) # Inicializar o RTC (Real-Time Clock) usando o segundo barramento I2C
# Habilitar o módulo RTC
clock.halt(False) # 32 kHz crystal enable
# Obter o endereço I2C do dispositivo LCD
I2C_ADDR = i2c.scan()[0]
# Inicializar o objeto LCD
lcd = I2cLcd(i2c, I2C_ADDR, 2, 16)
# Função para adicionar zeros à esquerda de um número, se necessário
def Add(number):
if number < 10:
nb = '0' + str(number)
return nb
else:
return str(number)
# Solicitar ao usuário para definir a data e hora se a opção for escolhida
AA = input("Iniciar configuração? [0/1] ")
if AA.upper() == "1":
Y = int(input("Digite o Ano (YYYY) : "))
M = int(input("Digite o Mês (M) : "))
D = int(input("Digite o Dia (D) : "))
h = int(input("Digite o Hora (H) : "))
m = int(input("Digite o Minuto (M) : "))
s = int(input("Digite o Segundo (S) : "))
# Configurar a data e hora do RTC
clock.datetime([Y,M,D,h,m,s,0,0])
# Loop principal
while True:
# Obter a data e hora atual do RTC
dateTime = clock.datetime()
# Exibir data e hora no LCD
lcd.clear()
lcd.putstr("Data: " + Add(dateTime[2]) + "/" + Add(dateTime[1]) + "/" + Add(dateTime[0]) + "\r\n")
lcd.move_to(0, 1)
lcd.putstr("Hora: " + Add(h) + ":" + Add(m) + ":" + Add(s))
sleep(1)