#include <avr/io.h>
#include <stdio.h>
#include <avr/interrupt.h>

unsigned char pomoc ;	//vo funkcii kontrola
signed int pomoc2;		//výsledok rozdielu súčasného priemeru a referenčnej hodnoty 

unsigned char ch,k; 	//pomocné premenné pre cykly for

unsigned int priemer;	//priemer zo všetkých kanálov A/D prevodníka
unsigned char hranica;	//prah spustenia efektu

unsigned int a ;		//premenná určujúca periódu aktualizácie svetelného efektu

unsigned char led [8][8];	//pole znázorňujúce rozmiestnenie LED na doske
unsigned char fronta [3][4];//pole, do ktorého sa zapisujú vzniknuté svetelné efekty
unsigned char poradie ;	//určuje adresu podriadenej dosky, ktorú riadiaca doska práve osloví

unsigned char indexy [2][64]; //pole určujúce poradie v akom sa prvky z pola led zapisujú do posuvných registrov

//unsigned char i; 		//pomocné premenné, v procese pridelovania adries určujú indexy pola dosky
//unsigned char j; 		//do ktorého sa zapisujú adresy
unsigned char strana; 	//parameter svetelného efektu, ktorý určuje veľkosť zobrazovaného útvaru
signed char posun;		//pomocná premenná pre cyklus, v ktorom sa vykresluje efekt (funkcia efekt)
 
unsigned char data_master_passive;	//premenná určujúca, či má na riadiacej doske vzniknúť svetelný efekt 
									//ako reakcia na dianie na susednej doske
unsigned char data_slave;//premenná, ktorú podriadená doska odosiela riadiacej, určuje či a kde vznikol svetelných efekt 	
unsigned char master;	//premenná, ktorá určuje status dosky : 0->podriadená, 1->riadiaca
extern unsigned char adresadek;	// obsahuje poslednú priradenú adresu (tj. počet dosiek v zoskupení)
extern unsigned char data_rec;	// premenná, do ktorej sa ukladajú prijaté dáta 

unsigned char index1;	//premenné určujúce indexy podriadenej dosky, na ktorej vznikol
unsigned char index2;	//svetelný efekt v rámci pola dosky
unsigned char offset;	//parameter svetelného efektu, časový offset
unsigned char stredx;	//parametre svetelného efektu, určujúce polohu stredu útvaru
unsigned char stredy;	//ktorý sa zobrazuje

void registry (void);	//funkcia, ktorá nastaví riadiace registry požadovaným spôsobom
void zapis (void);		//vykoná prepis dát na paralelné výstupy posuvných registrov(/LA)
void matica (void);		//prepíše dáta z poľa led do posuvných registrov
void efekt (unsigned char stredx,unsigned char stredy, unsigned char strana);	//vykreslí efekt do poľa led
void nuluj (void);		//naplní pole led nulovým prvkami

unsigned char find (unsigned char poradie);	//nájde danú adresu v poli led, vráti indexy prvku s adresou


ISR (TIMER0_OVF_vect);	// obsluha prerušenia po pretečení čítača 0
ISR (ADC_vect);			// obsluha prerušenia po dokončení A/D prevodu

