Loop Simultaneos é possivel??

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Loop Simultaneos é possivel??

Mensagem  wellington-wtm em Qua 12 Jun - 10:52

Olá galera, meu nome é Wellington sou novo por aqui e no Arduíno também e gostaria de pedir sua ajuda.

A questão é a seguinte, no meu TCC da faculdade preciso fazer o controle de 3 motores de passo, um deles deve girar constantemente, outros dois devem fazer parte de um ciclo quando eu solicitar. Toda essa programação foi feita com sucesso na IDE do Arduino, exceto por uma coisa.

Criei 3 funções: Void Stepper
                        Void Atuador 1
                        Void Atuador 2

No void loop coloquei:

void loop()
/*Acionamento do motor da esteira*/
{
  stepper();

  /*Acionamento do atuador 1*/
  
  atuador1();
  
  /*Acionamento do atuador 1*/
  
  atuador2();
}

Necessito que a função stepper() nunca pare, ou seja seu loop seja intermitente mesmo quando o atuador1 e atuador2 forem acionados. Mas acontece é que na programação sei que isso não acontece pela ordem dos comandos colocados no loop, pois quando passa ao atuador1(), parado meu motor que ficou no comando anterior, o stepper().


Seria possível fazer isso manter a função em funcionamento quando eu entrar em outra? 

O código completo está abaixo:

Código completo:

int motorPin1=13;
int motorPin2=12;
int motorPin3=11;
int motorPin4=10;
int motorPin5=9;
int motorPin6=8;
int motorPin7=7;
int motorPin8=6;
int motorPin9=5;
int motorPin10=4;
int motorPin11=3;
int motorPin12=2;
float veloc1=300;
float veloc2=300;
float inf=10;
void setup()
{
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  pinMode(motorPin5, OUTPUT);
  pinMode(motorPin6, OUTPUT);
  pinMode(motorPin7, OUTPUT);
  pinMode(motorPin8, OUTPUT);
  pinMode(motorPin9, OUTPUT);
  pinMode(motorPin10, OUTPUT);
  pinMode(motorPin11, OUTPUT);
  pinMode(motorPin12, OUTPUT);
  pinMode(1, INPUT);
  pinMode(0, INPUT);
  digitalWrite(1, HIGH);
  digitalWrite(0,HIGH);
}




void loop()
/*Acionamento do motor da esteira*/
{
  stepper();


  /*Acionamento do atuador 1*/
  
  atuador1();
  
  /*Acionamento do atuador 1*/
  
  atuador2();
}








void stepper()
{
   digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(veloc1);
  
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(veloc1);
  
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, HIGH);
  delay(veloc1);
  
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(veloc1);
  
}


