Dúvida sobre millis() - É possível zerá-lo?

Olá pessoal, sou novo no forum e no arduíno. Tenho uma dúvida a respeito da função millis()

Millis():
millis( )
Retorna o número de milissegundos desde que o Arduino começou a executar o programa corrente.
Exemplo: long total = millis( ); Aqui a variável inteira longa (de 32 bits) ‘total’ vai guardar o tempo em ms desde que o Arduino foi inicializado.

Ok, este conceito eu já entendi. Fiz um projeto que simula um semáforo, onde quando o pedestre aperta o botão, será necessário que o sinal tenha sido aberto pelo menos há 5 segundos. Eu igualava uma variável do tipo "unsigned long" com o millis() antes de retornar a função principal e fazia um if cada vez que o usuário apertasse o botão. (Fiz este projeto baseado no livro básico de arduíno - Michael McRoberts).

O "unsigned long" consegue armazenar uma boa quantidade de tempo em milissegundos (cerca de 49 dias). Entretanto, queria saber o que acontece se o projeto ficasse ligado por mais tempo que o que o "unsigned long" suportasse. O millis() zera? tem como fazer isso? o "unsigned long" se comportaria normalmente?

Acredito que deva ter meios de juntar variáveis ou realizar outros artifícios para que se possa armazenar um tempo maior, mas eu queria saber o que acontece quando o tempo "estoura" e se tem como zerar o millis().

Grato

Ao fim de esse tempo a variável vai dar a volta recomeçando a zero novamente.quanto ao zerar o mili() não pois na pratica isso é uma função interna que é incrementada a cada ciclo de relógio
Mas não necessitas de seguir esse caminho zerar o mili não e boa programação
Podes usar os registos internos para controlar o timer1 interno pois o timer2 senão estou em erro é usado pelo mili e por sinais pwm

os sinais de PWM ocupam o timer que estiver ligado aos pinos desse PWM. Logo tanto pode ser o timer 1 ou o timer 2. O timer 0 é que acho só ser usado no millis.

Ok, colegas.
Sou novo em arduino e ainda não entendi completamente sobre estes timer1 e timer2. Precisarei estudá-los.

Pelo que entendi, então quando a variável "estourar" ela vai zerar. E o programa irá funcionar normalmente, não?

Obrigado e abraços

Depende do programa....

Tens um exemplo do que pretendes fazer? Se programares em termos absolutos, o programa não vai gostar... se programares em termos relativos, pode ser pacífico. Em todo o caso, o millis não serve para fazer de relógio... podes sempre usar o millis para criar um relógio e apenas ver a passagem de 1000 milisegundos e incrementar o tempo que passou. :slight_smile:

Se ter horário é importante para você, por uns $3 + alguns fios e resistores, você coloca um RTC no seu projeto, que é um contador/relógio que durará algumas décadas ou séculos.

No entanto, se você apenas precisa contar intervalos de 5 segundos, o contador interno do Arduino é suficiente.

Recomendações:
Maxim-Dallas DS1307, DS1337, DS1672