collapse

* Links de Robótica

* Posts Recentes

Ligar Células de Lithium por Hugu
[Hoje às 02:00]


Encomenda Colectiva N3-2016[@Mouser - Aberta a pedidos!] por Hugu
[Hoje às 01:53]


Printer 3D barata por xmatias
[Ontem às 03:56]


Servidor por almamater
[09 de Dezembro de 2016, 21:39]


mysql server error por andre_f_carvalho
[09 de Dezembro de 2016, 18:56]


Cortar plástico ABS por msr
[05 de Dezembro de 2016, 17:27]


MOVIDO: FPV Drone Racing? por metRo_
[05 de Dezembro de 2016, 10:49]


Módulo gsm por dio123
[04 de Dezembro de 2016, 23:06]


Procuro resistências 220 Ohm de 1% por brunus
[02 de Dezembro de 2016, 15:50]


Package de cond 10uF 35V smd? por KammutierSpule
[02 de Dezembro de 2016, 11:19]

Autor Tópico: Ciclo de espera  (Lida 1081 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
Ciclo de espera
« em: 13 de Maio de 2010, 00:40 »
Boas a todos...

Alguém me pode dar uma indicação de como fazer um ciclo de verificação? ou seja, o que eu pretendo fazer é que durante x tempo o programa fique à espera que seja carregado um botão, por exemplo... Caso isso aconteça ou não o programa aja em conformidade...

cumps
OxyGen #

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.707
Re: Ciclo de espera
« Responder #1 em: 13 de Maio de 2010, 00:47 »
Para isso vais ter que usar timers, tens aqui a explicação: http://www.arduino.cc/playground/Main/MsTimer2
Basicamente o processo será algo do genero: Inicias o timer, quando o timer chegar ao fim avanças para a próxima tarefa.
Por exemplo:

Citar
//interrupção
if(timer==100){
acabouTempo = 1;
}

timer = 0;
while(acabouTempo==0){
//Fica aqui...
//Quando o acabouTempo passa a 1 ele segue para o próximo código!
}


Atenção que isto aqui é pseudo-código. Lê o link que vais perceber!

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
Re: Ciclo de espera
« Responder #2 em: 13 de Maio de 2010, 00:50 »
Nem sei como não me lembrei dos timers...

Edit: O problema é que eu não quero executar uma acção de x em x segundos, eu quero que o programa espere um determinado tempo como tens no teu pseudo código... o problema é que os timers executam uma acção de x em x tempo. Eu quero fazer y=digitalRead(buttonPin); e o programa esperar x segundos antes de avançar.
« Última modificação: 13 de Maio de 2010, 23:36 por OxyGen »
OxyGen #

Offline OxyGen

  • Mini Robot
  • *
  • Mensagens: 92
  • ET - UA
    • Curto.D ET Blog
Re: Ciclo de espera
« Responder #3 em: 14 de Maio de 2010, 01:11 »
O problema é que eu não quero executar uma acção de x em x segundos, eu quero que o programa espere um determinado tempo como tens no teu pseudo código... o problema é que os timers executam uma acção de x em x tempo. Eu quero fazer y=digitalRead(buttonPin); e o programa esperar x segundos antes de avançar.
OxyGen #

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 8.990
  • Helpdesk do sitio
Re: Ciclo de espera
« Responder #4 em: 14 de Maio de 2010, 01:54 »
Podes sempre usar o milis:
Código: [Seleccione]
y=digitalRead(buttonPin);  //a tua leitura do botão
lastmillis=millis(); //isto lê o valor actual de millis e coloca-o numa variavel
while((millis()-lastmillis) <5000);  //aqui compara o valor guardado de millis com o actual e quando chegar a 5000 milisegundos, ou seja 5 segundos avança para o resto do teu código
o resto do teu código
Atenção que se fizeres isto e não estiveres a usar um timer para gerar uma interrupção para manter os teus displays a funcionar, só vai ficar um deles ligado, e lê sobre deboucing de botões também, se bem que neste caso especifico isso nem é necessário.
Avr fanboy

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Ciclo de espera
« Responder #5 em: 14 de Maio de 2010, 08:58 »
Bom, penso que tu queres que o programa fique à espera que carreges no botão, depois de carregares, espera 5s (por exemplo).
Se é isto, precisas de algo do género:
Citar
boolean go = false;
while(!go){
  if(digitalRead(pin) == HIGH){
    go = true;
    delay(5000);
  }
}


Agora, se queres que ele espere 1 vez, inicias a variável "go" fora do loop() - no setup() ou nas definições das variáveis.
Se quiseres que ele espere todos os ciclos, inicias a variável sempre, antes desse while.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 8.990
  • Helpdesk do sitio
Re: Ciclo de espera
« Responder #6 em: 14 de Maio de 2010, 15:39 »
Só uma coisa, porque é o código nas tags quote fica ás cores e com as tags code fica tudo a preto? É meio lol
Avr fanboy

Offline microbyte

  • Mini Robot
  • *
  • Mensagens: 1.322
    • http://ricardo-dias.com/
Re: Ciclo de espera
« Responder #7 em: 15 de Maio de 2010, 00:27 »
Esse é o código que gera o programa do arduino se tu clicares do lado direito e depois "Copy to Forum". Isso gera um código BB, com sintaxe dos fóruns, que está dentro de um QUOTE, porque se meteres tipo BOLD e ITALICO dentro de um CODE, ele aparece mesmo o codigo, nao formata:

Citar
TESTE
-> dentro de um quote

Código: [Seleccione]
[b]TESTE[/b] -> dentro de um code

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 8.990
  • Helpdesk do sitio
Re: Ciclo de espera
« Responder #8 em: 15 de Maio de 2010, 00:56 »
Que giro
Avr fanboy