I want my LED to turn on gradually without using the delay()
function and blocking the code.
Here's the code i came up with:
int led_pin = 6;
unsigned long millisTimer = 0;
int PWMdelay = 5000;
int condition = 0;
int i = 0;
void setup() {
pinMode(led_pin, OUTPUT);
}
void loop() {
if(condition == 1){
if ((millis() - millisTimer) > PWMdelay){
if(i<255){
i++;
millisTimer = millis();
}
}
analogWrite(led_pin, i);
}
}
Is this the "right way" of slowing the PMW duration from 0 to 255 or there are alternative/better/easier ways?
ElectronSurf
asked Jun 23, 2019 at 14:37
1 Answer 1
Here is my take at this - I've followed the example code mentioned by other members and here is "FadeWithoutDelay"
const int ledPin = 11;
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 100; // fade interval (milliseconds)
int brightness = 0; // how bright the LED is
int fadeAmount = 5; // how many points to fade the LED by
void setup()
{
pinMode(ledPin, OUTPUT); // set the digital pin as output:
}
void loop()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis; // save the last state
analogWrite(ledPin, brightness); // Set the brightness
brightness = brightness + fadeAmount; // change the brightness for next time through the loop
// reverse the direction of the fading at the ends of the fade:
if (brightness <= 0 || brightness >= 255)
{
fadeAmount = -fadeAmount;
}
}
}
default
i--
? Do you want to fade out the LED after the fade in? That does not work this way, since it will only vary between 254 and 255.millisTimer = millis();
outside if-elseBlinkWithoutDelay
example)