MultiTask com o arduino é meio que "gabiarra" pois a arquitetura não executa REALMENTE 2 loops simultaneos. O que ele faz é alternar entre 1 e outro durante algum delay.
Veja o exemplo do link:
void loop() {
digitalWrite(led1, HIGH);
// IMPORTANT:
// When multiple tasks are running 'delay' passes control to
// other tasks while waiting and guarantees they get executed.
delay(1000);
digitalWrite(led1, LOW);
delay(1000);
}
// Task no.2: blink LED with 0.1 second delay.
void loop2() {
digitalWrite(led2, HIGH);
delay(100);
digitalWrite(led2, LOW);
delay(100);
}
Aconteceria a mesma coisa se escrevesse:
void loop() {
digitalWrite(led1, HIGH);
for(i=0, i<5, i++)
{
digitalWrite(led2, HIGH);
delay(100);
digitalWrite(led2, LOW);
delay(100);
}
digitalWrite(led1, LOW);
}
O que acontece é que o "delay (1000)" é substituido pela rotina no loop 2, e qualquer delay dentro do loop2 será substituido pelo loop3 e assim sucessivamente. Ou seja, ele não executa 2 laços simultaneamente, em uma aplicação que exige mais do hardware podera ser notado que o tempo de execução será de cada tarefa individualmente. Dando na mesma se escrever o codigo em sequencia ou não.
Falo sobre os AVR... Não cheguei a ver a fundo, mas talvez esses novos arduinos com esses ARM parrudos suporte mult-threading "real"...