#include <avr/io.h>
#include "touch.h"

unsigned int read_adc(void)   	//podprogram realizujici ziskani hodnoty z A/D prevodniku
{ 
    ADCSRA|= (1 << ADSC);   	//odstartovani zacatku prevodu
    while ((ADCSRA & 0x10)==0); //cekani dokud se ADCSRA & 0x10 nerovna nule - to znaci konec prevodu
    ADCSRA |= (1 << ADIF);		//nulovani ADIF - nuluje se zapsanim jednicky
    return ADCW;   				//navratova hodnota
}

unsigned int F_radek(void)   	//podprogram zjistujici radek, ktery byl stisknut
{  	
	for (unsigned int i = 0x40; i < 0x43; i++)	//cyklem se realizuje postupny vyber jednoho ze tri prvnich A/D prevodniku
		{
		ADMUX= i;				//nastaveni parametru prevodu
		if(read_adc()>100)		//pokud je na odporovem delici napeti, znamena to stisknutou plosku touch screenu
			{
			return i-0x40+1;	//navratova hodnota - cislo 1,2,3
			break;				//ukonceni for ciklu, pokud byl nalezen stisknuty radek
			}
		}
}

unsigned int F_stlaceno (void)
{
	volatile unsigned char stlaceno=0;	//nulovani promenne stlaceno
	unsigned char k;
		
	PORTA = 0;				//nulovani celeho portu A

	for(k=0;k<6;k++)		//for cyklus adresujici postupne vsech 5 sloupcu touch screenu
		{
		if (k==1)			//prvni sloupec
			{
			PORTA |= ( 1 << PORTA3 );		//nastaveni pinu PA3 na logickou 1
			if (F_radek()>0) 				//testovani, jestli je stisknut nejaky radek v tomto sloupci
				{
				if (F_radek()>0)		//nova kontrola jestli je jeste radek stale stisknut
					{
					stlaceno=F_radek();	//pokud ano, zapise se do promenne stlaceno cislo radku (1 az 3)
					break;				//ukonci se for ciklus, aby se neprochazely dalsi sloupce
					}
				}
			}
		
		PORTA = 0;
		if (k==2)
			{
				PORTA |= ( 1 << PORTA4 );
			if (F_radek()>0) 
				{
				if (F_radek()>0)
					{
					stlaceno=3+F_radek();
					break;
					}
				}
			}

		PORTA = 0;
		if (k==3)
			{
			PORTA |= ( 1 << PORTA5 );
			if (F_radek()>0) 
				{
				if (F_radek()>0)
					{
					stlaceno=6+F_radek();
					break;
					}
				}
			}
		
		PORTA = 0;
		if (k==4)
			{
			PORTA |= ( 1 << PORTA6 );
			if (F_radek()>0) 
				{
				if (F_radek()>0)
					{
					stlaceno=9+F_radek();
					break;
					}
				}
			}
		
		PORTA = 0;
		if (k==5)
			{
			PORTA |= ( 1 << PORTA7 );
			if (F_radek()>0) 
				{
				if (F_radek()>0)
					{
					stlaceno=12+F_radek();
					break;
					}
				}
			}		
	}
	return stlaceno;
}
