Väderstation med seglarindikator
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