Galera!

O código à baixo, conta o tempo e imprime ele na serial do arduino.

Fiz alguns testes com isso para ver se da realmente certo isso e reparei que não da exatamente como deveria ser.

Deveria contar os milisegundos, os segundos e minutos, mas os milissegundos não fecha exatamente, testem o código e verão o que acontece.

A ideia seria usar isso para contar o tempo e em um determinado tempo vc executar uma determinada ação, mas o fato é que isso não é exato.

Gostaria de saber o comentário de vcs.

Abraços!

int seg =0, seg2 =0, min= 0;
void setup(){
Serial.begin(9600);
}

void loop(){
static unsigned long ult_tempo = 0;
int tempo = millis();
if((tempo - ult_tempo) >= 1000){
ult_tempo = tempo;
seg++; seg2++;

}
if(seg >= 60){
seg =0;
seg2 =0;
min++;
};
Serial.print("Tempo: ");
Serial.print(min);
Serial.print(" : ");
Serial.print(seg2);
Serial.print(" : ");
Serial.println(millis());

}

Exibições: 6181

Responder esta

Respostas a este tópico

Olá Márcio!

Na verdade, o seu programa está certo.

O que acontece é o seguinte: A função millis() é muito rápida. Enquanto você está processando outras coisas, como fazendo seus IFs e incrementando contadores, ela fica trabalhando e quando você exibe o seu valor, ela já está bem longe, mas está correta.

Por isso  que você precisou colocar nos seus IFs o sinal >=, caso contrário a condição não seria atingida.

Algumas observações sobre o código:

1) Todas as variáveis que trabalham com millis devem de ser do tipo unsigned long;

2) seg e seg2 estão redundandes;

3) A variável min vai explodir. Precisa zerá-la em algum momento;

4) Se o objetivo é só executar um função em determinado tempo, não seria necessário calcular minutos e segundos. Bastaria usar o millis

5) A opção através de millis nunca será exata. Outra alternativa para executar uma função de tempos em tempos com mais exatidão seria através de interrupções do TIMER, embora ela possua alguns inconvenientes.

Veja um exemplo aqui:

http://labdegaragem.com/profiles/blogs/tutorial-executando-fun-es-e...

Abraço,

José Cintra

Oi MAP, bom dia,

como bem disse o JAC, a função millis() tem alguns inconvenientes.

Ela não tem  muita precisão;

Retorna a zero em 49 dias, 17 horas, 2 minutos, 47 segundos,  295 milisegundos.  

   Reg = FFFFFFFFh.;

Isto pode afetar o funcionamento do seu projeto.

Segue anexo o seu code corrigido.

Para controle de tempo recomento um RTC, tal como por exemplo o DS3231

Rui

Anexos

Olá amigo, sou novo aqui e estou precisando fazer um projeto para a empresa em que trabaçho, para calcular o MTBF de uma maquina., eu quero que o Arduino ao receber um sinal que a maquina parou, ele começe a contabilizar o tempo, e quando a maquina voltar, ele registre esse tempo para que eu possa enviar para outro servidor meu de monitoramento, nessa parte do envio eu ja tenho mas a contabilização total eu nao sei ocmo fazer, , como eu poderia fazer isso com o RTC ? Obrigado.

Jessé Muniz 

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço