Go Down

Topic: Método de Temporização (Read 3432 times) previous topic - next topic

Daniel Andrade

Feb 06, 2011, 09:28 pm Last Edit: Feb 13, 2011, 02:15 pm by Daniel Andrade Reason: 1
Encontrei um metodo de executar ações sincronizadas no tempo, sem pausa e facil de expandir, replicar

Quote


#define NUMBER_OF_ACTIONS 2

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


ProtoThread protoThreads[NUMBER_OF_ACTIONS] = {
{0,600,action1}, //triggers every 600 millisecond -a cada 600ms
{1000,1000,action2} //predelay 1000 milliseconds, then from then on always trigger every 1000 millisecond - REPETE CADA 1s
};

// funcao comum do ARDUINO
void loop(){

for (byte i=0; i<NUMBER_OF_ACTIONS; i++) {
  if (millis() - protoThreads.previousTrigger > protoThreads.interval) {
    protoThreads.previousTrigger = millis();
    protoThreads.function();
  }
}
}

void action1(){
//executo unica vez após energizar coma traso de 600ms
}

void action2(){
//executo a cada 1 segundo completado }
 


Um erro o forum, nao permite mostrar o codigo corretamente adicione a funcao loop um campo do array
referenciando a variavel i, nas variaveis protoThreads.previousTrigger e protoThreads.interval


void loop(){
for (byte i=0; i<NUMBER_OF_ACTIONS; i++) {
  if (millis() - protoThreadsAQUI.previousTrigger  > protoThreadsAQUI.interval) {
    protoThreadsAQUI.previousTrigger = millis();
    protoThreadsAQUI.function();
  }}}



Agora estou pensado como adaptar, um enable

bubulindo

Para isso terás de abrir a biblioteca das Protothreads e ver como é que a temporização é feita...

Ou...

Podes pegar no manual do ATmega, e ver como utilizar os timers para conseguires o mesmo efeito. Aí terás muito mais controlo dos tempos bem como, começar e parar (o tal Enable que referes).
This... is a hobby.

nofxx

Interessante essa protothreads.

Vou experimentar, atualmente verifico os millis()... if (time_now > last_run)

Um tut sobre os timers:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=50106

Go Up