This is how I do it
void SetLed(int pin,
unsigned long time, //Current time in millis
unsigned long start, //Start time of LED channel
unsigned long fadeup, //Fadeup period in millis
unsigned long period, //Total photo period
unsigned long fadedown, //Fadedown period in millis
unsigned long stop, //Stop time of LED channel
float pwm, //Max value of brightness
int Vpin) //ProgressBar
{
//ON PERIOD//
if (time > start + fadeup && time <= start + period - fadedown)
{
analogWrite(pin, pwm);
int progress = round((pwm*100)/1023);
Blynk.virtualWrite (Vpin, progress);
}
//FADEUP PERIOD//
else if (time > start && time <= start + fadeup)
{
float brightness;
brightness = map(time - start, 0, fadeup, 0, pwm);
analogWrite(pin, brightness);
int progress = round((brightness*100)/1023);
Blynk.virtualWrite (Vpin, progress);
}
//FADEDOWN PERIOD//
else if (time > start + period - fadedown && time <= start + period)
{
float brightness;
brightness = map(time - start - period + fadedown, 0, fadedown, pwm, 0);
analogWrite(pin, brightness);
int progress = round((brightness*100)/1023);
Blynk.virtualWrite (Vpin, progress);
}
//OFF PERIOD//
else if (time > stop || time < start)
{
analogWrite(pin, 0);
Blynk.virtualWrite(Vpin, 0);
}
}