#include <util/delay.h>
#include <inttypes.h>
#include <avr/io.h>

#define BAUDRATE 9600 

#define ZOLD_BE    PORTB |=  (1<<PB0)
#define ZOLD_KI    PORTB &= ~(1<<PB0)
#define PIROS_BE    PORTB |=  (1<<PB1)
#define PIROS_KI    PORTB &= ~(1<<PB1)
#define KEK_BE    PORTB |=  (1<<PB2)
#define KEK_KI    PORTB &= ~(1<<PB2)


volatile int adc=0; 

char * itoa(int a)
{
#define BUFFSIZE 4
 static char str[BUFFSIZE];
int i = sizeof(str) - 1;
do
{
str[--i] = '0' + a % 10;
}
while ((a = a / 10) && i >= 0);
return &str[i];
}
void InitPORT() {

//           76543210
    DDRA = 0b00000000;
//           76543210
    DDRB = 0b00001111;
	//       76543210
    DDRC = 0b00000000;
//           76543210 
    DDRD = 0b11111110;
}
void InitADC() {
//            76543210
    ADMUX = 0b01000000;
//             76543210
    ADCSRA = 0b10000111;
}
uint16_t ReadADC(uint8_t ch) {

    ADMUX = (ADMUX & 0b11110000) | ch;

    ADCSRA|=(1<<ADSC);

    while(ADCSRA & (1<<ADSC));

    return (ADCL | (ADCH<<8)); 
}
void USARTInit(uint16_t ubrr_value)
{

	UBRRL = ubrr_value;
   	UBRRH = (ubrr_value>>8);

    UCSRC=(1<<URSEL)|(3<<UCSZ0);
    UCSRB=(1<<RXEN)|(1<<TXEN);
}
char USARTReadChar()
{
	while(!(UCSRA & (1<<RXC)))
	{
	}
	return UDR;
}
#
void USARTWriteString(char *);
void USARTWriteString(char *str){
	char i;
	for(i=0;str[i];i++) USARTWriteChar(str[i]);
}
void USARTWriteChar(char data)
{
	while(!(UCSRA & (1<<UDRE)))
	{
	}

	UDR=data;
}

void main()

{
	char data;
	InitPORT();
    InitADC();
	USARTInit(F_CPU / (BAUDRATE * 16UL) - 1);
while(1) {
PIROS_BE;
USARTWriteString(Read_ADC(2));
USARTWriteString(" BE ");
_delay_ms(500);
PIROS_KI;
USARTWriteString(ReadADC(3));
USARTWriteString(" KI ");
_delay_ms(500);
        
    } // for
}
