#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
#include <inttypes.h>

void delay(void);
void motors_ramp_up(void);
void motors_ramp_down(void);

void motor_clockwise(void);
void motor_counterclockwise(void);
void turn_right(void);
void turn_left(void);
void turn_around(void);
void go_forward(void);
void stop(void);
int main (void)
{
	DDRB = 0b11011001;					
	TCCR0 = 0b01100100;					//PWM for right motor
	TCCR2 = 0b01100011;					//PWM for left motor
	int i = 0;

	go_forward();
	stop();

	turn_around();
	stop();

	go_forward();
	stop();

	turn_right();
	stop();

	go_forward();
	stop();

	turn_around();
	stop();

	go_forward();
	stop();

	turn_around();
	stop();

	go_forward();
	stop();

	turn_right();
	stop();

	return 0;

}
	
void delay(void)
{
	long t = 0;
	for (t ; t <50000; t++){}
	return 0;
}
void motors_ramp_up(void)
{		OCR0 = 0;
		OCR2 = 0;	
		int i = 0;
		for(i; i<20; i++)
		{
			OCR0 = OCR0 + 10;
			OCR2 = OCR2 + 10;
			delay();
		}
	
}

void motors_ramp_down(void)
{	
	for(OCR0; OCR0>20; )
	{
		OCR0 = OCR0 - 10;
		OCR2 = OCR2 - 10;
		delay();
	}
	OCR0 = 0;
	OCR2 = 0;
}
void turn_around(void)
{	PORTB = 0B01000001;
	for(OCR0; OCR0<140; )
	{ 
		OCR0 = OCR0 +10;
		OCR2 = OCR2 + 10;
		delay();
	}	
	delay();
}
void turn_right(void)
{
	PORTB = 0B00001001;
	for(OCR0; OCR0<110; )
	{
		OCR0 = OCR0 + 10;
		OCR2 = OCR2 + 10;
		delay();
	}

}
void turn_left(void)
{
	PORTB = 0B01000001;
	for(OCR0; OCR0<110; )
	{
		OCR0 = OCR0+10;
		OCR2 = OCR2+10;
		delay();
	}
}
void go_forward(void)
{	
	PORTB = 0b00000001;
	motors_ramp_up();
}
void stop(void)
{
	motors_ramp_down();
}
