Arduino detiene el desvanecimiento RGB (biblioteca de terceros) al interrumpir

0

Usando el siguiente código, el proceso de desvanecimiento solo se detiene después de que se haya ejecutado un ciclo completo (como se predijo). ¿Cuál sería la mejor manera de detener el ciclo de color cuando se llama a la interrupción (para que pueda cambiar a otro modo de ciclo)?

/**
 * RGBController
 * author: peterrus
 * License: Attribution-ShareAlike 3.0 Unported (http://creativecommons.org/licenses/by-sa/3.0/)
 * rgbled library: https://github.com/msparks/arduino-rgbled
 */

#include <rgbled.h>

static const int kRedPin = 10;    // red channel pin
static const int kGreenPin = 9;  // green channel pin
static const int kBluePin = 11;    // blue channel pin

// Brightest value (intensity) to use for any channel.
static const uint8_t kMaxBrightness = 255;

// Delay between color changes.
static const int kDelay = 3;  // milliseconds

// Create the RGBLED object to control our 3-channel LED.
RGBLED led(kRedPin, kGreenPin, kBluePin);

boolean cycle = false;

void setup()
{
  //modeswitch button
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
  attachInterrupt(0, doCycleToggle, LOW);

  // set fading delay.
  led.defaultDelayIs(kDelay);
}

void loop()
{
  if(cycle)
  {
    // Fade through the color spectrum.
    //   red -> violet -> blue -> cyan -> green -> yellow -> white -> red -> ...

    // Red -> red + blue (violet).
    led.fadeChannel(RGBLED::kBlue, 0, kMaxBrightness);

    // Red + blue -> blue.
    led.fadeChannel(RGBLED::kRed, kMaxBrightness, 0);

    // Blue -> blue + green (cyan).
    led.fadeChannel(RGBLED::kGreen, 0, kMaxBrightness);

    // Blue + green -> green.
    led.fadeChannel(RGBLED::kBlue, kMaxBrightness, 0);

    // Green -> green + red (yellow).
    led.fadeChannel(RGBLED::kRed, 0, kMaxBrightness);

    // Green + red -> green + red + blue (white).
    led.fadeChannel(RGBLED::kBlue, 0, kMaxBrightness);

    // White -> red.
    uint8_t mask = RGBLED::kBlue | RGBLED::kGreen;
    led.fadeChannels(mask, kMaxBrightness, 0);
  }
}

void doCycleToggle()
{
  if(cycle) { cycle = false; } else { cycle = true; }
}
    
pregunta peterrus

1 respuesta

0

Lo resolví modificando la biblioteca led RGB para que escuche las interrupciones.

    
respondido por el peterrus

Lea otras preguntas en las etiquetas