Boa noite nobres camaradas. Gostaria de um auxilio vosso para um problema que estou tendo no meu projeto em arduino.

Estou com um código onde eu seleciono e guardo os valores de hora, minuto e segundo em variáveis especificas tipo String. onde esses valores representam o horário que desejo que ative meu equipamento.

HoraComer1 = HoraAtual1;
MinutoComer1 = MinAtual1;
SegundoComer1 = SegAtual1;

Fiz todo o programa sobre a biblioteca do RTC DS1307, ate onde comparava a hora diretamente usando uma STRING não tinha problemas como no exemplo abaixo:

HoradeComer = rtc.getTimeStr();

if (HoradeComer = "00:00:00"){
digitalWrite (Saida11, LOW);
}

Mas agora gostaria de puxar da biblioteca os valores específicos de hora, minuto e segundo para fazer uma conversão em segundos ou seja la o que for que a biblioteca fornece.

Ou ainda transformar estes valores que eu gravo nas variáveis acima em uma string neste formato "00:00:00" para poder efetuar a comparação do mesmo modo que já fazia.  

 

Exibições: 582

Responder esta

Respostas a este tópico

João, dá uma olhadinha do manual do DS1307 que você nem precisará de biblioteca. Eu mesmo criei para mim uma função personalizada para LER e ESCREVER dados no RTC. No manual está bem explicado como acessar esses dados diretamente (sem biblioteca).

Aproveitando, não tem relação com seu tópico, mas dê uma olhada neste post antigo também:

http://labdegaragem.com/forum/topics/rtc-ds1307-adiantando?id=62230...

Manual:

https://datasheets.maximintegrated.com/en/ds/DS1307.pdf

Página 8: CLOCK AND CALENDAR

As memórias estão organizadas dessa forma:

Muito obrigado willian. Estou analisando a documentação que você comentou, não querendo abusar mas ja abusando poderia me dar um exemplo do codigo que voce fez para ler e escrever ?

As minhas funções foram feitas para PIC, usando MikroC no desenvolvimento, então ficou meio específico. Além disso está tudo dentro de uma estrutura que também incorpora a comunicação via I2C, portanto para eu te passar "alguma coisa" teria que passar tudo.

Mas faça o seguinte para começar:

1) Comece da comunicação I2C que já tem biblioteca pronta no próprio Arduino. Tente se comunicar com qualquer dispositivo que opere com I2C (uma memória de qualquer tipo é um ótimo começo) para entender como funciona. Caso já conheça isso, então está mais fácil;

2) Interprete a tabela de registradores do DS1307: 

    Linha 1: Registrador 0x00 (ou 00h = 0 Hexa): armazena os "segundos" do horário;

    Linha 2: Registrador 0x01 (ou 00h = 0 Hexa): armazena os "minutos" do horário;

    Linha3: etc....

Observando que todos os valores dos registradores são armazenados em BCD.

Função de conversão Decimal - BCD:

https://stackoverflow.com/questions/45655484/bcd-to-decimal-and-dec...

IMPORTANTE: Mantenha em "0" o bit 7 do registrador 0x00 para que o relógio funcione. Caso contrário o oscilador interno não irá atuar no horário e o relógio permanecerá parado.

Vai postando as dúvidas, pois o pessoal aqui é muito rápido para responder.

Essa parte realmente não conheço, sou BEEEEEM iniciante nisso.

Estive pesquisando para o arduino o I2C depende de um shield especial. Não estava pensando em incluir outro shield no projeto. Ou há outro modo de fazer isso?

Bom dia J2C,

a biblioteca que vc está usando tem um exemplo de nome "DS1307_LCD" ?

RV

PS; Existem várias biblotecas para o DS1307. Qual vc está usando?

Bom dia, estou usando 

DS1307.h

João, depende do processador que você está usando... a maior parte deles já tem I2C. Exemplo, o ATmega328 que é um excelente microcontrolador e bem comum nos kits Arduino (que eu nunca usei...) tem I2C. Portanto, neste caso, não é necessário incluir outro child e você pode "falar" diretamente com o DS1307 ou outro chip qualquer.

Datasheet ATmega328: https://www.sparkfun.com/datasheets/Components/SMD/ATMega328.pdf

EXEMPLOS I2C COM ARDUINO:

Peguei esses dois exemplos abaixo, pois foram os primeiros que vieram na pesquisa. Mas com certeza aqui mesmo no LdG tem um monte de coisas.

http://www.arduinobr.com/arduino/i2c-protocolo-de-comunicacao/

http://www.arduinobr.com/arduino/at24c256-i2c-e-o-modulo-eeprom-at2...

João, como você disse que é iniciante, talvez isso também possa lhe ajudar, tal como me ajudou muito quando comecei. Ainda sou iniciante também e constantemente estou pedindo ajuda pro pessoal, mas assistindo as aulas DESSE CANAL eu aprendi muito. Neste link está o curso para AVR com Arduino (comecei com PIC), mas tem um monte de outros vídeos que poderão te orientar no início, incluindo a orientação sobre como ler e procurar informações nos datasheets. Compensa investir um tempo.

vou verificar, obrigado.

Consegui valores dos registradores, mas eles não se atualizam só as vezes quando eu carrego novamente o programa. O RTC não parece parado afinal se eu carrego o programa ele me mostra outro valor.

JCC,

veja se este code que escrevi te ajuda.

https://pastebin.com/fiCsiJS1

Detalhe: O serial monitor está em 115200, pode mudar para 9600 se precisar.

RV

Mineirin, boa tarde, acabo de testar o código que você me enviou e é o que eu estava querendo, vou experimentar no meu código.

Muito obrigado

Boa tarde Willian, tenho algumas video aulas comigo mas não sabia dessas, ja assisti algumas e já guardei o link nos meus arquivos de consulta. Bastante interessante essa comunicação I2C, como bom NOOB eu desconhecia.

Muito obrigado pela ajuda.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço