Bluetooth "multitarea con delay"

Buenas a todos. Os explico: Quiero hacer una combinación de tiras de leds destellantes, pero que cada pin tenga una frecuencia de destello diferente. He utilizado el método "scheduler" para que no se mezclen los "delay" y todo hasta ahí correcto. El problema viene cuando quiero encender o apagar cada tira individualmente. Si le quito los "delay" todo funciona correcto, pero al ponerlos no ejecuta ninguna orden desde el MonitorSerie. Os dejo el código de novato reducido (ya que quiero añadir bastantes mas combinaciones) para que me digáis en que estoy fallando y/o que método puedo utilizar. Gracias.

#include <SchedulerARMAVR.h>
char val;


void setup() {

  Serial.begin(9600); 
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(13, OUTPUT);

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

}

void loop() {
  if (Serial.available()) {
    val = Serial.read();
{
  if(val == 'q'){
  digitalWrite(2, HIGH);
  Scheduler.delay(5000);
  digitalWrite(2, LOW);
  Scheduler.delay(5000);
}
  if(val == 'a'){
  digitalWrite(2, HIGH);
  Scheduler.delay(1000);
  digitalWrite(2, LOW);
  Scheduler.delay(1000);
}
  if(val == 'z'){
  digitalWrite(2, LOW);
}
}
}
}
void loop2() {
   if (Serial.available()) {
    val = Serial.read();
{
    
  if(val == 'w'){
  digitalWrite(3, HIGH);
  Scheduler.delay(1000);
  digitalWrite(3, LOW);
  Scheduler.delay(1000);
}
  if(val == 's'){
  digitalWrite(3, HIGH);
  Scheduler.delay(50);
  digitalWrite(3, LOW);
  Scheduler.delay(50);
}
  if(val == 'x'){
  digitalWrite(3, LOW);
}
}
}
}
void loop3() {
  if (Serial.available()) {
    val = Serial.read();
{
  if(val == 'e'){
  digitalWrite(13, HIGH);
  Scheduler.delay(3000);
  digitalWrite(13, LOW);
  Scheduler.delay(3000);
}
  if(val == 'd'){
  digitalWrite(13, HIGH);
  Scheduler.delay(200);
  digitalWrite(13, LOW);
  Scheduler.delay(200);
}
  if(val == 'c'){
  digitalWrite(13, LOW);
}
}
}
  yield();
}

Bueno la manera mas simple es usar algo como

void loop()
{
  unsigned long ahora = millis();
  if (led == LOW) 
  {
    if(ahora - antes > intervalo)
    {
          antes = ahora;   
          led = HIGH;
    }
  } 
  else
 {
    if(ahora - antes > intervalo)
    {
          antes = ahora;   
          led = LOW;
    } 
 }           

 digitalWrite(ledPin, led);

Gracias Nómada. Creó que no explique bien. El tema de lo delay esta solucionado, el problema que tengo es con el MonitorSerial y que en el futuro sera Bluetooth, pero que en el caso es mismo código. Lo que quiero hacer es que al ejecutar las letras asignadas haga la función seleccionada de dentro de su propio loop, y si ejecuto otro código, pues que se ejecute sin repercutir a ningún otro.
Esperó haberme explicado mejor.
PD: igualmente no podría poner ese código que me pones porque quiero añadir tiras de les ws2812, y el código no es tan simple como LOW y HIGH.