void atuador1()
{
    /*Acionamento dos atuador 1*/
 
  int valor1=digitalRead(1);
  if (valor1==0){                         /*Se o sensor ativar*/
    for(int vez=1; vez<6; vez++){      /*Repete*/
  digitalWrite(motorPin5, HIGH);
  digitalWrite(motorPin6, HIGH);
  digitalWrite(motorPin7, LOW);
  digitalWrite(motorPin8, LOW);
  delay(veloc2);
  
  digitalWrite(motorPin5, LOW);
  digitalWrite(motorPin6, HIGH);
  digitalWrite(motorPin7, HIGH);
  digitalWrite(motorPin8, LOW);
  delay(veloc2);
  
  digitalWrite(motorPin5, LOW);
  digitalWrite(motorPin6, LOW);
  digitalWrite(motorPin7, HIGH);
  digitalWrite(motorPin8, HIGH);
  delay(veloc2);
  
  digitalWrite(motorPin5, HIGH);
  digitalWrite(motorPin6, LOW);
  digitalWrite(motorPin7, LOW);
  digitalWrite(motorPin8, HIGH);
  delay(veloc2);
    }
    delay(3000); /*Espera da Peça*/
  for(int vez2=1; vez2<5; vez2++){      /*Repete retorno*/
  
  digitalWrite(motorPin5, HIGH);
  digitalWrite(motorPin6, LOW);
  digitalWrite(motorPin7, LOW);
  digitalWrite(motorPin8, HIGH);
  delay(veloc2);
  
  digitalWrite(motorPin5, HIGH);
  digitalWrite(motorPin6, HIGH);
  digitalWrite(motorPin7, LOW);
  digitalWrite(motorPin8, LOW);
  delay(veloc2);
  
  digitalWrite(motorPin5, LOW);
  digitalWrite(motorPin6, HIGH);
  digitalWrite(motorPin7, HIGH);
  digitalWrite(motorPin8, LOW);
  delay(veloc2);
  
  digitalWrite(motorPin5, LOW);
  digitalWrite(motorPin6, LOW);
  digitalWrite(motorPin7, HIGH);
  digitalWrite(motorPin8, HIGH);
  delay(veloc2);
    }
  } else {
  digitalWrite(motorPin5, LOW);
  digitalWrite(motorPin6, LOW);
  digitalWrite(motorPin7, LOW);
  digitalWrite(motorPin8, LOW);
  delay(1);
  }
}






  void atuador2()
  {  
   int valor2=digitalRead(0);
  if (valor2==0){                         /*Se o sensor ativar*/
    for(int vezz=1; vezz<6; vezz++){      /*Repete*/
  digitalWrite(motorPin9, HIGH);
  digitalWrite(motorPin10, HIGH);
  digitalWrite(motorPin11, LOW);
  digitalWrite(motorPin12, LOW);
  delay(veloc2);
  
  digitalWrite(motorPin9, LOW);
  digitalWrite(motorPin10, HIGH);
  digitalWrite(motorPin11, HIGH);
  digitalWrite(motorPin12, LOW);
  delay(veloc2);
  
  digitalWrite(motorPin9, LOW);
  digitalWrite(motorPin10, LOW);
  digitalWrite(motorPin11, HIGH);
  digitalWrite(motorPin12, HIGH);
  delay(veloc2);
  
  digitalWrite(motorPin9, HIGH);
  digitalWrite(motorPin10, LOW);
  digitalWrite(motorPin11, LOW);
  digitalWrite(motorPin12, HIGH);
  delay(veloc2);
    }
    delay(3000); /*Espera da Peça*/
  for(int vez2=1; vez2<5; vez2++){      /*Repete retorno*/
  
  digitalWrite(motorPin9, HIGH);
  digitalWrite(motorPin10, LOW);
  digitalWrite(motorPin11, LOW);
  digitalWrite(motorPin12, HIGH);
  delay(veloc2);
  
  digitalWrite(motorPin9, HIGH);
  digitalWrite(motorPin10, HIGH);
  digitalWrite(motorPin11, LOW);
  digitalWrite(motorPin12, LOW);
  delay(veloc2);
  
  digitalWrite(motorPin9, LOW);
  digitalWrite(motorPin10, HIGH);
  digitalWrite(motorPin11, HIGH);
  digitalWrite(motorPin12, LOW);
  delay(veloc2);
  
  digitalWrite(motorPin9, LOW);
  digitalWrite(motorPin10, LOW);
  digitalWrite(motorPin11, HIGH);
  digitalWrite(motorPin12, HIGH);
  delay(veloc2);
    }
  } else {
  digitalWrite(motorPin9, LOW);
  digitalWrite(motorPin10, LOW);
  digitalWrite(motorPin11, LOW);
  digitalWrite(motorPin12, LOW);
  delay(1);
  }
  
}




Tudo isso é um controle de uma esteira selecionadora, que tem um motor de giro, dois para fazer seleção com cancelas acopladas sob comando de sensores.

Espero que possam ajudar.

wellington-wtm

Mensagens : 2
Data de inscrição : 12/06/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Loop Simultaneos é possivel??

Mensagem  Bruno Rafael em Qui 13 Jun - 18:20

os outros dois motores não podem entrar por interrupção?

Bruno Rafael

Mensagens : 22
Data de inscrição : 17/03/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Loop Simultaneos é possivel??

Mensagem  wellington-wtm em Qui 13 Jun - 22:17

Bruno Rafael escreveu:os outros dois motores não podem entrar por interrupção?

Sim, eu acho. Até tentei, mas como sou novo e leigo no arduino não tive sucesso... A interrupção ativaria os outros motores sem parar o principal?  Vc teria alguma dica?

wellington-wtm

Mensagens : 2
Data de inscrição : 12/06/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Loop Simultaneos é possivel??

Mensagem  Bruno Rafael em Sex 14 Jun - 8:41

exatamente. é possível fazer isso com interrupção! 

não sei como fazer interrupções no Arduino, mas a interrupção tem essa propriedade de manter uma tarefa em execução enquanto você vai fazer outras que são chamdas pela interrupção!

Bruno Rafael

Mensagens : 22
Data de inscrição : 17/03/2013

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Loop Simultaneos é possivel??

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum