Hi,
I am having a problem with the project I am doing. Basically, it uses PWM to light up and dim the led. The problem with the program is..
- sometimes when I press the button nothing happens
- and for the 'if' condition when i write 255 or 0 it exceeds the values, so i have written one value lower
Can someone tell me how to fix this problems
Thanks.
int switchpin=2, ledpin=10, reading, current_state, brightness;
int initial_state=LOW, counter=HIGH;
void setup()
{
pinMode(ledpin, OUTPUT);
pinMode(switchpin, INPUT);
Serial.begin(9600);
}
void loop()
{
reading=digitalRead(switchpin);
current_state=debounce(reading);
if (current_state!=initial_state)
{
if (current_state==HIGH && counter==HIGH)
{
brightness=PWM_increase(brightness);
}
if (current_state==HIGH && counter==LOW)
{
brightness=PWM_decrease(brightness);
}
if (current_state==LOW)
{
counter=!counter;
}
}
initial_state=current_state;
Serial.println(current_state);
}
int PWM_increase(int brightness)
{
while (reading==HIGH)
{
reading=digitalRead(switchpin);
if(brightness<=240 && reading==HIGH)
{
brightness=brightness+15;
analogWrite(ledpin, brightness);
Serial.println(brightness);
delay(500);
}
else
{
return(brightness);
}
}
return(brightness);
}
int PWM_decrease(int brightness)
{
while (reading==HIGH)
{
reading=digitalRead(switchpin);
if(brightness>=15 && reading==HIGH)
{
brightness=brightness-15;
analogWrite(ledpin, brightness);
Serial.println(brightness);
delay(500);
}
else
{
return(brightness);
}
}
return(brightness);
}
int debounce(int reading)
{
current_state=digitalRead(switchpin);
if (current_state!=reading)
{
delay(30);
current_state=digitalRead(switchpin);
return(current_state);
}
else
{
return(current_state);
}
}