Arduino como executar uma tarefa em segundo plano e monitorar outra ação.

Caros amigos, estou com uma dúvida no seguinte caso:

Tenho um programa rodando executando uma ação quando um botão é pressionado e gostaria de poder interromper essa ação através do mesmo botão.

Exemplo:

ao acionar um botão tenho uma porta com nivel alto durante um periodo, porém quero que a qualquer momento que eu pressione novamente esse botão ele coloque a porta em nivel baixo.

no meu caso eu estou empacado no processo

void setup(){
  pinMode (13,OUTPUT); // porta 13 definida como saida
  pinMode (10,INPUT); // porta 10 definida como entrada
  digitalWrite(10,1); // ativação do pullup interno do atmega
}
void loop(){
  int leitura = digitalRead (10); // monitora estado da porta 10
  if (leitura == 0){ func_liga(); // condição para desvio para função liga
 // digitalWrite (13,1) ;// desabilitado
  //delay (15000); // desabilitado
  }
else
{digitalWrite(13,0); //mantem porta 13 desligada
  }
}
void func_liga() // função liga
    {
      digitalWrite(13, HIGH); //ativa porta 13
delay (15000); // tempo de 15 segundo
    }

o programa está funcionando, mas imaginei que como desviei p/ uma função que o arduino ficaria no loop monitorando o estado do botão (10), mas isso não aconteceu.

Alguem tem um caminho p/ mim?

Abraços

Sanches

Exibições: 110

Responder esta

Respostas a este tópico

Até onde eu sei, arduino não suporta multiplas tarefas.
Mas no teu caso, acho que é só interrupção mesmo.
Tem um post aqui, vê se te ajuda: Tutorial sobre Interrupções no Arduino

Olha, estou com o mesmo problema.

Vc deverá usar a função blink without delay.

Dá uma estudada nisso.

RSS

Publicidade

Convide um amigo para o Lab!

 Loja Lab de Garagem

Novo!

Garagino Rev1

Por: R$ 29,00

Ou em até 6x de

R$ 5,18 

Novo!

Servo Motor Grande 180°

Por: R$ 54,00

Ou em até 12x de

R$ 5,10

 

Exclusividade do LdG!

Android 4.0 Mini PC

Por: R$ 195,00

Ou em até 18x de

R$ 13,00

Válvula Solenóide de 12V - 3/4"

Por: R$ 36,00

Ou em até 7x de

R$ 5,56

© 2013   Criado por Marcelo Rodrigues.

Badges  |  Relatar um incidente  |  Termos de serviço