Blynk Virtual Pins for RGB Light

Hi,

I am creating a colour changing light with a Particle photon controlled by my smartphone using Blynk. I have an RGB LED connected to D0,D1 & D2 as BLUE RED GREEN.

I am trying to allow the user to either manually choose a colour using a ZERGBA set to the RGB pins in split mode or the user can push a button on the app set to V1 to automaticity fade the RGB LED.

I have copied in the fading code but need help implementing the button to switch the “mode”

I also want to add a slider to V2 to change the speed of the fade

Here’s my code so far;

Thanks
Mathew

//#define BLYNK_DEBUG // Uncomment this to see debug prints
#define BLYNK_PRINT Serial
#include "blynk/blynk.h"

// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "YourAuthToken";

void setup()
{
    // Start off with the LED off.
    setColourRgb(0,0,0);
    Serial.begin(9600);
    delay(5000); // Allow board to settle
    Blynk.begin(auth);
}

// Attach a Button widget to the Virtual pin 1 
BLYNK_WRITE(V1) {
    if (param.asInt() == 1) { // On button High Fade RGB
       unsigned int rgbColour[3];
  
  // Start off with red.
  rgbColour[0] = 255;
  rgbColour[1] = 0;
  rgbColour[2] = 0;

  // Choose the colours to increment and decrement.
  for (int decColour = 0; decColour < 3; decColour += 1) {
    int incColour = decColour == 2 ? 0 : decColour + 1;

    // cross-fade the two colours.
    for(int i = 0; i < 255; i += 1) {
      rgbColour[decColour] -= 1;
      rgbColour[incColour] += 1;
      
      setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]);
      delay(FadeSpeed);
    }
    }
  }
}

void setColourRgb(unsigned int red, unsigned int green, unsigned int blue) {
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
}
    }
}

BLYNK_WRITE(V2) {
    FadeSpeed = param.asInt()
    }
// Attach a ZeRGBa widget (mode: Merge) to the Virtual pin 0 - and control RGB led
BLYNK_WRITE(V0) {
    int red = param[0].asInt();
    int green = param[1].asInt();
    int blue = param[2].asInt();
    setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]);
}

void loop()
{
    Blynk.run();
    }
}