#define PWM_FADE_IN 1
#define PWM_FADE_OUT 2
#define PWM_INIT_DUTY_IN 0
#define PWM_INIT_DUTY_OUT 248
#define PWM_DUTY_STEP 1
#define PWM_SIZE 250
byte pwm_duty=PWM_INIT_DUTY_IN;
byte pwm_counter=0;
byte pwm_fade_mode=0;
void pwm_init_fadein()
{
pwm_duty=PWM_INIT_DUTY_IN;
pwm_counter=0;
pwm_fade_mode=PWM_FADE_IN;
}
void pwm_init_fadeout()
{
pwm_duty=PWM_INIT_DUTY_OUT;
pwm_counter=0;
pwm_fade_mode=PWM_FADE_OUT;
}
timer_isr()
{
if( pwm_fade_mode == PWM_FADE_IN )
{
pwm_counter ++;
if( pwm_counter > PWM_SIZE )
{
pwm_duty += PWM_DUTY_STEP;
if( pwm_duty > PWM_SIZE )
{
pwm_duty = PWM_SIZE;
pwm_fade_mode = 0;
}
pwm_counter = 0;
}
if( pwm_counter > pwm_duty ) LED_OFF;
else LED_ON;
}
else if( pwm_fade_mode == PWM_FADE_OUT )
{
pwm_counter ++;
if( pwm_counter > PWM_SIZE )
{
pwm_counter = 0;
if( pwm_duty > PWM_DUTY_STEP ) pwm_duty -= PWM_DUTY_STEP;
else
{
pwm_duty = 0;
pwm_fade_mode = 0;
pwm_counter = 1;
}
}
if( pwm_counter > pwm_duty ) LED_OFF;
else LED_ON;
}
}