Boa tarde, galera.

Estou com um pequeno problema em meu projeto. Tenho que colher a hora através de RTC para pegar esses dados e jogar na minha lógica fuzzy. Porém os dados saem assim (xx:xx:xx) e para rodar teria que ser (xx.xx.xx). Tentei entrar na biblioteca do rtc ds3231 e alterar por lá, mas não deu certo. Se alguém puder ajudar, agradeço. Segue o exemplo que estou usando.

#include <DS3231.h>
DS3231 rtc(SDA, SCL);

void setup()
{

Serial.begin(9600);
rtc.begin();
//rtc.setTime(15, 22, 0);
//rtc.setDate(7, 10, 2019);
}

void loop()
{

Serial.print(rtc.getDateStr());
Serial.print(" -- ");
Serial.println(rtc.getTimeStr());
delay (1000);
}

Exibições: 832

Responder esta

Respostas a este tópico

Olá Matheus

Algumas bibliotecas do RTC oferecem a opção de mudar o formato da hora.

Não sei qual é a biblioteca que está usando, mas se esse método rtc.getDateStr() retorna uma String, então você pode fazer assim também:

String dataOriginal = rtc.getDateStr();

String dataFormatada = dataOriginal;

dataFormatada.replace(":",".");

Nesse caso, todos os ":" serão substituídos por "." para a variável dataFormatada.

Isso se o retorno de rtc.getDateStr() for uma String.

Opa. Obrigado pela ajuda, José.

Não estou com o computador agora, mas irei testar amanhã e te falo. 

Funcionou. Mas só no exemplo isolado. Quando anexo essa condição ao meu código ele roda, mas não lê, nem no cartão nem no supervisório. Téria alguma forma de juntar duas saídas em uma única variável? Tipo t.hour e t.min fosse igual a tempo ?

Boa tarde, 

Informe o link da biblioteca DS3231 que esta usando. 

Bom dia, José Gustavo. 
Irei anexar a biblioteca, pois não encontrei o link dela. DS3231.zip

Bom dia, 

Na documentação da sua biblioteca consta a origem:

http://www.rinkydinkelectronics.com/library.php?id=73

Eu sempre sugiro o uso de Bibliotecas homologadas pelo Arduino.

http://labdegaragem.com/profiles/blogs/tutorial-arduino-instalando-...

No arquivo DS3231.H veja que poderá alterar o caracter divisor de data => char divider='.' 

Mas para ler o horário, não permite alteração do caracter divisor.

         char  *getTimeStr(uint8_t format=FORMAT_LONG);
         char  *getDateStr(uint8_t slformat=FORMAT_LONG, uint8_t eformat=FORMAT_LITTLEENDIAN, char divider='.');
No arquivo DS3231.CPP , o separador dois pontos é o caracter ASCII 58 ! Como não especialista em SW, uma forma grotesca de mudar para a sua necessidade, seria alterar esse caracter no arquivo da biblioteca. 
Eu procuraria uma outra biblioteca homologada do Arduino. 

Agradeço a ajuda José Gustavo. Realmente, eu analise a biblioteca inteira e não conseguir alterar, já em outras é mais simples. Porém essa biblioteca é a única até o momento que me fornece o horário em uma única variável, as outras fornece separada. Mas estou conseguindo andar. Fiz a seguinte lógica:

String tempo = rtc.getTimeStr();
String data = rtc.getDateStr();

horario = atoi(tempo.c_str());

O problema que estou enfrentando agora é para converter a String, pois se eu deixar a variável tempo como String o sistema não lê, então preciso converter. Mas quando converto para float ou int não aparece o horário inteiro, tipo (8.10) só aparece (8.00).

Olá!

Para converter uma String para float use o méto toFloat:

tempo.toFloat();

Para concatenar duas Strings, pode usar o operador de adição (+) ou o método concat:

string3 = string1 + string2; OU

string3 = string1.concat(atring2)

Opa. Conseguir converter da seguinte maneira:

float horario =0;

char char1[8];

String tempo = rtc.getTimeStr();
String tempoformatado = tempo;
tempoformatado.replace(":",".");

tempoformatado.toCharArray(char1, tempoformatado.length() +1);
horario = atof(char1);

Matheus, veja também esse tutorial que escrevi sobre o DS3231. Nele uso uma biblioteca que obtém a data e hora no formato que você quiser:

Tutorial: http://josecintra.com/blog/explorando-rtc-ds3231-arduino/

Exemplo:

  RtcDateTime now = Rtc.GetDateTime(); // Obtém o horário atual
  Serial.println(formatDate(now,"d/m/y"));
  Serial.println();
  Serial.println(formatTime(now,"h:m:s"));
  Serial.println();
  RtcTemperature temp = Rtc.GetTemperature(); // Obtém temperatura
  Serial.print(temp.AsFloat());
  Serial.println("C");

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço