Go Down

Topic: encerrar programa (Read 2 times) previous topic - next topic

MaurizioZelada

Olá, por mais que eu tenha pesquisado não consegui realizar a seguinte rotina: apertar um botão, rodar um programa que esta funcionando muito bem, uma rotina de liga desliga algumas saídas, PARA o programa e reabilitar o botão para recomeçar tudo de novo.
Alguém me ajuda? Obrigado
Maurizio

bubulindo

Aqui não existe o conceito de parar o programa.

Existe o conceito do programa fazer algo para responder a um evento.

No teu caso...

Code: [Select]


void programa_que_funciona_muito_bem(void) {};

void setup(){}

unsigned char flag = 0;
void loop(){

if (botao_apertado == TRUE && flag == 0) {
    programa_que_funciona_muito_bem();
    flag = 1;
}

if (botao_apertado == FALSE) {
    flag = 0;
}
}


Quando apertas o botão, ele corre a funcao programa_que_funciona_muito_bem() uma vez. Quando soltas o botão, o Arduino fica pronto a correr de novo a funcão quando carregares no botão de novo.
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).

MaurizioZelada

Muito obrigado.
Mas não entendi como habilito um botão, entre quais pinos?
aproveito para colocar o tal do programa_que_funciona_muito bem.
preciso que ao acionar um botão, por um instante, ele rode até o final e pare em seguida reabilitando o botão.

Mais uma vez, muito obrigado



void setup() {               





pinMode(10, OUTPUT); 
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
}


  void loop() {
   
   
   
    {


  delay(100);
}





   digitalWrite(10, HIGH);   // 12
  delay(4000);
 
   digitalWrite(13, HIGH);   // 12
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500);
 
digitalWrite(13, HIGH);   // 1
    delay(20);             
  digitalWrite(13, LOW);   
  delay(500);   

  digitalWrite(13, HIGH);   // 2
    delay(20);             
  digitalWrite(13, LOW);   
  delay(500);   
 
  digitalWrite(13, HIGH);   // 3
    delay(20);             
  digitalWrite(13, LOW);   
  delay(500); 
 
  digitalWrite(13, HIGH);   // 4
    delay(20);             
  digitalWrite(13, LOW);   
  delay(500); 
 
  digitalWrite(13, HIGH);   // 5
    delay(20);             
  digitalWrite(13, LOW);   
  delay(500); 
 
  digitalWrite(13, HIGH);   // 6
    delay(20);             
  digitalWrite(13, LOW);   
  delay(500); 
 
  digitalWrite(13, HIGH);   // 7
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500); 
 
  digitalWrite(13, HIGH);   // 8
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500); 
 
  digitalWrite(13, HIGH);   // 9
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500); 
 
  digitalWrite(13, HIGH);   // 10
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500); 
 
  digitalWrite(13, HIGH);   // 11
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500); 
 
  digitalWrite(13, HIGH);   // 12
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500); 
 
 
 
  digitalWrite(13, HIGH);   // 13
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500); 
 
   digitalWrite(13, HIGH);   // 14
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500);
 
   digitalWrite(13, HIGH);   // 15
    delay(20);              //
  digitalWrite(13, LOW);    //
  delay(500);
 
   digitalWrite(13, HIGH);   // 16
    delay(10);              //
  digitalWrite(13, LOW);    //
  delay(10);
 
   digitalWrite(9, HIGH);   // 17
    delay(2000);              //
  digitalWrite(9, LOW);    //
  delay(100);
 
   digitalWrite(13, HIGH);   // 18
    delay(10);              //
  digitalWrite(13, LOW);    //
  delay(1000);
  digitalWrite(10, LOW);
  delay(2500);
   
while(2){}
}

Mortis


Muito obrigado.
Mas não entendi como habilito um botão, entre quais pinos?


Maurizio,

Imagino que o que você precisa é parecido com o que esta no site: http://arduino.cc/en/Tutorial/Pushbutton

Também tem esse tutorial que é interessante: http://arduino.cc/en/Reference/AttachInterrupt (alertando é ideal usar o interrupt só para alterar a valiável, executando o código sempre no loop)

Diz ai se os links elucidaram um pouco.





MaurizioZelada

Obrigado Mortis mas resolvi de outra forma.
Vamos ver se me explico...estou fazendo um display que explica determinado regime de chuvas para uma exposição. Para isso terei 12 tubos de acrílico que se enchem de água um depois do outro. Cada um deles será enchido até uma determinada altura.
Preciso que a coisa funcione da seguinte maneira:
1- o usuário aperta um botão (push- button)
2- o tubo um começa a encher e para em determinado volume, tempo médio de 5 segundos
3- o tubo 2 começa a encher e para em outro determinado volume

....e assim por diante até o tubo 12.

tempo médio total de 60 segundos

4- não acontece nada por um determinado tempo, digamos 30 segundos
5- os tubos esvaziam
6- a máquina esta pronta para ser reutilizada assim que o push-botton for acionad.


bem, para isso eu usei a programação ai de cima e fiz o seguinte, quando o programa chega até a quase na última linha ele faz a saída 10 ficar low. isso desliga um relé que esta permitindo a passagem de corrente entre a fonte e toda a parte eletronica e portanto desliga a coisa toda.
Quando acionamos o push-botton ligamos este rele que energiza o arduino que retribui com a saida 10 em  High enrgizando o rele mesmo quando o push-botton é aliviado.
Adicionalmente coloquei o push-botton em série com outro contato do rele assim quando o sistema e o rele estao energizados o push-botton fica desabilitado.
Será que me expliquei? Com certeza não adotei uma solução muito ortodoxa e temo pelos resultados a longo prazo. O que te parece?
Muito obrigado pela atenção

Go Up