hello guys, i'm just getting started with the arduino and i'm trying to make a arduino to control fade in and out a led with the switch.
i use the arduino digital input pin 2 as my input switch and pwm out from pin 9.i want to do is when i turn on the switch ( input HIGH) led will gradually turn on and stay on until i turn off the switch and when i turn off led will gradually turn off. i manage to make the led fade in when i turn on the button but its not stays on after when it fade in. can any one point me whats the problem.
int ledPin = 9;
void setup()
{
pinMode( 2, INPUT);
}
void loop()
{ int fadeValue;
if (( ( digitalRead(2) ) == ( HIGH ) ))
{
for (fadeValue = 0 ; fadeValue < 255; fadeValue++)
{
analogWrite(ledPin, fadeValue);
delay(10);
}
}
else
{
analogWrite(ledPin, 0 );
}
}
The behaviour of your code is that as long as the switch is on, the LED will fade from 0 to 255 over and over again.
At the moment that you switch the switch off, the LED will be off.
I guess you want to fade from 0 to 255 only once and stay on 255 afterwards as long as the switch is on
void loop()
{
static int fadeValue = 0;
// if switch is ON
if (digitalRead(2) == HIGH)
{
// if not at maximum
if (fadeValue < 255)
{
// increment intensity
fadeValue++;
// write LED intensity
analogWrite(ledPin, fadeValue);
// wait a little
delay(10);
}
}
// if switch is OFF
else
{
// switch LED off
analogWrite(ledPin, 0 );
// reset fade value to reflect the intensity of the LED
fadeValue = 0;
}
}
Remember that loop is executed permanently; so the above will increment fadevalue every iteration of the loop() (instead if in a for-loop).
Using a static variable prevents the last value from being forgotten.
Not tested.
thank you. its working.but i also want the led to fade off when i release the button. can you please explain how to do that.
In the else, decrement fadeValue (use 'fadeValue--') and use that value for the analogWrite. Do not forget to stop when fadeValue reaches 0.
yes i figure it out. please tell me if this code has any errors
int ledPin = 9;
void setup()
{
pinMode( 2, INPUT);
}
void loop()
{
static int fadeValue = 0;
if (digitalRead(2) == HIGH)
{
if (fadeValue < 255)
{
fadeValue++;
analogWrite(ledPin, fadeValue);
delay(10);
}
}
else
{
if (fadeValue > 0)
{ fadeValue--;
analogWrite(ledPin, fadeValue);
delay(10);
}
}
}
Looks OK; did you test it?
yes its working without problem.