Go Down

Topic: Dúvida sobre millis() - É possível zerá-lo? (Read 4171 times) previous topic - next topic

Filantropic

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

Quote from: 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

hugo007

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

Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo

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.

This... is a hobby.

Filantropic

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

bubulindo

#4
Sep 04, 2012, 07:32 am Last Edit: Sep 04, 2012, 02:11 pm by bubulindo Reason: 1
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. :)
This... is a hobby.

AlxDroidDev

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

Some of my projects:
Shield for DS1337+, DS1624 and AT24C1024B (RTC, temp & mem): http://forum.arduino.cc/index.php/topic,126197.0.html
CHDK Camera remote shutter (BT, IR, USB): http://forum.arduino.cc/index.php?topic=295377.0

Go Up