Go Down

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

Mortis

Olá Maurizio,

Existem muitas formas de fazer o mesmo, até mesmo sem os dalays usando arrays, etc. Mas não sei o quanto você sabe de programação.

Você tem um relê para cada tubo ou é o mesmo relê?

Mantendo o teu código, você pode adicionar uma variável global para definir o início do processo, após pressionamento do botão.

Depois de apertado o botão o processo inicia (mancando a variável como true) e quando termina marcamos a variável como false.

então, abaixo o teu código alterado com a idéia acima, lembrando que não cmpilei para saber se funciona mesmo ^^

Code: [Select]
int pin = 13;
Rodando int state = LOW;

void setup() {               
  pinMode(10, OUTPUT); 
  pinMode(9, OUTPUT);
  pinMode(13, OUTPUT);
 
  pinMode(pin, OUTPUT);
  attachInterrupt(0, IniciaProcesso, CHANGE); //Liga o push button na porta digital 0 para chamar esse interrupt
}

void Start()
{
  Rodando = HIGH
}

void loop() {
  if(Rodando) //Se o botão foi pressionado
  {
    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);
   
    //no final marcamos Rodando como LOW
    Rodando = LOW;
  }
}


Lembrando que o uso de delays não é nada indicado, o ideal seria usar o método millis. Mas agora preciso sair e a noite volto para ver se a fase um esta ok e se der te dou um exemplo de intervalo usando o millis para substituir o delay

Até

MaurizioZelada

Mortis, mais uma vez. obrigado.
Bem, como vc deve desconfiar não entendo nada de programação e agradeço dicas de livros e etc para iniciar este aprendizado.
Quanto aios reles....na verdade o Arduino manda um pulso de clock para dois CI4017  ligados em cascata e eles se encarregam de distribuir os sinais para os 12 reles.
coloquei uma foto da montagem.
nem sei se posso te perguntar isso aqui no forum e espero não estar cometendo algum deslize mas gostaria de saber se vc tem iunteresse profissional em desenvolver esta programação de maneira mais adequada.

Obrigado

Mortis

Olá Maurizio,

Então estamos quites, você não manja de programação e eu não manjo de eletrônica rs

Sobre a oferta, por hora deixemos como esta, pois tenho corrido muito com o trabalho por aqui e odiaria me comprometer e não honrar o compromisso... Qualquer coisa, se estiver fora do assunto do fórum, fique a vontade para me mandar um MP (mensagem privada).

Peço desculpas por meu exemplo corrigo, bati o olho e vi que falei em true/false e usei LOW/HIGH e no interrupt usei IniciaProcesso, sendo que o método esta como START. Sei que esse tipo de coisa confunde tudo. Foi mal.

Como, teoricamente, a pergunta do seu post foi respondido, te mando uma MP sobre o projeto de forma geral.

Abraço.

neuron_upheaval

Não precisa complicar; faça do jeito mais fácil: Maurício, coloque todo o seu código dentro do bloco [font=Courier New]setup()[/font] do Arduino e, para reexecutar o seu programa, acione o botão Reset da placa.

Ou seja, basta fazer um puxadinho com o botão Reset do Arduino.

MaurizioZelada

Obrigado Neuron,
mas o q eu precisava era q o programa parasse por conta propria em determinado momento.

Go Up