#define F_CPU 16000000UL					// frekvence krystalu
#include <math.h>
#include <avr/io.h>
#include <util/delay.h>					// knihovna easu
#include <avr/interrupt.h>
#include "adc_ex.h"
//#include "spi.h"



void uart_config(void);
unsigned char uart_getc(void);
void uart_putc(unsigned char uartdata);
void uart_pstr(char *s);

float uva_index;
float uvb_index;
uint16_t result;
char buffer1[16];
char buffer2[16];


int main(void)
{	
	uart_config();
	_delay_ms(10);

	sei();

	InitADCEx();

	while(1)
  	 {  
      result = ReadADCEx(0); //Read Channel Number UVA, 0

	  uva_index = (((result*2.5)/4096)/6666666); //vypocet proudu na diode UVA
	  uva_index = ((uva_index - (0.000000030612))/0.000000025213);//vypocet uve indexu podle rovnice trendu
	  if(uva_index<0)//aby z rovnice nevyplyval zaporny uv index
	  	{
			uva_index=0;
		}
	  dtostrf(uva_index, 2, 1, buffer2);//uv index na 2 cele a jedno desetinne cislo

	  itoa(result, buffer1, 10);

		uart_pstr("Bity UVA: ");
		uart_pstr(buffer1);
		uart_pstr(" bit \r\n");
		uart_pstr("index UVA: ");
		uart_pstr(buffer2);
		uart_pstr("\r\n");
		_delay_ms(1000);
		_delay_ms(1000);
		_delay_ms(1000);
		_delay_ms(1000);

		result = ReadADCEx(1); //Read Channel Number UVB, 1

	  uvb_index = (((result*2.5)/4096)/57000000);//vypocet proudu na diode UVB
	  uvb_index = (uvb_index / 0.0000000016923);//vypocet uve indexu podle rovnice trendu
	  dtostrf(uvb_index, 2, 1, buffer2);//uv index na 2 cele a jedno desetinne cislo

	  itoa(result, buffer1, 10);

		uart_pstr("Bity UVB: ");
		uart_pstr(buffer1);
		uart_pstr(" bit \r\n");
		uart_pstr("index UVB: ");
		uart_pstr(buffer2);
		uart_pstr("\r\n");
		_delay_ms(1000);
		_delay_ms(1000);
	    _delay_ms(1000);
		_delay_ms(1000);
  	 }
}

void uart_config(void)
{
	UCSRA = 0b00100000;	// vymazání zásobníku UDR
	UBRRH = 0b00000000; //(UBRR_VALUE>>8);
	UBRRL = 0b01100111; //UBRR_VALUE; 103
	UCSRB = 0b10011000; //UCSRB |= (1 << TXEN) | (1 << RXEN); //povolit prijmac i vysilac a preruseni na prijem
	UCSRC = 0b10000110; //UCSRC |= (1 << URSEL)| (1 << UCSZ0) | (1 << UCSZ1); //8bit data, 1-stop
}


// Získání znaku
unsigned char uart_getc(void)
{
// Cekání na prijetí znaku
	while (!(UCSRA & (1<<RXC)));
	return UDR;
}

// Poslání znaku
void uart_putc(unsigned char uartdata)
{
// Cekání na vyprázdnení registru UDR
	while (!( UCSRA & (1<<UDRE)));
	UDR = uartdata;
}

void uart_pstr(char *s) {
    // loop through entire string
    while (*s) {
        uart_putc(*s);
        s++; 
    }
}
