/*
 * Seglarstation.c
 *
 * Created: 2019-04-17 14:56:58
 * Author : Jo0287ha-s
 */ 

#define F_CPU 8000000UL
#define F_SCL 100000UL

#include <avr/io.h>
#include "led_btn.h"
#include "display.h"
#include "tempSensor.h"
#include "rtcNew.h"
#include "Timer.h"
#include "WindSensor.h"
#include <avr/interrupt.h>
 

float temp;
float windRound;
float wind;

float avrTemp[5];
float avrWind[5];
int index;
float avrT;
float avrW; 
 
float calcAvrWind();
float calcAvrTemp(); 
void system_init();
void insertValue(float value, float list[]);

int main(void)
{
	system_init();
	sei();
	
    while (1) {
		if (btn1_read()){
			display_clear();
			setRow(1);
			temp= get_temp();
			printTemp(temp);
			writeText("  ");
			printWind(wind);
			setRow(0);
			printCurrentTime( getYear(), getMonth() , getDay() , getHour() ,getMin());
		} 
		if(btn2_read()){
			display_clear();
			avrT=calcAvrTemp();
			avrW=calcAvrWind();
			writeText("AvrT: ");
			printTemp(calcAvrTemp());
			setRow(2);
			writeText("AvrW: ");
			printWind(avrW);
			
	    }
		if(btn3_read()){
			display_clear();
			avrT=calcAvrTemp();
			avrW=calcAvrWind();
			if(avrT<4){
				writeText("SEGLA INTE!");
				setRow(2);
				writeText("Kallt! ");
				printTemp(avrT);
				led_set_yellow();
				led_clear_green();
			}
			
			else if(avrT>26){
				writeText("SEGLA INTE!");
				setRow(2);
				writeText("Varmt! Sola ist");
				led_set_yellow();
				led_clear_green();
			}
			else if(avrW<2){
				writeText("SEGLA EJ! Ingen");
				setRow(2);
				writeText("vind, ");
				printWind(avrW);
				led_set_yellow();
				led_clear_green();
			}
			else if(avrW>7){
				writeText("SEGLA EJ! Mycket");
				setRow(2);
				writeText("vind, ");
				printWind(avrW);
				led_set_yellow();
				led_clear_green();
			}
			else{
				writeText("SEGLARDAG! Ta");
				setRow(2);
				writeText("solskydd! :)");
				led_set_green();
				led_clear_yellow();
			}
		}
	}
}

void system_init(){
	  display_init();
	  displayOn();
	  init_temp();
	  init_WindSensor();
	  Start_Timer();
	  led_init();
	  btn_init();
	  set_RTC(1,9,0,5,1,5,1,2,0,0,0,0);
	  windRound=0;
	  index=0;
}

ISR(INT0_vect){
	windRound++;
}

ISR(TIMER1_OVF_vect){
 	wind=windRound*0.314*256*65535/F_CPU;
	windRound=0;
	index++;
	insertValue(wind,avrWind);
	insertValue(get_temp(),avrTemp);
}

void insertValue(float value, float list[]){
	if(index==5){
		index=0;
		}
	list[index]=value;
}

float calcAvrTemp(){
	if(sizeof(avrTemp)){
		float sum=0;
		for(int i=0; i <5 ; i++){
			sum+=avrTemp[i];
		}
		float res=sum/5;
		return res;
	}
	else{
		return 0;
	
	}
}

float calcAvrWind(){
	if(sizeof(avrWind)){
		float sum=0;
		for(int i=0;i<5;i++){
			sum+=avrWind[i];
		}
		float res=sum/5;
		return res;
	}
	else{
		return 0;
	}
}