#include #include "tinySHT2x.h" #include #include #include #include #include tinySHT2x sht; LiquidCrystal lcd(10, 8, 2, 3, 4, 5); byte tempchar1[8] = {B00000, B00001, B00010, B00100, B00100, B00100, B00100, B00111}; byte tempchar2[8] = {B00111, B00111, B00111, B01111, B11111, B11111, B01111, B00011}; byte tempchar3[8] = {B00000, B10000, B01011, B00100, B00111, B00100, B00111, B11100}; byte tempchar4[8] = {B11111, B11100, B11100, B11110, B11111, B11111, B11110, B11000}; byte humchar5[8] = {B00000, B00001, B00011, B00011, B00111, B01111, B01111, B11111}; byte humchar6[8] = {B11111, B11111, B11111, B01111, B00011, B00000, B00000, B00000}; byte humchar7[8] = {B00000, B10000, B11000, B11000, B11100, B11110, B11110, B11111}; byte humchar8[8] = {B11111, B11111, B11111, B11110, B11100, B00000, B00000, B00000}; byte ok[8] = {0x18, 0x14, 0x12, 0x11, 0x12, 0x14, 0x18, 0x0}; #define RELAY_PIN_1 PC0 #define RELAY_PIN_2 PC1 #define BUZZER PC2 #define BUTTON PB4 #define BUTTON_YUKARI PB3 uint8_t menu = 0; static void ses (void) { PORTC |= (1 << BUZZER); _delay_ms(100); PORTC &= ~ (1 << BUZZER); } static void menufonksiyon (void) { switch (menu) { case 1: lcd.clear(); lcd.createChar(9, ok); lcd.setCursor(0, 0); lcd.write(9); lcd.print(" SIC SET :"); lcd.setCursor(0, 1); lcd.print(" NEM SET :"); _delay_ms(250); break; case 2: lcd.clear(); lcd.setCursor(0, 0); lcd.print(" SIC SET :"); lcd.createChar(9, ok); lcd.setCursor(0, 1); lcd.write(9); lcd.print(" NEM SET :"); _delay_ms(250); break; } } static void kesme (void) { cli(); PCICR = 0; PCMSK0 = 0; PCICR |= (1 << PCIE0); PCMSK0 |= (1 << PCINT3) | (1 << PCINT4); sei(); } ISR(PCINT0_vect) { _delay_ms(50); if (!(PINB & (1 << BUTTON))) { _delay_ms(25); menu ++; menufonksiyon(); while (!(PINB & (1 << BUTTON))); ses(); menu = constrain(menu, 0, 2); } if (!(PINB & (1 << BUTTON_YUKARI))) { _delay_ms(25); menu --; menufonksiyon(); while (!(PINB & (1 << BUTTON_YUKARI))); ses(); menu = constrain(menu, 0, 2); } } void setup() { kesme(); sht.begin(); lcd.begin(16, 2); wdt_enable(WDTO_4S); DDRC |= ( (1 << RELAY_PIN_1) | (1 << RELAY_PIN_2) | (1 << BUZZER) ); DDRB &= ~(1 << BUTTON) | (1 << BUTTON_YUKARI); PORTB |= (1 << BUTTON) | (1 << BUTTON_YUKARI); PORTC = 0X00; } void loop() { lcd.home(); byte humd = sht.getHumidity(); float temp = sht.getTemperature(); lcd.createChar(1, tempchar1); lcd.createChar(2, tempchar2); lcd.createChar(3, tempchar3); lcd.createChar(4, tempchar4); lcd.setCursor(0, 0); lcd.write(1); lcd.setCursor(0, 1); lcd.write(2); lcd.setCursor(1, 0); lcd.write(3); lcd.setCursor(1, 1); lcd.write(4); lcd.setCursor(3, 0); lcd.print("SIC"); lcd.setCursor(3, 1); lcd.print(temp, 1); lcd.print((char) 223); lcd.createChar(5, humchar5); lcd.createChar(6, humchar6); lcd.createChar(7, humchar7); lcd.createChar(8, humchar8); lcd.setCursor(9, 0); lcd.write(5); lcd.setCursor(9, 1); lcd.write(6); lcd.setCursor(10, 0); lcd.write(7); lcd.setCursor(10, 1); lcd.write(8); lcd.setCursor(12, 0); lcd.print("NEM"); lcd.setCursor(12, 1); lcd.print(humd); lcd.print("%"); if (temp < 37.7) { PORTC |= (1 << RELAY_PIN_1); lcd.setCursor(6, 0); lcd.print("*"); } else { PORTC &= ~ (1 << RELAY_PIN_1); lcd.setCursor(6, 0); lcd.print(" "); } if (humd < 55.0) { PORTC |= (1 << RELAY_PIN_2); lcd.setCursor(15, 0); lcd.print("*"); } else { PORTC &= ~ (1 << RELAY_PIN_2); lcd.setCursor(15, 0); lcd.print(" "); } if (humd > 80 || temp > 40) { PORTC |= (1 << BUZZER); } else { PORTC &= ~ (1 << BUZZER); } if (menu == 3) { menu = 0; } menufonksiyon(); _delay_ms(250); wdt_reset(); }