LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: amando96 em 19 de Junho de 2010, 14:39

Título: pausar/parar função do arduino
Enviado por: amando96 em 19 de Junho de 2010, 14:39
Boas, estou por aqui a inventar com o arduino, e chegou-me um problema, e para ultrapassa-lo preciso de pausar uma função(preciso que ele pare de de fazer seja o que for) durante um certo tempo(que irá depender de uma variavel), como faço?
Código: [Seleccione]
void loop()
{
count();
resetcount();
}

void count(){
    digitalWrite(reset, LOW);
      for(i=0;i<N;i++){     
      digitalWrite(countPin, HIGH);
      delay(100);                 
      digitalWrite(countPin, LOW);   
      delay(100);
             }
N = um numero qualquer e quero pausar o void count() quando N for diferente do valor anterior que estava atribuido a ele. preciso que o código corra N vezes, e quando chegar a N("última volta") pare, até N mudar.

exemplo em portugues:
N = 5, o código corre 5 vezes, e na 5 vez pára, não faz mais nada, depois N passa a 3 por exemplo, depois faz resetcount() o código corre 3 vezes, e á terceira pára, até N mudar novamente.

Obrigado  :)
Título: Re: pausar/parar função do arduino
Enviado por: preytender em 19 de Junho de 2010, 14:47
Assim rapidamente lembrei-me disto:

Código: [Seleccione]

int iControl=0;  // Variavel que controla se para ou não (0-Executar 1-Parar) na função count()

void loop(){
count();
resetcount();
}

void count() {

digitalWrite(reset, LOW);
for(i=0;i<N;i++) {

  while (iControl==1) {
       //Isto faz uma pausa na função
      // Para retomar basta colocar a variavel iControl=0 dentro deste ciclo;
  }

  digitalWrite(countPin, HIGH);
  delay(100);
  digitalWrite(countPin, LOW);
  delay(100);
}

}


Título: Re: pausar/parar função do arduino
Enviado por: senso em 19 de Junho de 2010, 14:47
while(N != M){};
Se fizeres isto ele pára, mas depois só com um interrupt é que saltas desse loop para alterar um dos valores
Título: Re: pausar/parar função do arduino
Enviado por: amando96 em 19 de Junho de 2010, 15:03
M será o que?
Agora só não sei como guardar o valor de N anterior, pecisarei de outra variavel, "previousN" mas não sei como lhe dar esse valor.
E no inicio confundi-me, preciso que o código corra N vezes, e quando chegar a N("última volta") pare, até N mudar.
Título: Re: pausar/parar função do arduino
Enviado por: senso em 19 de Junho de 2010, 15:14
O M seria o teu previousN.
Para guardar o novo N, fazes:
If(previousN != N){
previousN = N;}
Acho eu lol, estou a pensar só a meio %, já agora, diz qual é o objectivo de parar o programa, se calhar existe uma maneira melhor de fazer o que queres fazer.
Título: Re: pausar/parar função do arduino
Enviado por: amando96 em 19 de Junho de 2010, 15:18
Usando vários CD4026 controlar uns quantos displays de 7 segmentos, usando só dois pinos do arduino.
O cd4026 recebe um pulso, e vai incrementando o numero que aparece no display a cada pulso, e tem tmb um reset que faz voltar a 0(o resetcount() activa-o)

Código todo até agora:
Código: [Seleccione]
int icontrol = 0;
int countPin =  13;
int reset = 12;
int i = 0;
int N = 10;



void setup()   { 
Serial.begin(9600); 

  pinMode(countPin, OUTPUT);
  pinMode(reset, OUTPUT);

}



void loop()
{
count();
resetcount();
}

void count(){
    digitalWrite(reset, LOW);
  while(icontrol == 1){   
      for(i=0;i<N;i++){     
      digitalWrite(countPin, HIGH);
      delay(100);    // estes delays vão ser muito menos no final, desta maneira é mais fácil debug, e ver o que se passa             
      digitalWrite(countPin, LOW);   
      delay(100);
             }
}
}

void resetcount(){
   if (i = N){
 digitalWrite(reset, HIGH);
} else{
  digitalWrite(reset, LOW);
}
}


Título: Re: pausar/parar função do arduino
Enviado por: msr em 19 de Junho de 2010, 16:55
O que queres é após ele ter contado até N parar e so recomeçar a contar quando indicares outro N? E ao mesmo tempo, e durante a contagem, permitires pause/continue?

Alguns bitaites:
- onde estás a alterar o valor da variável icontrol? da maneira que tens, está sempre a zero
- a variavel icontrol poderia ter 3 significados: pause (pausa a contagem), continue (continua a contagem), set (quando a contagem anterior acabou, define novo N)
- usar interrupção para definir o valor de N, e fazer icontrol=1 e i=0 (inicio de uma contagem)
- o ciclo for ficaria "for(; i < N && icontrol == 1; i++)"
- quando acaba este ciclo, mesmo que icontrol == 1 nao há mais contagem uma vez que i == N
- dá-se início a nova contagem quando voltas a carregar no botão, ocorre a interrupção (que neste caso signfinica "set")
- a função atribuida à interrupção teria que conhecer o estado do contador (através dos valores de i, N e icontrol, sabes isso facilmente)

Espero ter ajudado.
Se não for isto que querias diz que tento ajudar melhor.

Título: Re: pausar/parar função do arduino
Enviado por: amando96 em 19 de Junho de 2010, 17:56
Citar
após ele ter contado até N parar e so recomeçar a contar quando indicares outro N

Certo, durante a contagem não  usarei o pause/continue.

Citar
onde estás a alterar o valor da variável icontrol? da maneira que tens, está sempre a zero

vai depender do N, e previousN, mas ainda não descobri como fazer o previousN, por isso de momento só está ali, não faz nada.

O próprio N vai ser controlado pelo arduino, quero fazer isto para poder ter mostrador de numeros de várias coisas, neste caso queria fazer um conta rotações.