#include <avr/io.h>
#include <util/delay.h>



unsigned char full = 0;



void fade_rgb(unsigned char delay)
{
		if(OCR2 != 255 	&& OCR1B == 0 		&& OCR1A == 0) 		{++OCR2;full= 0;}
		if(OCR2 == 255 	&& OCR1B != 255 	&& OCR1A == 0) 		++OCR1B;
		if(OCR2 != 0 	&& OCR1B == 255 	&& OCR1A == 0)		--OCR2;

		if(OCR2 == 0	&& OCR1B == 255		&& OCR1A != 255)	++OCR1A;
		if(OCR2 == 0	&& OCR1B != 0		&& OCR1A == 255)	--OCR1B;

		if(OCR2 != 255 	&& OCR1B == 0		&& OCR1A == 255)	++OCR2;
		if(OCR2 == 255	&& OCR1B != 255		&& OCR1A == 255)	++OCR1B;
		if(OCR2 == 255	&& OCR1B == 255		&& OCR1A == 255)	full=1;

		if(OCR2 != 0	&& OCR1B != 0		&& OCR1A != 0 && full == 1)		{--OCR1B;--OCR2;--OCR1A;}


		_delay_ms(delay);
}

void init_pwm(void)
{
	//Set registers vor PWM of Timer 1
    TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<WGM10);
    TCCR1B = (1<<WGM12) | (1<<CS10); // Fast PWM 8-bit inverted

	//Set registers vor PWM of Timer 2
	TCCR2 = (1<<WGM21) | (1<<WGM20) | (1<<COM21) | (1<<CS20); // 8 bit fast PWM inverted
}


int main (void) {
	//Set port register as output for Pb3 to Pb1
	DDRB = 0x0E;
	//Initialise pwm
	init_pwm();

	mode = 1;
	OCR2  = 0;
	OCR1B = 0;
	OCR1A = 0;

	while(1)
	{
		fade_rgb(75);
	}

   return 0;
}


