Go Down

Topic: Método de Temporização (Read 3638 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy