/* * 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; } }