/* Název: program zařízení (slave 2) - kotel BBCE
--------------------------------------------------------*/

//#include <avr/iom8.h> 

#include "rfm_mega8_h.h"
#define wait_master_error 57 // n*0,26s ; vlastní spouštění měření při výpadku MASTERU

char teplota=0,rel0=0,rel1=0,warning=0,minuty=0,hodiny=0,ID2[2]={222,66},par=0,tcint=0,tl2=0;


//------------- hlavní program ---------------------

int main(void){

char msgin[4],txt1[16],press=1;
unsigned int i;

	_delay_ms(1000);

	
	lcd_init();					//init MCU
	spi_init();					//inicializace SPI
	rf_init();					//inicializace modulu
	rf_receiver();				//modulu do režimu ...
	TCCR0=0b00000101;
	TIMSK|=(1<<TOIE0);
	
	lcd_gotoxy(0,0);
	lcd_puts("ini ok");
	_delay_ms(500);
	lcd_clrscr();
	sei();

// ------------- zacyklení ------------	

while(1){

	if(bit_is_set(PIN_SPI,FFIT)){
		precist(msgin);								//načtení zprávy a uložení do msgin
		compare(msgin);								//porovnání parametrů, procedení R/W, odpověď
	}
		
	if((msgin[2]=='K')|(tcint>=wait_master_error)){	//vyvoláno značkou konce zprávy "K" nebo timerem
			msgin[2]=0;								//při výpadku MASTERU běží nezávisle sám (časování timerem)
			process();								// výkon porcesů
			if(tcint>=wait_master_error){	
				lcd_clrscr();
				lcd_gotoxy(0,0);
				lcd_puts("Error!");					// při výpadku MASTERU zobrazí "Er"
				tl2=0;
				lcd_gotoxy(3,1);
				sprintf(txt1,"%d%cC",teplota,223);
				lcd_puts(txt1);
				par=2;
			}
		
			tcint=0;
			if(press!=0)							//zhasnutí disp po nějaké době
				press++;
			if(press>6){							// zhas disp po n cyklech 
				press=0;
				LIGHT_OFF}
	}		

//----- ovládání tlačítek - levé -------		
TLL_STISK{
  if(press==0){
  	LIGHT_ON
	press=1;
	_delay_ms(30);
	while(bit_is_clear(PIN_PER,TLL))		// zákmity tl.
	_delay_ms(30);
  }
  else{								//ošetření stisku a osvětlení disp
	_delay_ms(30);	
	while(bit_is_clear(PIN_PER,TLL))		// zákmity tl.
	_delay_ms(30);
	lcd_clrscr();
	lcd_gotoxy(0,0);
	lcd_puts("Rele 0: automat");
	rel0=1;
	lcd_gotoxy(0,1);
	lcd_puts("automat");
	i=0;
	for(i=0;i<1000;i++){
		i++;
		if(bit_is_clear(PIN_PER,TLL))
			i=1000;
		_delay_ms(10);
		TLP_STISK{
				i=0;
				lcd_gotoxy(0,1);
				switch (rel0){						
				case 1:{rel0=4;
						lcd_puts("vypnuto");
							break;}
				case 4:{rel0=5;
						lcd_puts("zapnuto");
							break;}
				case 5:{rel0=1;
						lcd_puts("automat");
							break;}
						}
				_delay_ms(300);
				}
		}
	_delay_ms(30);
	while(bit_is_clear(PIN_PER,TLL))
	_delay_ms(30);
	lcd_clrscr();
	lcd_gotoxy(0,0);
	lcd_puts("Rele 1: automat");
	rel1=1;
	for(i=0;i<1000;i++){
		if(bit_is_clear(PIN_PER,TLL))
			i=1000;
		_delay_ms(10);
		i++;
		TLP_STISK{
				i=0;
				lcd_gotoxy(0,1);
				switch (rel1){						
				case 1:{rel1=4;
						lcd_puts("vypnuto");
							break;}
				case 4:{rel1=5;
						lcd_puts("zapnuto");
							break;}
				case 5:{rel1=1;
						lcd_puts("automat");
							break;}
						}
				_delay_ms(300);
				}
		}
	_delay_ms(30);
	while(bit_is_clear(PIN_PER,TLL))
	_delay_ms(30);
	par=2;
	tcint=0;
	tep_disp();
	}
    if(warning==1){
		warning=2;
		par=2;	}
  }
// --------- pravé tlačítko ----------------------
  TLP_STISK{
  	 LIGHT_ON
	 press=1;
	if(tl2==0){
	  tl2=1;
	  lcd_clrscr();
	  lcd_gotoxy(0,0);
	  if((rel0==1)|(rel0==3)|(rel0==5))
	  	lcd_puts("R0-ZAP");
	  else
		lcd_puts("R0-VYP");
	  lcd_gotoxy(2,1);
	  if((rel1==1)|(rel1==3)|(rel1==5))
	 	lcd_puts("R1-ZAP");
	  else
		lcd_puts("R1-VYP");	
	}
	else{
	  tep_disp();
	}
 	 _delay_ms(20);
	 while(bit_is_clear(PIN_PER,TLP))		// zákmity tl.
	 _delay_ms(20);
	 if(warning==1)
		warning=2;
	 par=2;
	 tcint=0;
  }



	_delay_us(1);
	}	//končí WHILE

return(1);
}		//končí MAIN








ISR(TIMER0_OVF_vect){					// timer inkrementuje po cca 0,5s
	tcint++;
	}



