/*MCU - ATTiny2313 @ 1000000Hz Internal Freq.*/

#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>

//motor 1 (jobb) H/bridge labak: PB2 elore, PB5 hatra;
//motor 2  (bal) H/bridge labak: PB6 elore, PB7 hatra;
//
//pwm out: PB3(OC1A);
//
//sw1 (s1): PB0
//
// sw2 (s2): PB1;

void delayms(uint16_t millis) {
  while ( millis ) {
    _delay_ms(1);
    millis--;
  }
}


int main(void){

  unsigned char sensor,sw1,sw2;
  unsigned int _duty=10;

  //-------------------------- I/O init----------------------------------------//
  DDRB = 0b11111100;   //PORTB  PB0, PB1 input pin, a tobbi output;
  DDRD = 0x00;   //PORTD input port
  PORTD = 0b00000011;  //belso felhuzo ellenallasok aktivalasa a kapcsolokhoz.

  TCCR1A = 0b10100001; // 8 bites fazishelyes PWM (WGM10) || sima nem invertalt PWM (COM1A1,COM1B1);
  TCCR1B = 0b00000010; //cs11 BIT on: FCPU /8;

  while(1) {

    //PWM sebesseg allito kapcsolok ellenorzese
    sw1 = (PINB & 0b00000001);
    sw2 = (PINB & 0b00000010);

      if (sw1==0) _duty =_duty-10;   //pwm sebesseg csokkentese mindket motornak;
      if (sw2==0) _duty =_duty+10; //pwm sebesseg novelese mindket motornak;


    _duty = (_duty*255)/100;         //motor sebesseg konvertalasa 0-100%-rol 0-255-re
    OCR1A = _duty;
    sensor = (PIND & 0x07); // szenzor ellenorzes

    switch(sensor)
		{
			case 0x00:PORTB |= (1<<3);  PORTB |= (1<<7);	//000 , elore
				  break;

			case 0x01:PORTB |= (1<<3);  //001, jobbra
				  break;

			case 0x02:PORTB |= (1<<3);  PORTB |= (1<<7);		//010 , elore
				  break;

			case 0x03:PORTB |= (1<<3);		//011, jobbra
				  break;

			case 0x04:PORTB |= (1<<7);		//100, balra
				  break;

			case 0x05:PORTB |= (1<<3);  PORTB |= (1<<7);		//101	, elore
                                  break;

			case 0x06:PORTB |= (1<<7);		//110	, balra
				  break;

			case 0x07:PORTB |= (0<<3);  PORTB |= (1<<0);PORTB |= (0<<6);  PORTB |= (0<<8);	//111 stop
		                  break;

			default:PORTB |= (1<<3);  PORTB |= (1<<7);
                                break;
		}
           }
     return 0;
  }




