fbpixel
Etiquetas: , ,

O quadro Arduino Due permite multitarefas utilizando a biblioteca do Scheduler. Baseia-se num microcontrolador ARM Cortex-M3 em 32 Bits com 84MHz. É portanto muito mais poderoso do que um Arduino UNO. Estas características permitem-lhe criar algoritmos multitarefa mais poderosos. Veremos aqui como utilizar a biblioteca do Scheduler que permite utilizar várias funções de loop().

Material

  • Arduino Due
  • Cabo USB A Macho/Micro B Macho

Descrição

A biblioteca Scheduler permite a um microcontrolador baseado em SAM, tal como o Arduino Due ou o Arduino Zero, realizar múltiplas acções sem se interromper a si próprio. A biblioteca permite organizar as tarefas de modo a que o microprocessador mude de um para outro sem ter de criar um temporizador dedicado. Tal como outros microcontroladores Arduino, o Arduino Due não permite uma verdadeira multi-tarefa mas, graças ao seu ritmo de relógio, dá a impressão de executar tarefas em paralelo.

Código

Neste código, iremos criar várias funções de loop que funcionarão em paralelo. Para inicializar cada função de laço, usamos o comando startLoop:

  Scheduler.startLoop(loop2);
  Scheduler.startLoop(loop3);

Vale a pena notar que a função delay() permite que outra tarefa seja activada. Se não houver função de atraso numa das funções de laço, então a função yield() deve ser utilizada para passar a mão para a tarefa seguinte.

#include <Scheduler.h>

int counter=0;

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

  Scheduler.startLoop(loop2);
  Scheduler.startLoop(loop3);
}

void loop() {
  Serial.println(F(" Action 1 LED : HIGH"));
  digitalWrite(13, HIGH);
  delay(500);
  Serial.println(F(" Action 1 LED : LOW"));
  digitalWrite(13, LOW);
  delay(500);
}

void loop2() {
  if(counter<25) {
    counter++;
    Serial.print(F(" Action 2 counter : "));Serial.println(counter);
  }
  
  delay(100);
}

void loop3() {
  if(counter>=25){
    
    for(counter;counter>=0;counter--){
      Serial.print(F(" Action 3 Reset counter : "));Serial.println(counter);
    }
  }
  yield();
}

O Arduino Due e a biblioteca permitem-nos simplesmente criar funções que funcionarão em paralelo e que não requerem uma gestão adicional de programação de tarefas em tempo real, tais como a criação de temporizadores.

Resultado

Uma vez iniciado o programa, é possível ver as tarefas a decorrer de forma ordenada.

arduino-scheduler-results Programa multitarefa com Arduino Due e Scheduler

Uma vez que este código esteja funcional, pode modificá-lo de acordo com as suas necessidades. A biblioteca Scheduler permite, por exemplo, atribuir uma função de loop à gestão de sensores, motores ou mesmo à comunicação em série.

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie