69 lines
1.5 KiB
C
69 lines
1.5 KiB
C
#include <avr/io.h>
|
|
#include <util/delay.h>
|
|
#include <util/twi.h>
|
|
|
|
#include "aht20.h"
|
|
#include "i2c.h"
|
|
#include "mystd.h"
|
|
#include "uart.h"
|
|
#include "utils.h"
|
|
|
|
void display_result(aht20_reading data) {
|
|
char str[128];
|
|
|
|
uart_sendstring("Temperature: ");
|
|
|
|
ft_bzero(str, sizeof(str));
|
|
ft_ftoa(data.temperature, str, 2);
|
|
uart_sendstring(str);
|
|
|
|
uart_sendstring("C, Humidity: ");
|
|
|
|
ft_bzero(str, sizeof(str));
|
|
ft_ftoa(data.humidity * 100, str, 0);
|
|
uart_sendstring(str);
|
|
|
|
uart_sendstring("%\r\n");
|
|
}
|
|
|
|
aht20_reading avg_reading(aht20_reading* data) {
|
|
return (aht20_reading){
|
|
.temperature = (data[0].temperature + data[1].temperature + data[2].temperature) / 3.f,
|
|
.humidity = (data[0].humidity + data[1].humidity + data[2].humidity) / 3.f,
|
|
};
|
|
}
|
|
int main(void) {
|
|
uart_init();
|
|
i2c_init();
|
|
|
|
aht20_init();
|
|
|
|
while (!(aht20_status() & BV(3)))
|
|
_delay_ms(10);
|
|
|
|
aht20_reading data[3] = {};
|
|
_delay_ms(100);
|
|
aht20_trigger();
|
|
data[0] = aht20_read_measure();
|
|
display_result(data[0]);
|
|
|
|
_delay_ms(100);
|
|
aht20_trigger();
|
|
data[1] = aht20_read_measure();
|
|
display_result((aht20_reading){.temperature = (data[0].temperature + data[1].temperature) / 2.f,
|
|
.humidity = (data[0].humidity + data[1].humidity) / 2.f});
|
|
|
|
_delay_ms(100);
|
|
aht20_trigger();
|
|
data[2] = aht20_read_measure();
|
|
display_result(avg_reading(data));
|
|
|
|
while (true) {
|
|
data[0] = data[1];
|
|
data[1] = data[2];
|
|
aht20_trigger();
|
|
_delay_ms(100);
|
|
data[2] = aht20_read_measure();
|
|
display_result(avg_reading(data));
|
|
}
|
|
}
|