day06/ex01/src/main.c
2026-04-21 16:44:13 +02:00

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));
}
}