About

quinta-feira, 2 de maio de 2013

Temporizadores (por Threads) no Arduino


Eu de novo em mais um post surpreendente, espetacular!! Uma coisa que não sabia que existia no arduino: Threads. Claro! O arduino processa código C, então dá pra fazer isso e muito mais. Em baixo vai o código de um temporizador que precisei fazer pro projeto Kerberos:



void requireStatus(){
   Serial1.println("Status");
}

void requireModo(){
   Serial1.println("Modo");
}

// Envio de mensagens para o controle
#define NUMBER_OF_ACTIONS 2

// Classe da Thread
typedef struct{
   unsigned long previousTrigger;
   unsigned int interval;
   void (*function)();
}ProtoThread;

// Instancia da Thread
ProtoThread protoThreads[NUMBER_OF_ACTIONS] = {
   {5000,10000,requireModo},
   {2000,10000,requireStatus} //predelay 2000 milliseconds, then from then on always trigger every 1000        millisecond - REPETE CADA 1s
};

void loop(){
  delay(100);
  // Verifica Threads
  for (byte i=0; i<NUMBER_OF_ACTIONS; i++) {
    if ((millis() - protoThreads[i].previousTrigger) > protoThreads[i].interval) {
      protoThreads[i].previousTrigger = millis();
      protoThreads[i].function();
    }
    delay(100);
  }
}



Dando uma explicada sobre o que tá acontecendo: o comando 'typedef struct' vai criar uma estrutura, uma classe chamada ProtoThread. Logo abaixo estamos instanciando ela passando o tempo para iniciar a partir do power on do arduino, o tempo de espera para ser executada novamente e a função que irá chamar. Veja que o Loop é o encarregado de fazer a verificação.

Por enquanto é só pessoal! Qualquer dúvida comenta ai.

ja ta ja ne

0 comentários:

Postar um comentário

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews