#include <htc.h>
#include <pic.h>
//#include <pic16f886.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "config.h"
#include "config_1.h"
#include "1wire_1.h"
#include "1wire_2.h"
#include "lcd.h"
#define LCD_BL RC1
__CONFIG(WDTE_OFF & FOSC_INTRC_NOCLKOUT & PWRTE_ON & MCLRE_ON & BOREN_OFF & LVP_OFF);

bit atlagmehet_1=0;
char aindex_1=0;
unsigned char menu=0;
int tomb_1[4]={0,0,0,0},szum_1=0;
int delay1=100, delay2=100;
bit d_ok=0;
bit menu_ok=0;
bit nc_1=0;	//1, ha nem található a 1. érzékelő

//bit first_szum=0;
unsigned char adress_1[8];

void interrupt isr(void);
void read_ROM_1(void);


void main(){	
	unsigned char sz1be=eeprom_read(0x00);
	unsigned char sz1ki=eeprom_read(0x01);
	unsigned char sz2be=eeprom_read(0x02);
	unsigned char sz2ki=eeprom_read(0x03);

	ANSEL=0;
	ANSELH=0;
	TMR0=0;
	OPTION_REG=0b11111111;//eloosztóval 
	WDTCON= 0b00001011;	// watchdog be

	TRISA=0B00000111;
	TRISB =	0b00000000;	
	PORTB =	0;
	TRISC = 0b11000000;
	PORTC =	0;
//	LCD_BL=0;
	INTCON=0b11000000;
	T2CON=0b01111111;
	PR2=200;
	TMR2IE=1;	//Timer2 megszakítás
//	OPTION_REG=0b11111111;
	__delay_ms(50);
	lcd_init();
	lcd_init_cgram();     // Az ékezetes betuk feltöltése
	__delay_ms(100);
	
while(1){		
 if(nTO==1)		//üdvözlés
	 {
	for(char vr=0;vr<5;vr++)
	 {
	  lcd_goto(0x00);
	  lcd_put_string("---Kalibráció---");
	  lcd_goto(0x40);
	  lcd_put_string("---folyamatban--");
	  __delay_ms(400);
	  lcd_clear();
	  __delay_ms(400);
	 }
}
	 if(nTO==0)	
	 {
	  lcd_goto(0x00);
      lcd_put_string("---WATCHDOG----");
	  lcd_goto(0x40);
	  lcd_put_string("--újraindítás--");
	  __delay_ms(2000);
  	 }
}

	  LCD_BL=0;

	 onewire_reset_1();
	 __delay_ms(100);

	while(1)
	{	
	 if(nTO==0)	//itt is
	 {
	  lcd_goto(0x00);
      lcd_put_string("---WATCHDOG----");
	  lcd_goto(0x40);
	  lcd_put_string("--újraindítás--");
	  __delay_ms(2000);
  	 }



/**************************************************************1. érzékelő*******************************************************************/
	read_ROM_1();
	if(adress_1[0]==255&&adress_1[1]==255&&adress_1[2]==255&&adress_1[3]==255&&adress_1[4]==255&&adress_1[5]==255&&adress_1[6]==255&&adress_1[7]==255){
	nc_1=1;
	}
	else{ nc_1=0;
	ds1820_read_1();
	__delay_ms(100);
	}

	  tomb_1[aindex_1]=(int)ds1820_read_1();	//tomb 0.eleme temp
      aindex_1++;
	  __delay_ms(20);

	  if(atlagmehet_1==0&&nc_1==0){
	  lcd_goto(0x00);
	  lcd_put_string("--Homérséklet---");
	  lcd_goto(0x40);
	  lcd_put_string("---számítása----");
	}
		if(atlagmehet_1)
		  {	
			szum_1=0;					//szum értékét kinullázzuk
			for(char i=0;i<4;i++)
			 {
				szum_1+=(tomb_1[i]);
			 }
			lcd_goto(0x00);
				if(nc_1==1){
				lcd_put_string("Nincs eszköz!");
				}
				else{
           			 lcd_put_string("Hofok 1:        "); //bufferbe
				}	
		    lcd_goto(0x0A);           
  		    if(nc_1==0){
				lcd_dec(0x0A,szum_1/4);  		//osztjuk 4-el
		    	lcd_putch('C');
				}

			szum_1=0;
		  }   
       	 
		 	if(aindex_1==4)
			{
			 atlagmehet_1=1;			//csak eloször számít
			 aindex_1=0;	 			//tömb legrégebbi elemébe fogjuk
			}		


/**********************************************************************************************************************************************/



		if(!ENT){
		__delay_ms(30);
		while(!ENT){;}
		__delay_ms(30);
		menu_ok=1;
			while(1){
			LCD_BL=1;
				switch(menu){
				case 0: lcd_goto(0x40); lcd_put_string("Sz1 bekapcs: "); lcd_dec(0x4d,sz1be) ; break;
				case 1: lcd_goto(0x40); lcd_put_string("Sz1 kikapcs: "); lcd_dec(0x4d,sz1ki) ; break;
				case 2: lcd_goto(0x40); lcd_put_string("Sz2 bekapcs: "); lcd_dec(0x4d,sz2be) ; break;
				case 3: lcd_goto(0x40); lcd_put_string("Sz2 kikapcs: "); lcd_dec(0x4d,sz2ki) ; break;
			}

			if(!PLUS){
					__delay_ms(30);
					while(!PLUS){;}
					__delay_ms(30);
				switch(menu){
				case 0: sz1be++;break;
				case 1: sz1ki++;break;
				case 2: sz2be++;break;
				case 3: sz2ki++;break;
				}
			}
			if(!MINUS){
					__delay_ms(30);
					while(!MINUS){;}
					__delay_ms(30);
				switch(menu){
				case 0: sz1be--;break;
				case 1: sz1ki--;break;
				case 2: sz2be--;break;
				case 3: sz2ki--;break;
				}
			}

			if(!ENT){
				__delay_ms(30);
				while(!ENT);
				__delay_ms(30);
				menu++;
				if(menu==4){
					menu=0;
					eeprom_write(0x00,sz1be);
					eeprom_write(0x01,sz1ki);
					eeprom_write(0x02,sz2be);
					eeprom_write(0x03,sz2ki);
					LCD_BL=0;
					menu_ok=0;
					break;
					}
				}
			if(menu_ok==0)break;
			}
		}
	}
}

/****************************************************************************************************/
void interrupt isr(void){
	if(TMR2IE&&TMR2IF){
		if(((!PLUS)||(!MINUS))&&!menu_ok){
			d_ok=1;
			LCD_BL=1;
		}
		if(d_ok){
			delay1--;
			if(delay1==0){
				d_ok=0;
				LCD_BL=0;
				delay1=100;
			}
		}
		if(menu_ok){
		delay2--;
			if(delay2==0){
				menu=0;
				menu_ok=0;
				delay2=100;
				LCD_BL=0;
			}
		}
	TMR2IF=0;
	return;
	}
}

void read_ROM_1(void){
onewire_reset_1();
	onewire_write_1(0x33);	//Read ROM
	for(unsigned char i=0;i<8;i++){
	adress_1[i]=onewire_read_1();
	}
}

