collapse

* Links de Robótica

* Posts Recentes

Palavras Cruzadas por Hugu
[Hoje às 02:48]


Editor online de imagens p/ distorcer imagens trapezoidais p/ rectangulo? por Hugu
[Hoje às 01:26]


[Projecto] Bomba Airsoft por SrMorte
[Ontem às 23:51]


Apresentação por SrMorte
[Ontem às 22:32]


Medir Agua que está no Poço por filjoa
[21 de Setembro de 2017, 20:58]


URGENTE - display de 7 segmentos com backpack por helderjsd
[20 de Setembro de 2017, 12:30]


Preços e fabricantes de pcb por Sérgio_Sena
[19 de Setembro de 2017, 10:20]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]

Autor Tópico: pausar/parar função do arduino  (Lida 10183 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.627
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
pausar/parar função do arduino
« 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  :)
« Última modificação: 19 de Junho de 2010, 15:08 por amando96 »

Offline preytender

  • Mini Robot
  • *
  • Mensagens: 148
Re: pausar/parar função do arduino
« Responder #1 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);
}

}


« Última modificação: 19 de Junho de 2010, 14:53 por preytender »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: pausar/parar função do arduino
« Responder #2 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
Avr fanboy

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.627
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: pausar/parar função do arduino
« Responder #3 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.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.390
  • Helpdesk do sitio
Re: pausar/parar função do arduino
« Responder #4 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.
Avr fanboy

Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.627
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: pausar/parar função do arduino
« Responder #5 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);
}
}



Offline msr

  • Mini Robot
  • *
  • Mensagens: 793
Re: pausar/parar função do arduino
« Responder #6 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.


Offline amando96

  • Mini Robot
  • *
  • Mensagens: 1.627
  • MAC address? But I have windows...
    • Projects, News, Blog, Tutorials
Re: pausar/parar função do arduino
« Responder #7 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.