collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Ciclo de espera  (Lida 3175 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.753
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: 9.733
  • 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: 9.733
  • 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: 9.733
  • Helpdesk do sitio
Re: Ciclo de espera
« Responder #8 em: 15 de Maio de 2010, 00:56 »
Que giro
Avr fanboy