Pages: [1]   Go Down
Author Topic: Dúvida sobre millis() - É possível zerá-lo?  (Read 1465 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Portugal
Offline Offline
Edison Member
*
Karma: 37
Posts: 1579
Pretending you know everything then you will learn nothing.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

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


'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3255
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Logged

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).

Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3255
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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. smiley
« Last Edit: September 04, 2012, 07:11:48 am by bubulindo » Logged

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).

BHZ, MG, Brazil
Offline Offline
Sr. Member
****
Karma: 10
Posts: 346
Android developer; Arduino enthusiast
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Logged

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

Pages: [1]   Go Up
Jump to: