// Libraries #include #include // Pinout const int hs1Pin = A0; const int hs2Pin = A1; const int buttonPin = 3; const int fanPin = 7; // Variables and Definitions #define DHTTYPE DHT11 int mode = 0; // 0: off, 1: auto, 2: low, 3: high volatile bool interrupted = false; volatile float humid1 = 0; volatile float humid2 = 0; volatile int maxHumidity = 0; const int lowSpeed = 10; const int highSpeed = 100; // Instances LCD_I2C lcd(0x27, 16, 2); DHT hs1(hs1Pin, DHTTYPE); DHT hs2(hs2Pin, DHTTYPE); // Setup void setup() { // put your setup code here, to run once: pinMode(hs1Pin, INPUT); pinMode(hs2Pin, INPUT); pinMode(buttonPin, INPUT); pinMode(fanPin, OUTPUT); attachInterrupt(digitalPinToInterrupt(buttonPin), buttonPressed, RISING); lcd.begin(); lcd.backlight(); hs1.begin(); hs2.begin(); lcd.clear(); lcd.print("Hello :)"); delay(2000); lcd.clear(); } // Main void loop() { if(interrupted == true){ delay(500); interrupted = false; mode++; if(mode > 3){ mode = 0; } } switch(mode){ case 0: printOff(); digitalWrite(fanPin,LOW); delay(1000); break; case 1: printAuto(); digitalWrite(fanPin, HIGH); delay(maxHumidity * 10); digitalWrite(fanPin, LOW); delay(100 - maxHumidity); break; case 2: printLow(); digitalWrite(fanPin, HIGH); delay(100); digitalWrite(fanPin, LOW); delay(100); break; case 3: printHigh(); digitalWrite(fanPin,HIGH); delay(1000); break; } } void buttonPressed(){ interrupted = true; } void printOff(){ humid1 = hs1.readHumidity(); humid2 = hs2.readHumidity(); lcd.setCursor(0, 0); lcd.print("Mode: Off "); lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.setCursor(10, 1); if (humid1 > humid2){ maxHumidity = int(humid1); } else { maxHumidity = int(humid2); } lcd.print(maxHumidity); lcd.print("%"); } void printAuto(){ humid1 = hs1.readHumidity(); humid2 = hs2.readHumidity(); lcd.setCursor(0, 0); lcd.print("Mode: Auto"); lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.setCursor(10, 1); if (humid1 > humid2){ maxHumidity = int(humid1); } else { maxHumidity = int(humid2); } lcd.print(maxHumidity); lcd.print("%"); } void printLow(){ humid1 = hs1.readHumidity(); humid2 = hs2.readHumidity(); lcd.setCursor(0, 0); lcd.print("Mode: Low "); lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.setCursor(10, 1); if (humid1 > humid2){ maxHumidity = int(humid1); } else { maxHumidity = int(humid2); } lcd.print(maxHumidity); lcd.print("%"); } void printHigh(){ humid1 = hs1.readHumidity(); humid2 = hs2.readHumidity(); lcd.setCursor(0, 0); lcd.print("Mode: High"); lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.setCursor(10, 1); if (humid1 > humid2){ maxHumidity = int(humid1); } else { maxHumidity = int(humid2); } lcd.print(maxHumidity); lcd.print("%"); }