Icono del sitio AranaCorp

Multitarea con Arduino

La multitarea es la capacidad de un microcontrolador para ejecutar varias tareas o procesos en el mismo espacio de tiempo. En la práctica, un Arduino no puede ejecutar tareas en paralelo, pero puede organizar y ejecutar una serie de tareas una tras otra en un espacio de tiempo muy corto. Esto da la ilusión de multitarea. En este artículo, veremos algunos ejemplos de multitarea.

Si su proyecto requiere ejecutar tareas en paralelo (multihilo), tendrá que buscar otros microcontroladores o microordenadores.

Uso de interrupciones

Descripción

Las interrupciones permiten al microcontrolador ejecutar una función cuando se produce un evento en uno de los pines de interrupción. En lugar de leer constantemente el valor de un sensor, el programa sólo se activará cuando cambie el valor del sensor. Esto resuelve una serie de problemas de distribución de tareas.

Código

const byte interruptPin = 2;

void setup() {
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), onEvent, CHANGE);
}

void loop() {
}

void onEvent() {
  Serial.println(F("Action"));
}

Uso de la función millis()

Descripción

La función millis() devuelve una variable long sin signo que representa el número de milisegundos que han transcurrido desde que se encendió el microcontrolador. En particular, se puede utilizar para realizar una acción cuando ha transcurrido un intervalo de tiempo sin bloquear el resto del programa.

Código

unsigned long currentTime=0;
unsigned long previousTime=0;
bool ledState=LOW;

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

void loop() {
  currentTime=millis();
  if((currentTime-previousTime)>200){
    previousTime=currentTime;
    Serial.println(F("Action "));
  }
}

Utilización de los temporizadores integrados en el microprocesador

Los temporizadores son registros del microcontrolador que se incrementan cuando se recibe un pulso de reloj.

Uso de las bibliotecas de temporizadores

Hay muchas librerías de gestión de tiempo en Arduino. Por regla general, interactúan con los registros de temporizador de Arduino. Por nombrar las más conocidas: TimerOne.h MsTimer2.h, TimerThree.h

Uso de bibliotecas de gestión de tareas

Estas bibliotecas permiten ejecutar tareas de forma ordenada, dando la impresión de multihilo.

Algunos ejemplos son TaskManager, ProcessScheduler, ArduinoThread y FreeRTOS. Puedes encontrar estas librerías en la lista de referencias de Arduino.

Multitarea con la placa Arduino Due

Para placas basadas en arquitectura SAM, como la Arduino DUE, existe una librería que permite gestionar varias tareas en diferentes funciones loop(). Esto también funciona para las placas Zero, MKRZero y MKR1000.

Microcontrolador multinúcleo: ESP32

El microcontrolador NodeMCU ESP32 tiene un microprocesador de doble núcleo y utiliza el sistema operativo FreeRTOS, lo que le permite ejecutar tareas en paralelo.

Multihilo con Raspberry Pi

La Raspberry Pi es un microordenador, por lo que puede realizar varias tareas al mismo tiempo. Es más, su microprocesador tiene cuatro núcleos, por lo que puede realizar varias tareas a la vez. Puede, por ejemplo, ejecutar varios scripts Python o programas C++ (u otros) al mismo tiempo. También puedes utilizar librerías multithreading dentro de un script Python.

Salir de la versión móvil