Go Down

Topic: Dúvida sobre millis() - É possível zerá-lo? (Read 1 time) 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

HugoPT

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

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.

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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

#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. :)
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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

Learn to live: Live to learn.
Showing off my work: http://arduino.cc/forum/index.php/topic,126197.0.html

Go Up