Väderstation med seglarindikator
Grupp 9: Markus Carlsson, Johan Harrysson, Philip Mårtensson

Källkod

 Ladda ned källkoden till vår main.c här, eller läs den nedan.

Hem | Rapport | Kopplingsschema | Källkod

/*

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

}

}

 

 

Hem | Rapport | Kopplingsschema | Källkod