#include "config.h" #include #include #include #include #include "74C922.h" #include "DHT22.h" #include "GDM1602K.h" #include "LM335.h" enum DisplayMode {TEMP, AVG}; bool b = false; int main() { _delay_ms(1000); // Boot up time, let components catch up lcd_init(); encoder_init(); lcd_clear(); lcd_write_string("Hello, world!"); int temp, hum; char celc_str[30]; char temp_with_unit[20] = ""; char hum_str[30]; float celcius = 0.0; float humidity = 0.0; char temp_unit = 'C'; uint8_t button_data; char btn_string[30]; bool btn_just_pressed = false; long loops = 0; while(1) { // If encoder has data available if(encoder_available() == true) { loops = 0xFFFF; if(!btn_just_pressed) { btn_just_pressed = true; button_data = encoder_read(); sprintf(btn_string, "Knapp %d", button_data); lcd_clear(); if(button_data == 11) { if(temp_unit == 'C') temp_unit = 'F'; else if(temp_unit == 'F') temp_unit = 'K'; else if(temp_unit == 'K') temp_unit = 'C'; loops = 0; } if(button_data == 3) { sprintf(celc_str, "10h Tmp: %s", temp_with_unit); sprintf(hum_str, "10h Hum: %.1f%%", humidity-1); lcd_write_strings(celc_str, hum_str); } } } else { btn_just_pressed = false; } if(loops == 0) { loops = 0x2FFFF; int result = DHT22_Read(&temp, &hum); lcd_clear(); if(result == 0) { celcius = ((float)temp)/10.0; humidity = ((float) hum)/10.0; switch(temp_unit) { case 'C': sprintf(temp_with_unit, "%.1f %c", celcius, temp_unit); break; case 'F': sprintf(temp_with_unit, "%.1f %c", celcius*9/5+32, temp_unit); break; case 'K': sprintf(temp_with_unit, "%.1f %c", celcius + 273.15, temp_unit); break; } sprintf(celc_str, "Temp: %s", temp_with_unit); sprintf(hum_str, "Humidity: %.1f%%", humidity); lcd_write_strings(celc_str, hum_str); } } loops--; } lcd_write_string("Exited..."); }