Bluetooth "multitarea con delay"


buenas todos. os explico: quiero hacer una combinación de tiras de leds destellantes, pero que cada pin tenga una frecuencia de destello diferente. 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.
code: [select]
#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
 
code: [select]


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);             


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Bluetooth "multitarea con delay"


arduino

Comments