Crear varios loops con tiempo en un mismo sketch

Tengo un problema que espero que algun experto en programacion pueda darme una solución, seguramente sea sencillo, pero mi poca experiencia en programacion me impide solucionarlo.
Tengo una matriz de leds programables de 8x16, me descargue las librerías de Adafruit para su control, y se incluye un programa de ejemplo para imprimir texto giratorio en la matriz, hasta aqui todo me funciona bien, pues estuve haciendo pruebas y lo que necesito hacer en este sketch es que me vaya mostrando diferentes textos en diferentes colores según tiempo, es decir, que por ejemplo me muestre el mensaje "hola" en color verde durante 5 minutos, y después me muestre el mensaje "adios" en color azul durante un minuto, y después vuelva a aparecer de nuevo el mensaje hola, empezando de nuevo el ciclo de tiempo.
Hasta ahora la única forma que he tenido de hacer esto es creado varios sketchs diferentes, cada uno con su texto y con su color, y tengo que estar cargándolos en el arduino, pero evidentemente esto es una forma muy burda de afrontar el problema y lo ideal seria automatizar esto en el mismo sketch.
He intentado yo modificar el código, añadiendo dos loops, cada uno con su texto y luego renombrando las variables para que no se repitan, pero no me funciona, lo máximo que he conseguido es que me muestre los dos textos a la vez mezclados y parpadeando, por lo que intuyo que no he resuelto bien el problema, y tendré que decirle de alguna manera al código que se ejecute primero un loop y después el otro.
He estado buscando en Internet soluciones y he visto gente que pregunta por cosas similares, pero no se da una solución directa a este problema.
Dejo aquí el código original para que echeis un vistazo:

// Adafruit_NeoMatrix example for single NeoPixel Shield.
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#ifndef PSTR
 #define PSTR // Make Arduino Due happy
#endif
#define PIN 6
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 8, PIN,
 NEO_MATRIX_BOTTOM    + NEO_MATRIX_RIGHT +
  NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);
const uint16_t colors[] = {
  matrix.Color(0, 0, 255), matrix.Color(0, 255, 0), matrix.Color(255, 0, 0),matrix.Color(0, 0, 255), matrix.Color(255, 0, 255), matrix.Color(0, 255, 255), matrix.Color(255, 255, 255)};
void setup() {
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(255);
  matrix.setTextColor(colors[0]);
}
int x    = matrix.width();
int pass = 0;
void loop() {
  matrix.fillScreen(0);
  matrix.setCursor(x, 0);
  matrix.print(F("Prueba de texto"));
  if(--x < -130) {
    x = matrix.width();
    if(++pass >= 3) pass = 0;
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
  delay(100);
}

Y aquí esta el código modificado por mi en el que he intentado meter dos loops llamando a 2 funciones, pero como ya he comentado no me funciona y me muestra los 2 mensajes al mismo tiempo en la matriz led.

void setup() {
  matrix.begin();
  matrix.setTextWrap(false);
  matrix.setBrightness(50);
  matrix.setTextColor(colors[0]);
  matrix2.begin();
  matrix2.setTextWrap(false);
  matrix2.setBrightness(50);
  matrix2.setTextColor(colors[0]
}
int x    = matrix.width();
int y    = matrix2.width();
int pass = 0;
void loop() {
secuencia_uno();
secuencia_dos();
}
void secuencia_uno() {
  matrix.fillScreen(0);
  matrix.setCursor(x, 0);
  matrix.print(F("Hola"));
  if(--x < -130) {
    x = matrix.width();
    if(++pass >= 5) pass = 0;
    matrix.setTextColor(colors[pass]);
  }
  matrix.show();
  delay(100);
}
void secuencia_dos() {
matrix2.fillScreen(0);
  matrix2.setCursor(x, 0);
  matrix2.print(F("Adios"));
  if(--y < -130) {
    y = matrix2.width();
    if(++pass >= 5) pass = 0;
    matrix2.setTextColor(colors2[pass]);
  }
  matrix2.show();
  delay(100);
}

Añade tu respuesta

Haz clic para o