LusoRobótica - Robótica em Português

Robótica => Iniciantes => Tópico iniciado por: OxyGen em 13 de Maio de 2010, 00:40

Título: Ciclo de espera
Enviado por: OxyGen 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
Título: Re: Ciclo de espera
Enviado por: metRo_ 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 (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!
Título: Re: Ciclo de espera
Enviado por: OxyGen 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.
Título: Re: Ciclo de espera
Enviado por: OxyGen 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.
Título: Re: Ciclo de espera
Enviado por: senso 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.
Título: Re: Ciclo de espera
Enviado por: microbyte 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.
Título: Re: Ciclo de espera
Enviado por: senso 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
Título: Re: Ciclo de espera
Enviado por: microbyte 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
Título: Re: Ciclo de espera
Enviado por: senso em 15 de Maio de 2010, 00:56
Que giro