Skip to main content
restored original code
Source Link
       //HUMIDITY CONTROLLER 1.1
    //written for NANO
    
    //controls and displays relative humidity
    //sesnor used is DHT11
    //uses active-low relay module to control live lines for 2 standard electrical outlets
    //uses i2c lcd to display humidity and humidity setting
    //turns display off during inactivity
    //setting is adjustable from 10%-90% using 2 buttons
    //backlight of LCD is controlled by pin 4, connected to top LED jumper pin on i2c backpack
    //serial communications to monitor to ensure all code is working.
    
    //added: "system off" function - allows both outlets to be turned off
    
    // █ G █ L █ O █ B █ A █ L █ S █
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <DHT.h>
    
    // set the LCD address to 0x27 for a 16 chars and 2 line display
    LiquidCrystal_I2C lcd(0x27, 16, 2);

DHT//controls DHT_sens(10and displays relative humidity
//sesnor used is DHT11
//uses active-low relay module to control live lines for 2 standard electrical outlets
//uses i2c lcd to display humidity and humidity setting
//turns display off during inactivity
//setting is adjustable from 10%-90% using 2 buttons
//backlight of LCD is controlled by pin 4, DHT22);connected to top LED jumper pin on i2c backpack
//serial communications to monitor to ensure all code is working.

#define//added: DHT22_PIN"system A2off" function - allows both outlets to be turned off

    
    //buttons and variables to adjust calibration
    int calupbtn = A0;
    int calup;
    int caldownbtn = A1;
    int caldown;
    
    //i2c PINS A4, A5
    
    //pin for turning on humidifier relay
    int humidifier = 3;
    //pin for turning on the fan relay
    int fan = 2;
    //pin for turning on LCD backlights
    int lcdlight = 4;
    
    //calibration variable
    int setpoint = 50;  //feedback setpoint.  
    bool calstate = false;  //enables calibration adjustments only when LCD is ON.
    
    //backlight timing variables
    int displtime = 12000;  //amount of time the display is to be on before turning off
    unsigned long displtimeon;  //last recorded time display timer was reset
    int calunlock = 0;   //loop counter for unlocking calibration  
    
    //sensor timing variables
    unsigned long lastcheck;  //last time DHT was read
    long interval = 30000;      //time between DHT readings
    
    //system variables
    bool syson = true;    //reference for system on/off. 
    byte systog = 2;       //even number toggles on, odds toggle off
    int syslock = 0;     //loop counter for unlocking system toggle
    
    // █ S █ E █ T █ U █ P █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █
    void setup(){
    
      Serial.begin(9600);  //serial communication used to ensure code is working correctly.
      
      lcd.init();  //initialize LCD
      lcd.backlight(); //enable LCD backlight, but doesn't turn it on
    
      lastcheck = 0;
      digitalWrite(lcdlight, HIGH);
      Serial.println("STARTING");
      lcd.print("   STARTING");
    
      //pin assignments
      pinMode(calupbtn, INPUT);
      pinMode(caldownbtn, INPUT);
      pinMode(humidifier, OUTPUT);
      pinMode(fan, OUTPUT);
      pinMode(lcdlight, OUTPUT);
      delay(1000);
    
      
      //test fan
      lcd.setCursor(0,1);
      lcd.print("<FAN>     HMDFR  ");  
      digitalWrite(fan, LOW);
      digitalWrite(humidifier, HIGH);
      delay(6000);
      //test humidifier
      lcd.setCursor(0,1);
      lcd.print(" FAN     <HMDFR> ");
      digitalWrite(fan, HIGH);
      digitalWrite(humidifier, LOW);
      delay(6000);
      //stop startup test
      digitalWrite(humidifier, HIGH);
      digitalWrite(fan, HIGH);
      lcd.clear();
    
      displtimeon = millis();
    
      int chk = DHT.read11(DHT11_PIN);
      lastcheck = millis();
    
      lcd.setCursor(0,0);
      lcd.print("Humidity: ");
      lcd.setCursor(13,0);
      lcd.print(DHT.humidity);
      lcd.setCursor(15,0);
      lcd.print("%  ");
      lcd.setCursor(0,1);
      lcd.print("setting: ");
      lcd.setCursor(13,1);
      lcd.print(setpoint);
      lcd.setCursor(15,1);
      lcd.print("%  ");
      delay(100);
    }
    
    // █ L █ O █ O █ P █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █
    void loop(){
    
      //check calibration buttons
      calup = digitalRead(calupbtn);
      caldown = digitalRead(caldownbtn);
    
      if(calup == HIGH and caldown == HIGH){  //--------SYSTEM TOGGLE
        syslock ++;
        Serial.println(syslock);
        if(syslock == 20){  //if both buttons held down for this many loops
          systog++;
          if(systog % 2 == 1){  //--------SYSTEM OFF
            syson = false;
            digitalWrite(fan, HIGH);
            digitalWrite(humidifier, HIGH);
            digitalWrite(lcdlight, HIGH);
            Serial.println("SYSTEM TURNED OFF");
            lcd.clear();
            lcd.print("   SYSTEM OFF");
            lcd.setCursor(0,1);
            lcd.print("  hold both btns");
            delay(2000);
            lcd.setCursor(0,1);
            lcd.print("  to turn on    ");
            displtimeon = millis();
          }
          if(systog % 2 == 0){  //--------SYSTEM ON
            syson = true;
            Serial.println("SYSTEM TURNED ON");
            digitalWrite(lcdlight, HIGH);
            lcd.clear();
            lcd.print("   SYSTEM ON");
            delay(2000);
            lcd.clear();
            displtimeon = millis();
          }
          syslock = 0;
        }
      }
      else(syslock = 0);
      
      //read humidity at appropriate intervals
      if(millis() > lastcheck + interval and syson == true){  //read the DHT humidity
        int chk = DHT.read11(DHT11_PIN);
        lastcheck = millis();
        Serial.print("DHT read = ");
        Serial.print(DHT.humidity);
        Serial.print("%");
        Serial.println(" ");
        }
    
      //turn on the led lights when calibration buttons are pressed
      if(calup == HIGH xor caldown == HIGH){
// █ G █ L █ O █ B █ A █ L █ S █
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht.h>

// set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);  

dht DHT;

#define DHT11_PIN A2

//buttons and variables to adjust calibration
int calupbtn = A0;
int calup;
int caldownbtn = A1;
int caldown;

//i2c PINS A4, A5

//pin for turning on humidifier relay
int humidifier = 3;
//pin for turning on the fan relay
int fan = 2;
//pin for turning on LCD backlights
int lcdlight = 4;

//calibration variable
int setpoint = 50;  //feedback setpoint.  
bool calstate = false;  //enables calibration adjustments only when LCD is ON.

//backlight timing variables
int displtime = 12000;  //amount of time the display is to be on before turning off
unsigned long displtimeon;  //last recorded time display timer was reset
int calunlock = 0;   //loop counter for unlocking calibration  

//sensor timing variables
unsigned long lastcheck;  //last time DHT was read
long interval = 30000;      //time between DHT readings

//system variables
bool syson = true;    //reference for system on/off. 
byte systog = 2;       //even number toggles on, odds toggle off
int syslock = 0;     //loop counter for unlocking system toggle

// █ S █ E █ T █ U █ P █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █
void setup(){

  Serial.begin(9600);  //serial communication used to ensure code is working correctly.
  
  lcd.init();  //initialize LCD
  lcd.backlight(); //enable LCD backlight, but doesn't turn it on

  lastcheck = 0;
  digitalWrite(lcdlight, HIGH);
  Serial.println("STARTING");
  lcd.print("   STARTING");

  //pin assignments
  pinMode(calupbtn, INPUT);
  pinMode(caldownbtn, INPUT);
  pinMode(humidifier, OUTPUT);
  pinMode(fan, OUTPUT);
  pinMode(lcdlight, OUTPUT);
  delay(1000);

  
  //test fan
  lcd.setCursor(0,1);
  lcd.print("<FAN>     HMDFR  ");  
  digitalWrite(fan, LOW);
  digitalWrite(humidifier, HIGH);
  delay(6000);
  //test humidifier
  lcd.setCursor(0,1);
  lcd.print(" FAN     <HMDFR> ");
  digitalWrite(fan, HIGH);
  digitalWrite(humidifier, LOW);
  delay(6000);
  //stop startup test
  digitalWrite(humidifier, HIGH);
  digitalWrite(fan, HIGH);
  lcd.clear();

  displtimeon = millis();

  int chk = DHT.read11(DHT11_PIN);
  lastcheck = millis();

  lcd.setCursor(0,0);
  lcd.print("Humidity: ");
  lcd.setCursor(13,0);
  lcd.print(DHT.humidity);
  lcd.setCursor(15,0);
  lcd.print("%  ");
  lcd.setCursor(0,1);
  lcd.print("setting: ");
  lcd.setCursor(13,1);
  lcd.print(setpoint);
  lcd.setCursor(15,1);
  lcd.print("%  ");
  delay(100);
}

// █ L █ O █ O █ P █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █
void loop(){

  //check calibration buttons
  calup = digitalRead(calupbtn);
  caldown = digitalRead(caldownbtn);

  if(calup == HIGH and caldown == HIGH){  //--------SYSTEM TOGGLE
    syslock ++;
    Serial.println(syslock);
    if(syslock == 20){  //if both buttons held down for this many loops
      systog++;
      if(systog % 2 == 1){  //--------SYSTEM OFF
        syson = false;
        digitalWrite(fan, HIGH);
        digitalWrite(humidifier, HIGH);
        digitalWrite(lcdlight, HIGH);
        calstate = true;
        displtimeon = millis();  //set display timer
        Serial.println("cal btn ACTIVE");
        if(syson == false){
          digitalWrite(lcdlight, HIGH);
          lcd.clear();
          lcd.print("  "SYSTEM SYSTEMTURNED OFF");
          lcd.setCursor(0,1);
          lcd.print("  hold both btns");
          delay(3000);
          lcd.setCursor(0,1);
          lcd.print("  to turn on    ");
          displtimeon = millis();
        }
      }
    
      if(calstate == true and syson == true){  //--------DISPLAY ROUTINE
        Serial.println("printing display");
        //display variables on LCD
        lcd.setCursor(0,0);
        lcd.print("Humidity: ");
        lcd.setCursor(13,0);
        lcd.print(DHT.humidity);
        lcd.setCursor(15,0);
        lcd.print("%  ");
        lcd.setCursor(0,1);
        lcd.print("setting: ");
        lcd.setCursor(13,1);
        lcd.print(setpoint);
        lcd.setCursor(15,1);
        lcd.print("%  ");
        delay(100);
    
        calunlock ++;  
        //keeps calibration locked until display cycles 5 times after initially turned on
        //prevents adjustments on initial button press.
      }
    
    //--------CALIBRATION ADJUSTMENTS
      if(calup == HIGH and caldown == LOW and calstate == true and syson == true){ 
        if(setpoint < 90 and calunlock > 5){ 
          setpoint = setpoint + 5;  //increase setpoint 
          Serial.println("adj setpoint up");
        }
        Serial.println(setpoint);
        delay(100);
        displtimeon = millis();     //reset backlight timeout
      }
    
      if(caldown == HIGH and calup == LOW and calstate == true and syson == true){
        if(setpoint > 10 and calunlock > 5){
          setpoint = setpoint - 5;  //decrease setpoint
          Serial.println("adj setpoint dn");
          }
        Serial.println(setpoint);
        delay(100);  
        displtimeon = millis();     //reset backlight timeout
      }
    
      if(millis() > displtimeon + displtime){  //-----------------BACKLIGHT TIMEOUT
        digitalWrite(lcdlight, LOW); //turn off the screen
        calstate = false;
        Serial.println("displ + backlights off");
        lcd.clear();
        calunlock =lcd.print(" 0;  //lockSYSTEM calibrationOFF");
      }  lcd.setCursor(0,1);
        lcd.print("  hold both btns");
      if(millis  delay(2000);
 < lastcheck      lcd.setCursor(0,1){;
        lastchecklcd.print(" = millis(to turn on    "); 
  //reset timers in a millisecond rollover displtimeon = millis();
      }
    
                                    if(systog % 2 == 0){  //--------SETPOINT ERRORSYSTEM PROCEDUREON
      if(setpoint > 91 or setpoint < 9){  //in case setpoint is ever outsyson of= boundstrue;
        Serial.println("O/B"SYSTEM ERROR"TURNED ON");
        digitalWrite(lcdlight, HIGH);
        lcd.clear();
        lcd.print("O/B ERROR");  //display error message on lcd
        lcd.setCursor(0,1);
    "   SYSTEM lcd.print("RESETTING"ON");
        delay(1000);
        for(int count = 9; count >= 0; count = count - 1){
          lcd.setCursor(15,12000);
          lcd.print(count);     //count down from 10
          delayclear(1000);
        }
        setpoint = 50;        //reset setpoint at 50.
        displtimeon = millis();
      }
    
      //turn on humidifier relay if below setpoint  --------RELAY CONTROL
      //RELAY MODULE IS ACTIVE LOW
      if(DHT.humidity <= setpoint - 3 and syson == true){  //if humidity is 3% lower than setpoint
        Serial.println("humidifier ON, fan OFF");  
        digitalWrite(humidifier, LOW);  //turn on humidifier
        digitalWrite(fan, HIGH);
      }
      syslock = 0;
    }
  }
  else(syslock = 0);
  
  //read humidity at appropriate intervals
  if(DHT.humiditymillis() >=> setpointlastcheck + 3interval and syson == true){  //ifread the DHT humidity 
 is 3% above setpointint chk = DHT.read11(DHT11_PIN);
    lastcheck = millis();
    Serial.printlnprint("humidifier"DHT OFF,read fan= ON"");
    Serial.print(DHT.humidity);
    digitalWriteSerial.print(humidifier,"%");
 HIGH   Serial.println(" ");
    }

  //turn on fanthe led lights when calibration buttons are pressed
  if(calup == HIGH xor caldown == HIGH){
    digitalWrite(fanlcdlight, LOWHIGH);
    calstate = }true;
    displtimeon = elsemillis();  //set display timer
    Serial.println("cal btn ACTIVE");
    if(syson == false){
      digitalWrite(lcdlight, HIGH);
      lcd.clear();
      lcd.print("   SYSTEM OFF");
      lcd.setCursor(0,1);
      lcd.print("  hold both btns");
      delay(3000);
      lcd.setCursor(0,1);
      lcd.print("  to turn on    ");
      displtimeon = millis();
    }
  }

  if(calstate == true and syson == true){  //--------DISPLAY ROUTINE
    Serial.println("all"printing off"display");
    //ifdisplay variables on LCD
    lcd.setCursor(0,0);
    lcd.print("Humidity: ");
    lcd.setCursor(13,0);
    lcd.print(DHT.humidity);
 is within 3% oflcd.setCursor(15,0);
 setpoint   lcd.print("%  ");
    lcd.setCursor(0,1);
    lcd.print("setting: ");
    digitalWritelcd.setCursor(humidifier13,1);
 HIGH   lcd.print(setpoint);
    lcd.setCursor(15,1);
    lcd.print("%  ");
    delay(100);

    calunlock ++;  
    //turnkeeps bothcalibration offlocked until display cycles 5 times after initially turned on
    //prevents adjustments on initial digitalWritebutton press.
  }

//--------CALIBRATION ADJUSTMENTS
  if(fan,calup == HIGH and caldown == LOW and calstate == true and syson == true){ 
    if(setpoint < 90 and calunlock > 5){ 
      setpoint = setpoint + 5;  //increase setpoint 
      Serial.println("adj setpoint up");
    }
    Serial.println(setpoint);
    delay(100);
    displtimeon = millis();     //reset backlight timeout
  }

  if(caldown == HIGH and calup == LOW and calstate == true and syson == true){
    if(setpoint > 10 and calunlock > 5){
      setpoint = setpoint - 5;  //decrease setpoint
      Serial.println("adj setpoint dn");
      }
    Serial.println(setpoint);
  //  delay(700100);  
    displtimeon = millis();     //un-commentreset forbacklight serialtimeout
 debugging }

  if(millis() > displtimeon + displtime){  //-----------------BACKLIGHT TIMEOUT
    digitalWrite(lcdlight, LOW); //turn off the screen
    calstate = false;
    Serial.printprintln("setpoint"displ + backlights off");
    lcd.clear();
    calunlock = "0;  //lock calibration
  }

  if(millis() < lastcheck){
    lastcheck = millis();  //reset timers in a millisecond rollover
  }

                                      //--------SETPOINT ERROR PROCEDURE
  if(setpoint > 91 or setpoint < 9){  //in case setpoint is ever out of bounds
    Serial.println(setpoint"O/B ERROR");
    digitalWrite(lcdlight, HIGH);
    lcd.clear();
    lcd.print("O/B ERROR");  //display error message on lcd
    lcd.setCursor(0,1);
    lcd.print("RESETTING");
    delay(7001000);
    for(int count = 9; count >= 0; count = count - 1){
      lcd.setCursor(15,1);
      lcd.print(count);     //un-commentcount fordown serialfrom debugging10
      delay(1000);
    }
    setpoint = 50;        //reset setpoint at 50.
    displtimeon = millis();
  }

  //turn on humidifier relay if below setpoint  --------RELAY CONTROL
  //RELAY MODULE IS ACTIVE LOW
  if(DHT.humidity <= setpoint - 3 and syson == true){  //if humidity is 3% lower than setpoint
    Serial.println("humidifier ON, fan OFF");  
    digitalWrite(humidifier, LOW);  //turn on humidifier
    digitalWrite(fan, HIGH);
  }
  else if(DHT.humidity >= setpoint + 3 and syson == true){  //if humidity is 3% above setpoint
    Serial.println("humidifier OFF, fan ON");
    digitalWrite(humidifier, HIGH);  //turn on fan
    digitalWrite(fan, LOW);
  }
  else{
    Serial.println("all off");  //if humidity is within 3% of setpoint
    digitalWrite(humidifier, HIGH);  //turn both off
    digitalWrite(fan, HIGH);
  }
  //delay(700);  //un-comment for serial debugging

  Serial.print("setpoint = ");
  Serial.println(setpoint);

  //delay(700);  //un-comment for serial debugging
}

/*  WIRING DIAGRAMS
 https://66.media.tumblr.com/98426b566744beacdd42bc0221092b76/tumblr_pvr0u8kvZy1yrmjh9o1_1280.png
 */
    //HUMIDITY CONTROLLER 1.1
    //written for NANO
    
    //controls and displays relative humidity
    //sesnor used is DHT11
    //uses active-low relay module to control live lines for 2 standard electrical outlets
    //uses i2c lcd to display humidity and humidity setting
    //turns display off during inactivity
    //setting is adjustable from 10%-90% using 2 buttons
    //backlight of LCD is controlled by pin 4, connected to top LED jumper pin on i2c backpack
    //serial communications to monitor to ensure all code is working.
    
    //added: "system off" function - allows both outlets to be turned off
    
    // █ G █ L █ O █ B █ A █ L █ S █
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <DHT.h>
    
    // set the LCD address to 0x27 for a 16 chars and 2 line display
    LiquidCrystal_I2C lcd(0x27, 16, 2);

DHT DHT_sens(10, DHT22); 

#define DHT22_PIN A2

    
    //buttons and variables to adjust calibration
    int calupbtn = A0;
    int calup;
    int caldownbtn = A1;
    int caldown;
    
    //i2c PINS A4, A5
    
    //pin for turning on humidifier relay
    int humidifier = 3;
    //pin for turning on the fan relay
    int fan = 2;
    //pin for turning on LCD backlights
    int lcdlight = 4;
    
    //calibration variable
    int setpoint = 50;  //feedback setpoint.  
    bool calstate = false;  //enables calibration adjustments only when LCD is ON.
    
    //backlight timing variables
    int displtime = 12000;  //amount of time the display is to be on before turning off
    unsigned long displtimeon;  //last recorded time display timer was reset
    int calunlock = 0;   //loop counter for unlocking calibration  
    
    //sensor timing variables
    unsigned long lastcheck;  //last time DHT was read
    long interval = 30000;      //time between DHT readings
    
    //system variables
    bool syson = true;    //reference for system on/off. 
    byte systog = 2;       //even number toggles on, odds toggle off
    int syslock = 0;     //loop counter for unlocking system toggle
    
    // █ S █ E █ T █ U █ P █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █
    void setup(){
    
      Serial.begin(9600);  //serial communication used to ensure code is working correctly.
      
      lcd.init();  //initialize LCD
      lcd.backlight(); //enable LCD backlight, but doesn't turn it on
    
      lastcheck = 0;
      digitalWrite(lcdlight, HIGH);
      Serial.println("STARTING");
      lcd.print("   STARTING");
    
      //pin assignments
      pinMode(calupbtn, INPUT);
      pinMode(caldownbtn, INPUT);
      pinMode(humidifier, OUTPUT);
      pinMode(fan, OUTPUT);
      pinMode(lcdlight, OUTPUT);
      delay(1000);
    
      
      //test fan
      lcd.setCursor(0,1);
      lcd.print("<FAN>     HMDFR  ");  
      digitalWrite(fan, LOW);
      digitalWrite(humidifier, HIGH);
      delay(6000);
      //test humidifier
      lcd.setCursor(0,1);
      lcd.print(" FAN     <HMDFR> ");
      digitalWrite(fan, HIGH);
      digitalWrite(humidifier, LOW);
      delay(6000);
      //stop startup test
      digitalWrite(humidifier, HIGH);
      digitalWrite(fan, HIGH);
      lcd.clear();
    
      displtimeon = millis();
    
      int chk = DHT.read11(DHT11_PIN);
      lastcheck = millis();
    
      lcd.setCursor(0,0);
      lcd.print("Humidity: ");
      lcd.setCursor(13,0);
      lcd.print(DHT.humidity);
      lcd.setCursor(15,0);
      lcd.print("%  ");
      lcd.setCursor(0,1);
      lcd.print("setting: ");
      lcd.setCursor(13,1);
      lcd.print(setpoint);
      lcd.setCursor(15,1);
      lcd.print("%  ");
      delay(100);
    }
    
    // █ L █ O █ O █ P █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █
    void loop(){
    
      //check calibration buttons
      calup = digitalRead(calupbtn);
      caldown = digitalRead(caldownbtn);
    
      if(calup == HIGH and caldown == HIGH){  //--------SYSTEM TOGGLE
        syslock ++;
        Serial.println(syslock);
        if(syslock == 20){  //if both buttons held down for this many loops
          systog++;
          if(systog % 2 == 1){  //--------SYSTEM OFF
            syson = false;
            digitalWrite(fan, HIGH);
            digitalWrite(humidifier, HIGH);
            digitalWrite(lcdlight, HIGH);
            Serial.println("SYSTEM TURNED OFF");
            lcd.clear();
            lcd.print("   SYSTEM OFF");
            lcd.setCursor(0,1);
            lcd.print("  hold both btns");
            delay(2000);
            lcd.setCursor(0,1);
            lcd.print("  to turn on    ");
            displtimeon = millis();
          }
          if(systog % 2 == 0){  //--------SYSTEM ON
            syson = true;
            Serial.println("SYSTEM TURNED ON");
            digitalWrite(lcdlight, HIGH);
            lcd.clear();
            lcd.print("   SYSTEM ON");
            delay(2000);
            lcd.clear();
            displtimeon = millis();
          }
          syslock = 0;
        }
      }
      else(syslock = 0);
      
      //read humidity at appropriate intervals
      if(millis() > lastcheck + interval and syson == true){  //read the DHT humidity
        int chk = DHT.read11(DHT11_PIN);
        lastcheck = millis();
        Serial.print("DHT read = ");
        Serial.print(DHT.humidity);
        Serial.print("%");
        Serial.println(" ");
        }
    
      //turn on the led lights when calibration buttons are pressed
      if(calup == HIGH xor caldown == HIGH){
        digitalWrite(lcdlight, HIGH);
        calstate = true;
        displtimeon = millis();  //set display timer
        Serial.println("cal btn ACTIVE");
        if(syson == false){
          digitalWrite(lcdlight, HIGH);
          lcd.clear();
          lcd.print("   SYSTEM OFF");
          lcd.setCursor(0,1);
          lcd.print("  hold both btns");
          delay(3000);
          lcd.setCursor(0,1);
          lcd.print("  to turn on    ");
          displtimeon = millis();
        }
      }
    
      if(calstate == true and syson == true){  //--------DISPLAY ROUTINE
        Serial.println("printing display");
        //display variables on LCD
        lcd.setCursor(0,0);
        lcd.print("Humidity: ");
        lcd.setCursor(13,0);
        lcd.print(DHT.humidity);
        lcd.setCursor(15,0);
        lcd.print("%  ");
        lcd.setCursor(0,1);
        lcd.print("setting: ");
        lcd.setCursor(13,1);
        lcd.print(setpoint);
        lcd.setCursor(15,1);
        lcd.print("%  ");
        delay(100);
    
        calunlock ++;  
        //keeps calibration locked until display cycles 5 times after initially turned on
        //prevents adjustments on initial button press.
      }
    
    //--------CALIBRATION ADJUSTMENTS
      if(calup == HIGH and caldown == LOW and calstate == true and syson == true){ 
        if(setpoint < 90 and calunlock > 5){ 
          setpoint = setpoint + 5;  //increase setpoint 
          Serial.println("adj setpoint up");
        }
        Serial.println(setpoint);
        delay(100);
        displtimeon = millis();     //reset backlight timeout
      }
    
      if(caldown == HIGH and calup == LOW and calstate == true and syson == true){
        if(setpoint > 10 and calunlock > 5){
          setpoint = setpoint - 5;  //decrease setpoint
          Serial.println("adj setpoint dn");
          }
        Serial.println(setpoint);
        delay(100);  
        displtimeon = millis();     //reset backlight timeout
      }
    
      if(millis() > displtimeon + displtime){  //-----------------BACKLIGHT TIMEOUT
        digitalWrite(lcdlight, LOW); //turn off the screen
        calstate = false;
        Serial.println("displ + backlights off");
        lcd.clear();
        calunlock = 0;  //lock calibration
      }
    
      if(millis() < lastcheck){
        lastcheck = millis();  //reset timers in a millisecond rollover
      }
    
                                          //--------SETPOINT ERROR PROCEDURE
      if(setpoint > 91 or setpoint < 9){  //in case setpoint is ever out of bounds
        Serial.println("O/B ERROR");
        digitalWrite(lcdlight, HIGH);
        lcd.clear();
        lcd.print("O/B ERROR");  //display error message on lcd
        lcd.setCursor(0,1);
        lcd.print("RESETTING");
        delay(1000);
        for(int count = 9; count >= 0; count = count - 1){
          lcd.setCursor(15,1);
          lcd.print(count);     //count down from 10
          delay(1000);
        }
        setpoint = 50;        //reset setpoint at 50.
        displtimeon = millis();
      }
    
      //turn on humidifier relay if below setpoint  --------RELAY CONTROL
      //RELAY MODULE IS ACTIVE LOW
      if(DHT.humidity <= setpoint - 3 and syson == true){  //if humidity is 3% lower than setpoint
        Serial.println("humidifier ON, fan OFF");  
        digitalWrite(humidifier, LOW);  //turn on humidifier
        digitalWrite(fan, HIGH);
      }
      else if(DHT.humidity >= setpoint + 3 and syson == true){  //if humidity is 3% above setpoint
        Serial.println("humidifier OFF, fan ON");
        digitalWrite(humidifier, HIGH);  //turn on fan
        digitalWrite(fan, LOW);
      }
      else{
        Serial.println("all off");  //if humidity is within 3% of setpoint
        digitalWrite(humidifier, HIGH);  //turn both off
        digitalWrite(fan, HIGH);
      }
      //delay(700);  //un-comment for serial debugging
    
      Serial.print("setpoint = ");
      Serial.println(setpoint);
    
      //delay(700);  //un-comment for serial debugging
    }
       //HUMIDITY CONTROLLER 1.1
//written for NANO

//controls and displays relative humidity
//sesnor used is DHT11
//uses active-low relay module to control live lines for 2 standard electrical outlets
//uses i2c lcd to display humidity and humidity setting
//turns display off during inactivity
//setting is adjustable from 10%-90% using 2 buttons
//backlight of LCD is controlled by pin 4, connected to top LED jumper pin on i2c backpack
//serial communications to monitor to ensure all code is working.

//added: "system off" function - allows both outlets to be turned off

// █ G █ L █ O █ B █ A █ L █ S █
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht.h>

// set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);  

dht DHT;

#define DHT11_PIN A2

//buttons and variables to adjust calibration
int calupbtn = A0;
int calup;
int caldownbtn = A1;
int caldown;

//i2c PINS A4, A5

//pin for turning on humidifier relay
int humidifier = 3;
//pin for turning on the fan relay
int fan = 2;
//pin for turning on LCD backlights
int lcdlight = 4;

//calibration variable
int setpoint = 50;  //feedback setpoint.  
bool calstate = false;  //enables calibration adjustments only when LCD is ON.

//backlight timing variables
int displtime = 12000;  //amount of time the display is to be on before turning off
unsigned long displtimeon;  //last recorded time display timer was reset
int calunlock = 0;   //loop counter for unlocking calibration  

//sensor timing variables
unsigned long lastcheck;  //last time DHT was read
long interval = 30000;      //time between DHT readings

//system variables
bool syson = true;    //reference for system on/off. 
byte systog = 2;       //even number toggles on, odds toggle off
int syslock = 0;     //loop counter for unlocking system toggle

// █ S █ E █ T █ U █ P █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █
void setup(){

  Serial.begin(9600);  //serial communication used to ensure code is working correctly.
  
  lcd.init();  //initialize LCD
  lcd.backlight(); //enable LCD backlight, but doesn't turn it on

  lastcheck = 0;
  digitalWrite(lcdlight, HIGH);
  Serial.println("STARTING");
  lcd.print("   STARTING");

  //pin assignments
  pinMode(calupbtn, INPUT);
  pinMode(caldownbtn, INPUT);
  pinMode(humidifier, OUTPUT);
  pinMode(fan, OUTPUT);
  pinMode(lcdlight, OUTPUT);
  delay(1000);

  
  //test fan
  lcd.setCursor(0,1);
  lcd.print("<FAN>     HMDFR  ");  
  digitalWrite(fan, LOW);
  digitalWrite(humidifier, HIGH);
  delay(6000);
  //test humidifier
  lcd.setCursor(0,1);
  lcd.print(" FAN     <HMDFR> ");
  digitalWrite(fan, HIGH);
  digitalWrite(humidifier, LOW);
  delay(6000);
  //stop startup test
  digitalWrite(humidifier, HIGH);
  digitalWrite(fan, HIGH);
  lcd.clear();

  displtimeon = millis();

  int chk = DHT.read11(DHT11_PIN);
  lastcheck = millis();

  lcd.setCursor(0,0);
  lcd.print("Humidity: ");
  lcd.setCursor(13,0);
  lcd.print(DHT.humidity);
  lcd.setCursor(15,0);
  lcd.print("%  ");
  lcd.setCursor(0,1);
  lcd.print("setting: ");
  lcd.setCursor(13,1);
  lcd.print(setpoint);
  lcd.setCursor(15,1);
  lcd.print("%  ");
  delay(100);
}

// █ L █ O █ O █ P █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █
void loop(){

  //check calibration buttons
  calup = digitalRead(calupbtn);
  caldown = digitalRead(caldownbtn);

  if(calup == HIGH and caldown == HIGH){  //--------SYSTEM TOGGLE
    syslock ++;
    Serial.println(syslock);
    if(syslock == 20){  //if both buttons held down for this many loops
      systog++;
      if(systog % 2 == 1){  //--------SYSTEM OFF
        syson = false;
        digitalWrite(fan, HIGH);
        digitalWrite(humidifier, HIGH);
        digitalWrite(lcdlight, HIGH);
        Serial.println("SYSTEM TURNED OFF");
        lcd.clear();
        lcd.print("   SYSTEM OFF");
        lcd.setCursor(0,1);
        lcd.print("  hold both btns");
        delay(2000);
        lcd.setCursor(0,1);
        lcd.print("  to turn on    "); 
        displtimeon = millis();
      }
      if(systog % 2 == 0){  //--------SYSTEM ON
        syson = true;
        Serial.println("SYSTEM TURNED ON");
        digitalWrite(lcdlight, HIGH);
        lcd.clear();
        lcd.print("   SYSTEM ON");
        delay(2000);
        lcd.clear();
        displtimeon = millis();
      }
      syslock = 0;
    }
  }
  else(syslock = 0);
  
  //read humidity at appropriate intervals
  if(millis() > lastcheck + interval and syson == true){  //read the DHT humidity 
    int chk = DHT.read11(DHT11_PIN);
    lastcheck = millis();
    Serial.print("DHT read = ");
    Serial.print(DHT.humidity);
    Serial.print("%");
    Serial.println(" ");
    }

  //turn on the led lights when calibration buttons are pressed
  if(calup == HIGH xor caldown == HIGH){
    digitalWrite(lcdlight, HIGH);
    calstate = true;
    displtimeon = millis();  //set display timer
    Serial.println("cal btn ACTIVE");
    if(syson == false){
      digitalWrite(lcdlight, HIGH);
      lcd.clear();
      lcd.print("   SYSTEM OFF");
      lcd.setCursor(0,1);
      lcd.print("  hold both btns");
      delay(3000);
      lcd.setCursor(0,1);
      lcd.print("  to turn on    ");
      displtimeon = millis();
    }
  }

  if(calstate == true and syson == true){  //--------DISPLAY ROUTINE
    Serial.println("printing display");
    //display variables on LCD
    lcd.setCursor(0,0);
    lcd.print("Humidity: ");
    lcd.setCursor(13,0);
    lcd.print(DHT.humidity);
    lcd.setCursor(15,0);
    lcd.print("%  ");
    lcd.setCursor(0,1);
    lcd.print("setting: ");
    lcd.setCursor(13,1);
    lcd.print(setpoint);
    lcd.setCursor(15,1);
    lcd.print("%  ");
    delay(100);

    calunlock ++;  
    //keeps calibration locked until display cycles 5 times after initially turned on
    //prevents adjustments on initial button press.
  }

//--------CALIBRATION ADJUSTMENTS
  if(calup == HIGH and caldown == LOW and calstate == true and syson == true){ 
    if(setpoint < 90 and calunlock > 5){ 
      setpoint = setpoint + 5;  //increase setpoint 
      Serial.println("adj setpoint up");
    }
    Serial.println(setpoint);
    delay(100);
    displtimeon = millis();     //reset backlight timeout
  }

  if(caldown == HIGH and calup == LOW and calstate == true and syson == true){
    if(setpoint > 10 and calunlock > 5){
      setpoint = setpoint - 5;  //decrease setpoint
      Serial.println("adj setpoint dn");
      }
    Serial.println(setpoint);
    delay(100);  
    displtimeon = millis();     //reset backlight timeout
  }

  if(millis() > displtimeon + displtime){  //-----------------BACKLIGHT TIMEOUT
    digitalWrite(lcdlight, LOW); //turn off the screen
    calstate = false;
    Serial.println("displ + backlights off");
    lcd.clear();
    calunlock = 0;  //lock calibration
  }

  if(millis() < lastcheck){
    lastcheck = millis();  //reset timers in a millisecond rollover
  }

                                      //--------SETPOINT ERROR PROCEDURE
  if(setpoint > 91 or setpoint < 9){  //in case setpoint is ever out of bounds
    Serial.println("O/B ERROR");
    digitalWrite(lcdlight, HIGH);
    lcd.clear();
    lcd.print("O/B ERROR");  //display error message on lcd
    lcd.setCursor(0,1);
    lcd.print("RESETTING");
    delay(1000);
    for(int count = 9; count >= 0; count = count - 1){
      lcd.setCursor(15,1);
      lcd.print(count);     //count down from 10
      delay(1000);
    }
    setpoint = 50;        //reset setpoint at 50.
    displtimeon = millis();
  }

  //turn on humidifier relay if below setpoint  --------RELAY CONTROL
  //RELAY MODULE IS ACTIVE LOW
  if(DHT.humidity <= setpoint - 3 and syson == true){  //if humidity is 3% lower than setpoint
    Serial.println("humidifier ON, fan OFF");  
    digitalWrite(humidifier, LOW);  //turn on humidifier
    digitalWrite(fan, HIGH);
  }
  else if(DHT.humidity >= setpoint + 3 and syson == true){  //if humidity is 3% above setpoint
    Serial.println("humidifier OFF, fan ON");
    digitalWrite(humidifier, HIGH);  //turn on fan
    digitalWrite(fan, LOW);
  }
  else{
    Serial.println("all off");  //if humidity is within 3% of setpoint
    digitalWrite(humidifier, HIGH);  //turn both off
    digitalWrite(fan, HIGH);
  }
  //delay(700);  //un-comment for serial debugging

  Serial.print("setpoint = ");
  Serial.println(setpoint);

  //delay(700);  //un-comment for serial debugging
}

/*  WIRING DIAGRAMS
 https://66.media.tumblr.com/98426b566744beacdd42bc0221092b76/tumblr_pvr0u8kvZy1yrmjh9o1_1280.png
 */

This is NOT my code; was posted on Project Hubposted on Project Hub. I tried to use the code (humidity controller) but it returns an error on line 270:

This is NOT my code; was posted on Project Hub. I tried to use the code (humidity controller) but it returns an error on line 270:

This is NOT my code; was posted on Project Hub. I tried to use the code (humidity controller) but it returns an error on line 270:

added 1 character in body
Source Link
    //HUMIDITY CONTROLLER 1.1
    //written for NANO
    
    //controls and displays relative humidity
    //sesnor used is DHT11
    //uses active-low relay module to control live lines for 2 standard electrical outlets
    //uses i2c lcd to display humidity and humidity setting
    //turns display off during inactivity
    //setting is adjustable from 10%-90% using 2 buttons
    //backlight of LCD is controlled by pin 4, connected to top LED jumper pin on i2c backpack
    //serial communications to monitor to ensure all code is working.
    
    //added: "system off" function - allows both outlets to be turned off
    
    // █ G █ L █ O █ B █ A █ L █ S █
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
  #include <dht<Wire.h>
 
// set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);  

dht DHT;

#define DHT11_PIN A2

//buttons and variables to adjust calibration
int calupbtn = A0;
int calup;
int caldownbtn = A1;
int caldown;

//i2c PINS A4, A5

//pin for turning on humidifier relay
int humidifier = 3;
//pin for turning on the fan relay
int fan = 2;
//pin for turning on LCD backlights
int lcdlight = 4;

//calibration#include variable<LiquidCrystal_I2C.h>
int setpoint = 50;  //feedback#include setpoint<DHT.  h>
bool calstate = false;  //enables calibration adjustments only when LCD is ON.

//backlight timing variables
int displtime = 12000;  //amount of timeset the displayLCD isaddress to be on before turning off
unsigned long displtimeon;  //last recorded time display timer was reset
int calunlock = 0;   //loop counter for unlocking calibration  

//sensor timing variables
unsigned long lastcheck;  //last time DHT was read
long interval = 30000;      //time between DHT readings

//system variables
bool syson = true;    //reference for system on/off. 
byte systog = 2;       //even number toggles on, odds toggle off
int syslock = 0;     //loop counter0x27 for unlocking system toggle

// █ S █ E █ T █ U █ P █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █
void setup(){

  Serial.begin(9600);  //serial communication used to ensure code is working correctly.
  
  lcd.init();  //initialize LCD
  lcd.backlight(); //enable LCD backlight, but doesn't turn it on

  lastcheck = 0;
  digitalWrite(lcdlight, HIGH);
  Serial.println("STARTING");
  lcd.print("   STARTING");

  //pin assignments
  pinMode(calupbtn, INPUT);
  pinMode(caldownbtn, INPUT);
  pinMode(humidifier, OUTPUT);
  pinMode(fan, OUTPUT);
  pinMode(lcdlight, OUTPUT);
  delay(1000);

  
  //test fan
  lcd.setCursor(0,1);
  lcd.print("<FAN>     HMDFR  ");  
  digitalWrite(fan, LOW);
  digitalWrite(humidifier, HIGH);
  delay(6000);
  //test humidifier
  lcd.setCursor(0,1);
  lcd.print(" FAN     <HMDFR> ");
  digitalWrite(fan, HIGH);
  digitalWrite(humidifier, LOW);
  delay(6000);
  //stop startup test
  digitalWrite(humidifier, HIGH);
  digitalWrite(fan, HIGH);
  lcd.clear();

  displtimeon = millis();

  int chk = DHT.read11(DHT11_PIN);
  lastcheck = millis();

  lcd.setCursor(0,0);
  lcd.print("Humidity: ");
  lcd.setCursor(13,0);
  lcd.print(DHT.humidity);
  lcd.setCursor(15,0);
a 16 lcd.print("%chars and ");
2 line lcd.setCursor(0,1);display
  lcd.print("setting: ");
 LiquidCrystal_I2C lcd.setCursor(130x27,1);
  lcd.print(setpoint);
  lcd.setCursor(1516,1);
  lcd.print("%  ");
  delay(1002);
}

// █ L █ O █ O █ P █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █
voidDHT loopDHT_sens(10, DHT22){; 

  //check calibration buttons
  calup = digitalRead(calupbtn);
  caldown#define =DHT22_PIN digitalRead(caldownbtn);A2

    
    //buttons and variables to adjust calibration
    int calupbtn = A0;
    int calup;
    int caldownbtn = A1;
    int caldown;
    
    //i2c PINS A4, A5
    
    //pin for turning on humidifier relay
    int humidifier = 3;
    //pin for turning on the fan relay
    int fan = 2;
    //pin for turning on LCD backlights
    int lcdlight = 4;
    
    //calibration variable
    int setpoint = 50;  //feedback setpoint.  
    bool calstate = false;  //enables calibration adjustments only when LCD is ON.
    
    //backlight timing variables
    int displtime = 12000;  //amount of time the display is to be on before turning off
    unsigned long displtimeon;  //last recorded time display timer was reset
    int calunlock = 0;   //loop counter for unlocking calibration  
    
    //sensor timing variables
    unsigned long lastcheck;  //last time DHT was read
    long interval = 30000;      //time between DHT readings
    
    //system variables
    bool syson = true;    //reference for system on/off. 
    byte systog = 2;       //even number toggles on, odds toggle off
    int syslock = 0;     //loop counter for unlocking system toggle
    
    // █ S █ E █ T █ U █ P █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █
    void setup(){
    
      Serial.begin(9600);  //serial communication used to ensure code is working correctly.
      
      lcd.init();  //initialize LCD
      lcd.backlight(); //enable LCD backlight, but doesn't turn it on
    
      lastcheck = 0;
      digitalWrite(lcdlight, HIGH);
      Serial.println("STARTING");
      lcd.print("   STARTING");
    
      //pin assignments
      pinMode(calupbtn, INPUT);
      pinMode(caldownbtn, INPUT);
      pinMode(humidifier, OUTPUT);
      pinMode(fan, OUTPUT);
      pinMode(lcdlight, OUTPUT);
      delay(1000);
    
      
      //test fan
      lcd.setCursor(0,1);
      lcd.print("<FAN>     HMDFR  ");  
      digitalWrite(fan, LOW);
      digitalWrite(humidifier, HIGH);
      delay(6000);
      //test humidifier
      lcd.setCursor(0,1);
      lcd.print(" FAN     <HMDFR> ");
      digitalWrite(fan, HIGH);
      digitalWrite(humidifier, LOW);
      delay(6000);
      //stop startup test
      digitalWrite(humidifier, HIGH);
      digitalWrite(fan, HIGH);
      lcd.clear();
    
      displtimeon = millis();
    
      int chk = DHT.read11(DHT11_PIN);
      lastcheck = millis();
    
      lcd.setCursor(0,0);
      lcd.print("Humidity: ");
      lcd.setCursor(13,0);
      lcd.print(DHT.humidity);
      lcd.setCursor(15,0);
      lcd.print("%  ");
      lcd.setCursor(0,1);
      lcd.print("setting: ");
      lcd.setCursor(13,1);
      lcd.print(setpoint);
      lcd.setCursor(15,1);
      lcd.print("%  ");
      delay(100);
    }
    
    // █ L █ O █ O █ P █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █
    void loop(){
    
      //check calibration buttons
      calup = digitalRead(calupbtn);
      caldown = digitalRead(caldownbtn);
    
      if(calup == HIGH and caldown == HIGH){  //--------SYSTEM TOGGLE
        syslock ++;
        Serial.println(syslock);
        if(syslock == 20){  //if both buttons held down for this many loops
          systog++;
          if(systog % 2 == 1){  //--------SYSTEM OFF
            syson = false;
            digitalWrite(fan, HIGH);
            digitalWrite(humidifier, HIGH);
            digitalWrite(lcdlight, HIGH);
            Serial.println("SYSTEM TURNED OFF");
            lcd.clear();
            lcd.print("   SYSTEM OFF");
            lcd.setCursor(0,1);
            lcd.print("  hold both btns");
            delay(2000);
            lcd.setCursor(0,1);
            lcd.print("  to turn on    ");
            displtimeon = millis();
          }
          if(systog % 2 == 0){  //--------SYSTEM ON
            syson = true;
            Serial.println("SYSTEM TURNED ON");
            digitalWrite(lcdlight, HIGH);
            lcd.clear();
            lcd.print("   SYSTEM ON");
            delay(2000);
            lcd.clear();
            displtimeon = millis();
          }
          syslock = 0;
        }
      }
      else(syslock = 0);
      
      //read humidity at appropriate intervals
      if(millis() > lastcheck + interval and syson == true){  //read the DHT humidity
        int chk = DHT.read11(DHT11_PIN);
        lastcheck = millis();
        Serial.print("DHT read = ");
        Serial.print(DHT.humidity);
        Serial.print("%");
        Serial.println(" ");
        }
    
      //turn on the led lights when calibration buttons are pressed
      if(calup == HIGH xor caldown == HIGH){
        digitalWrite(lcdlight, HIGH);
        calstate = true;
        displtimeon = millis();  //set display timer
        Serial.println("SYSTEM"cal TURNEDbtn OFF"ACTIVE");
        if(syson == false){
          digitalWrite(lcdlight, HIGH);
          lcd.clear();
          lcd.print("   SYSTEM OFF");
          lcd.setCursor(0,1);
          lcd.print("  hold both btns");
          delay(20003000);
          lcd.setCursor(0,1);
          lcd.print("  to turn on    ");
          displtimeon = millis();
        }
      }
    
      if(calstate == true and syson == true){  //--------DISPLAY ROUTINE
        Serial.println("printing display");
        //display variables on LCD
        lcd.setCursor(0,0);
        lcd.print("Humidity: ");
        lcd.setCursor(13,0);
        lcd.print(DHT.humidity);
        lcd.setCursor(15,0);
        lcd.print("%  ");
        lcd.setCursor(0,1);
        lcd.print("setting: ");
  to turn on    "lcd.setCursor(13,1);
        displtimeonlcd.print(setpoint);
 = millis      lcd.setCursor(15,1);
        lcd.print("%  ");
        delay(100);
    
        calunlock ++;  
        //keeps calibration locked until display cycles 5 times after initially turned on
        //prevents adjustments on initial button press.
      }
    
    //--------CALIBRATION ADJUSTMENTS
      if(systogcalup %== 2HIGH and caldown == 0LOW and calstate == true and syson == true){ 
        if(setpoint < 90 and calunlock > 5){ 
          setpoint = setpoint + 5;  //--------SYSTEMincrease ONsetpoint 
          Serial.println("adj setpoint up");
        }
        Serial.println(setpoint);
        delay(100);
        displtimeon = millis();     //reset backlight timeout
      }
    
      if(caldown == HIGH and calup == LOW and calstate == true and syson == true){
        if(setpoint > 10 and calunlock > 5){
          setpoint = true;setpoint - 5;  //decrease setpoint
          Serial.println("SYSTEM"adj TURNEDsetpoint ON"dn");
          }
        Serial.println(setpoint);
        delay(100);  
        displtimeon = millis();     //reset backlight timeout
      }
    
      if(millis() > displtimeon + displtime){  //-----------------BACKLIGHT TIMEOUT
        digitalWrite(lcdlight, HIGHLOW); //turn off the screen
        calstate = false;
        Serial.println("displ + backlights off");
        lcd.clear();
        lcd.printcalunlock = 0;  //lock calibration
      }
    
      if("millis() < lastcheck){
 SYSTEM ON"      lastcheck = millis();  //reset timers in a millisecond rollover
      }
  delay  
                                          //--------SETPOINT ERROR PROCEDURE
      if(2000setpoint > 91 or setpoint < 9){  //in case setpoint is ever out of bounds
        Serial.println("O/B ERROR");
        digitalWrite(lcdlight, HIGH);
        lcd.clear();
        lcd.print("O/B ERROR");  //display error message on lcd
        lcd.setCursor(0,1);
        lcd.print("RESETTING");
        delay(1000);
        for(int count = 9; count >= 0; count = count - 1){
          lcd.setCursor(15,1);
          lcd.print(count);     //count down from 10
          delay(1000);
        }
        setpoint = 50;        //reset setpoint at 50.
        displtimeon = millis();
      }
      syslock = 0;
    }
  }
  else(syslock = 0);
  
  //read humidity at appropriate intervals
  if(millis() > lastcheck + interval and syson == true){  //read the DHT humidity
    int chk = DHT.read11(DHT11_PIN);
    lastcheck = millis();
    Serial.print("DHT read = ");
    Serial.print(DHT.humidity);
    Serial.print("%");
    Serial.println(" ");
    }

  //turn on the led lights when calibration buttons are pressed
  if(calup == HIGH xor caldown == HIGH){
    digitalWrite(lcdlight, HIGH);
    calstate = true;
    displtimeon = millis();  //set display timer
    Serial.println("cal btn ACTIVE");
    if(syson == false){
      digitalWrite(lcdlight, HIGH);
      lcd.clear();
      lcd.print("   SYSTEM OFF");
      lcd.setCursor(0,1);
      lcd.print("  hold both btns");
      delay(3000);
      lcd.setCursor(0,1);
      lcd.print("  to turn on    ");
      displtimeon = millis();
    }
  }

humidifier relay if(calstate == true and syson ==below true){setpoint  //--------DISPLAYRELAY ROUTINECONTROL
    Serial.println("printing display");
    //display variables on LCD
    lcd.setCursor(0,0);
 RELAY MODULE IS lcd.print("Humidity:ACTIVE ");LOW
    lcd.setCursor(13,0);
    lcd.printif(DHT.humidity);
    lcd.setCursor(15,0);
    lcd.print("%  ");
    lcd.setCursor(0,1);
    lcd.print("setting: ");
    lcd.setCursor(13,1);
   <= lcd.print(setpoint);
    lcd.setCursor(15,1);
    lcd.print("%  ");
    delay(100);

    calunlock ++;  
    //keeps calibration locked until display cycles 5 times after initially turned on
    //prevents adjustments on initial button press.
  }

//--------CALIBRATION ADJUSTMENTS
  if(calup == HIGH and caldown == LOW and calstate == true3 and syson == true){ 
    if(setpoint < 90 and calunlock > 5){ 
      setpoint = setpoint + 5;  //increase setpoint 
 if humidity is 3% lower Serial.println("adjthan setpoint up");
    }
    Serial.println(setpoint);
    delay(100);
   "humidifier displtimeonON, =fan millis(OFF");     //reset backlight timeout
  }

  if(caldown == HIGH and calup ==digitalWrite(humidifier, LOW and calstate == true and syson == true){
    if(setpoint > 10; and calunlock//turn >on 5){humidifier
      setpoint = setpoint - 5;  //decrease setpoint
      Serial.printlndigitalWrite("adj setpointfan, dn"HIGH);
      }
    Serial.println(setpoint);
    delay(100);  
    displtimeon =else millisif();     //reset backlight timeout
DHT.humidity >= }

setpoint + if(millis()3 >and displtimeonsyson +== displtimetrue){  //-----------------BACKLIGHT TIMEOUT
    digitalWrite(lcdlight,if LOW);humidity //turnis off3% theabove screensetpoint
    calstate = false;
    Serial.println("displ"humidifier +OFF, backlightsfan off"ON");
    lcd.clear();
    calunlock =digitalWrite(humidifier, 0;HIGH);  //lock calibration
turn on }
fan
  if(millis() < lastcheck){
    lastcheck = millisdigitalWrite(fan, LOW);  //reset timers 
 in a millisecond rollover
  }
 
                                  else{
    //--------SETPOINT ERROR PROCEDURE
  ifSerial.println(setpoint > 91 or setpoint <"all 9off"){;  //in caseif setpointhumidity is everwithin out3% of boundssetpoint
    Serial.println("O/B ERROR");
    digitalWrite(lcdlighthumidifier, HIGH);
   //turn both lcd.clear();off
    lcd.print("O/B ERROR");  //display error message on lcd
    lcd.setCursordigitalWrite(0fan,1 HIGH);
    lcd.print("RESETTING");  }
      //delay(1000700);
   //un-comment for(int count = 9; count >=serial 0;debugging
 count = count - 1){
      lcdSerial.setCursorprint(15,1"setpoint = ");
      lcdSerial.printprintln(countsetpoint);    
  //count down from 10
      //delay(1000700);  //un-comment for serial debugging
    }
    setpoint = 50;        //reset setpoint at 50.
    displtimeon = millis();
  }

  //turn on humidifier relay if below setpoint  --------RELAY CONTROL
  //RELAY MODULE IS ACTIVE LOW
  if(DHT.humidity <= setpoint - 3 and syson == true){  //if humidity is 3% lower than setpoint
    Serial.println("humidifier ON, fan OFF");  
    digitalWrite(humidifier, LOW);  //turn on humidifier
    digitalWrite(fan, HIGH);
  }
  else if(DHT.humidity >= setpoint + 3 and syson == true){  //if humidity is 3% above setpoint
    Serial.println("humidifier OFF, fan ON");
    digitalWrite(humidifier, HIGH);  //turn on fan
    digitalWrite(fan, LOW);
  }
  else{
    Serial.println("all off");  //if humidity is within 3% of setpoint
    digitalWrite(humidifier, HIGH);  //turn both off
    digitalWrite(fan, HIGH);
  }
  //delay(700);  //un-comment for serial debugging

  Serial.print("setpoint = ");
  Serial.println(setpoint);

  //delay(700);  //un-comment for serial debugging
}
//HUMIDITY CONTROLLER 1.1
//written for NANO

//controls and displays relative humidity
//sesnor used is DHT11
//uses active-low relay module to control live lines for 2 standard electrical outlets
//uses i2c lcd to display humidity and humidity setting
//turns display off during inactivity
//setting is adjustable from 10%-90% using 2 buttons
//backlight of LCD is controlled by pin 4, connected to top LED jumper pin on i2c backpack
//serial communications to monitor to ensure all code is working.

//added: "system off" function - allows both outlets to be turned off

// █ G █ L █ O █ B █ A █ L █ S █
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <dht.h>
 
// set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);  

dht DHT;

#define DHT11_PIN A2

//buttons and variables to adjust calibration
int calupbtn = A0;
int calup;
int caldownbtn = A1;
int caldown;

//i2c PINS A4, A5

//pin for turning on humidifier relay
int humidifier = 3;
//pin for turning on the fan relay
int fan = 2;
//pin for turning on LCD backlights
int lcdlight = 4;

//calibration variable
int setpoint = 50;  //feedback setpoint.  
bool calstate = false;  //enables calibration adjustments only when LCD is ON.

//backlight timing variables
int displtime = 12000;  //amount of time the display is to be on before turning off
unsigned long displtimeon;  //last recorded time display timer was reset
int calunlock = 0;   //loop counter for unlocking calibration  

//sensor timing variables
unsigned long lastcheck;  //last time DHT was read
long interval = 30000;      //time between DHT readings

//system variables
bool syson = true;    //reference for system on/off. 
byte systog = 2;       //even number toggles on, odds toggle off
int syslock = 0;     //loop counter for unlocking system toggle

// █ S █ E █ T █ U █ P █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █
void setup(){

  Serial.begin(9600);  //serial communication used to ensure code is working correctly.
  
  lcd.init();  //initialize LCD
  lcd.backlight(); //enable LCD backlight, but doesn't turn it on

  lastcheck = 0;
  digitalWrite(lcdlight, HIGH);
  Serial.println("STARTING");
  lcd.print("   STARTING");

  //pin assignments
  pinMode(calupbtn, INPUT);
  pinMode(caldownbtn, INPUT);
  pinMode(humidifier, OUTPUT);
  pinMode(fan, OUTPUT);
  pinMode(lcdlight, OUTPUT);
  delay(1000);

  
  //test fan
  lcd.setCursor(0,1);
  lcd.print("<FAN>     HMDFR  ");  
  digitalWrite(fan, LOW);
  digitalWrite(humidifier, HIGH);
  delay(6000);
  //test humidifier
  lcd.setCursor(0,1);
  lcd.print(" FAN     <HMDFR> ");
  digitalWrite(fan, HIGH);
  digitalWrite(humidifier, LOW);
  delay(6000);
  //stop startup test
  digitalWrite(humidifier, HIGH);
  digitalWrite(fan, HIGH);
  lcd.clear();

  displtimeon = millis();

  int chk = DHT.read11(DHT11_PIN);
  lastcheck = millis();

  lcd.setCursor(0,0);
  lcd.print("Humidity: ");
  lcd.setCursor(13,0);
  lcd.print(DHT.humidity);
  lcd.setCursor(15,0);
  lcd.print("%  ");
  lcd.setCursor(0,1);
  lcd.print("setting: ");
  lcd.setCursor(13,1);
  lcd.print(setpoint);
  lcd.setCursor(15,1);
  lcd.print("%  ");
  delay(100);
}

// █ L █ O █ O █ P █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █
void loop(){

  //check calibration buttons
  calup = digitalRead(calupbtn);
  caldown = digitalRead(caldownbtn);

  if(calup == HIGH and caldown == HIGH){  //--------SYSTEM TOGGLE
    syslock ++;
    Serial.println(syslock);
    if(syslock == 20){  //if both buttons held down for this many loops
      systog++;
      if(systog % 2 == 1){  //--------SYSTEM OFF
        syson = false;
        digitalWrite(fan, HIGH);
        digitalWrite(humidifier, HIGH);
        digitalWrite(lcdlight, HIGH);
        Serial.println("SYSTEM TURNED OFF");
        lcd.clear();
        lcd.print("   SYSTEM OFF");
        lcd.setCursor(0,1);
        lcd.print("  hold both btns");
        delay(2000);
        lcd.setCursor(0,1);
        lcd.print("  to turn on    ");
        displtimeon = millis();
      }
      if(systog % 2 == 0){  //--------SYSTEM ON
        syson = true;
        Serial.println("SYSTEM TURNED ON");
        digitalWrite(lcdlight, HIGH);
        lcd.clear();
        lcd.print("   SYSTEM ON");
        delay(2000);
        lcd.clear();
        displtimeon = millis();
      }
      syslock = 0;
    }
  }
  else(syslock = 0);
  
  //read humidity at appropriate intervals
  if(millis() > lastcheck + interval and syson == true){  //read the DHT humidity
    int chk = DHT.read11(DHT11_PIN);
    lastcheck = millis();
    Serial.print("DHT read = ");
    Serial.print(DHT.humidity);
    Serial.print("%");
    Serial.println(" ");
    }

  //turn on the led lights when calibration buttons are pressed
  if(calup == HIGH xor caldown == HIGH){
    digitalWrite(lcdlight, HIGH);
    calstate = true;
    displtimeon = millis();  //set display timer
    Serial.println("cal btn ACTIVE");
    if(syson == false){
      digitalWrite(lcdlight, HIGH);
      lcd.clear();
      lcd.print("   SYSTEM OFF");
      lcd.setCursor(0,1);
      lcd.print("  hold both btns");
      delay(3000);
      lcd.setCursor(0,1);
      lcd.print("  to turn on    ");
      displtimeon = millis();
    }
  }

  if(calstate == true and syson == true){  //--------DISPLAY ROUTINE
    Serial.println("printing display");
    //display variables on LCD
    lcd.setCursor(0,0);
    lcd.print("Humidity: ");
    lcd.setCursor(13,0);
    lcd.print(DHT.humidity);
    lcd.setCursor(15,0);
    lcd.print("%  ");
    lcd.setCursor(0,1);
    lcd.print("setting: ");
    lcd.setCursor(13,1);
    lcd.print(setpoint);
    lcd.setCursor(15,1);
    lcd.print("%  ");
    delay(100);

    calunlock ++;  
    //keeps calibration locked until display cycles 5 times after initially turned on
    //prevents adjustments on initial button press.
  }

//--------CALIBRATION ADJUSTMENTS
  if(calup == HIGH and caldown == LOW and calstate == true and syson == true){ 
    if(setpoint < 90 and calunlock > 5){ 
      setpoint = setpoint + 5;  //increase setpoint 
      Serial.println("adj setpoint up");
    }
    Serial.println(setpoint);
    delay(100);
    displtimeon = millis();     //reset backlight timeout
  }

  if(caldown == HIGH and calup == LOW and calstate == true and syson == true){
    if(setpoint > 10 and calunlock > 5){
      setpoint = setpoint - 5;  //decrease setpoint
      Serial.println("adj setpoint dn");
      }
    Serial.println(setpoint);
    delay(100);  
    displtimeon = millis();     //reset backlight timeout
  }

  if(millis() > displtimeon + displtime){  //-----------------BACKLIGHT TIMEOUT
    digitalWrite(lcdlight, LOW); //turn off the screen
    calstate = false;
    Serial.println("displ + backlights off");
    lcd.clear();
    calunlock = 0;  //lock calibration
  }

  if(millis() < lastcheck){
    lastcheck = millis();  //reset timers in a millisecond rollover
  }
 
                                      //--------SETPOINT ERROR PROCEDURE
  if(setpoint > 91 or setpoint < 9){  //in case setpoint is ever out of bounds
    Serial.println("O/B ERROR");
    digitalWrite(lcdlight, HIGH);
     lcd.clear();
    lcd.print("O/B ERROR");  //display error message on lcd
    lcd.setCursor(0,1);
    lcd.print("RESETTING");
    delay(1000);
    for(int count = 9; count >= 0; count = count - 1){
      lcd.setCursor(15,1);
      lcd.print(count);     //count down from 10
      delay(1000);
    }
    setpoint = 50;        //reset setpoint at 50.
    displtimeon = millis();
  }

  //turn on humidifier relay if below setpoint  --------RELAY CONTROL
  //RELAY MODULE IS ACTIVE LOW
  if(DHT.humidity <= setpoint - 3 and syson == true){  //if humidity is 3% lower than setpoint
    Serial.println("humidifier ON, fan OFF");  
    digitalWrite(humidifier, LOW);  //turn on humidifier
    digitalWrite(fan, HIGH);
  }
  else if(DHT.humidity >= setpoint + 3 and syson == true){  //if humidity is 3% above setpoint
    Serial.println("humidifier OFF, fan ON");
    digitalWrite(humidifier, HIGH);  //turn on fan
    digitalWrite(fan, LOW);
  }
  else{
    Serial.println("all off");  //if humidity is within 3% of setpoint
    digitalWrite(humidifier, HIGH);  //turn both off
    digitalWrite(fan, HIGH);
  }
  //delay(700);  //un-comment for serial debugging

  Serial.print("setpoint = ");
  Serial.println(setpoint);

  //delay(700);  //un-comment for serial debugging
}
    //HUMIDITY CONTROLLER 1.1
    //written for NANO
    
    //controls and displays relative humidity
    //sesnor used is DHT11
    //uses active-low relay module to control live lines for 2 standard electrical outlets
    //uses i2c lcd to display humidity and humidity setting
    //turns display off during inactivity
    //setting is adjustable from 10%-90% using 2 buttons
    //backlight of LCD is controlled by pin 4, connected to top LED jumper pin on i2c backpack
    //serial communications to monitor to ensure all code is working.
    
    //added: "system off" function - allows both outlets to be turned off
    
    // █ G █ L █ O █ B █ A █ L █ S █
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <DHT.h>
    
    // set the LCD address to 0x27 for a 16 chars and 2 line display
    LiquidCrystal_I2C lcd(0x27, 16, 2);

DHT DHT_sens(10, DHT22); 

#define DHT22_PIN A2

    
    //buttons and variables to adjust calibration
    int calupbtn = A0;
    int calup;
    int caldownbtn = A1;
    int caldown;
    
    //i2c PINS A4, A5
    
    //pin for turning on humidifier relay
    int humidifier = 3;
    //pin for turning on the fan relay
    int fan = 2;
    //pin for turning on LCD backlights
    int lcdlight = 4;
    
    //calibration variable
    int setpoint = 50;  //feedback setpoint.  
    bool calstate = false;  //enables calibration adjustments only when LCD is ON.
    
    //backlight timing variables
    int displtime = 12000;  //amount of time the display is to be on before turning off
    unsigned long displtimeon;  //last recorded time display timer was reset
    int calunlock = 0;   //loop counter for unlocking calibration  
    
    //sensor timing variables
    unsigned long lastcheck;  //last time DHT was read
    long interval = 30000;      //time between DHT readings
    
    //system variables
    bool syson = true;    //reference for system on/off. 
    byte systog = 2;       //even number toggles on, odds toggle off
    int syslock = 0;     //loop counter for unlocking system toggle
    
    // █ S █ E █ T █ U █ P █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █ + █
    void setup(){
    
      Serial.begin(9600);  //serial communication used to ensure code is working correctly.
      
      lcd.init();  //initialize LCD
      lcd.backlight(); //enable LCD backlight, but doesn't turn it on
    
      lastcheck = 0;
      digitalWrite(lcdlight, HIGH);
      Serial.println("STARTING");
      lcd.print("   STARTING");
    
      //pin assignments
      pinMode(calupbtn, INPUT);
      pinMode(caldownbtn, INPUT);
      pinMode(humidifier, OUTPUT);
      pinMode(fan, OUTPUT);
      pinMode(lcdlight, OUTPUT);
      delay(1000);
    
      
      //test fan
      lcd.setCursor(0,1);
      lcd.print("<FAN>     HMDFR  ");  
      digitalWrite(fan, LOW);
      digitalWrite(humidifier, HIGH);
      delay(6000);
      //test humidifier
      lcd.setCursor(0,1);
      lcd.print(" FAN     <HMDFR> ");
      digitalWrite(fan, HIGH);
      digitalWrite(humidifier, LOW);
      delay(6000);
      //stop startup test
      digitalWrite(humidifier, HIGH);
      digitalWrite(fan, HIGH);
      lcd.clear();
    
      displtimeon = millis();
    
      int chk = DHT.read11(DHT11_PIN);
      lastcheck = millis();
    
      lcd.setCursor(0,0);
      lcd.print("Humidity: ");
      lcd.setCursor(13,0);
      lcd.print(DHT.humidity);
      lcd.setCursor(15,0);
      lcd.print("%  ");
      lcd.setCursor(0,1);
      lcd.print("setting: ");
      lcd.setCursor(13,1);
      lcd.print(setpoint);
      lcd.setCursor(15,1);
      lcd.print("%  ");
      delay(100);
    }
    
    // █ L █ O █ O █ P █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █ = █
    void loop(){
    
      //check calibration buttons
      calup = digitalRead(calupbtn);
      caldown = digitalRead(caldownbtn);
    
      if(calup == HIGH and caldown == HIGH){  //--------SYSTEM TOGGLE
        syslock ++;
        Serial.println(syslock);
        if(syslock == 20){  //if both buttons held down for this many loops
          systog++;
          if(systog % 2 == 1){  //--------SYSTEM OFF
            syson = false;
            digitalWrite(fan, HIGH);
            digitalWrite(humidifier, HIGH);
            digitalWrite(lcdlight, HIGH);
            Serial.println("SYSTEM TURNED OFF");
            lcd.clear();
            lcd.print("   SYSTEM OFF");
            lcd.setCursor(0,1);
            lcd.print("  hold both btns");
            delay(2000);
            lcd.setCursor(0,1);
            lcd.print("  to turn on    ");
            displtimeon = millis();
          }
          if(systog % 2 == 0){  //--------SYSTEM ON
            syson = true;
            Serial.println("SYSTEM TURNED ON");
            digitalWrite(lcdlight, HIGH);
            lcd.clear();
            lcd.print("   SYSTEM ON");
            delay(2000);
            lcd.clear();
            displtimeon = millis();
          }
          syslock = 0;
        }
      }
      else(syslock = 0);
      
      //read humidity at appropriate intervals
      if(millis() > lastcheck + interval and syson == true){  //read the DHT humidity
        int chk = DHT.read11(DHT11_PIN);
        lastcheck = millis();
        Serial.print("DHT read = ");
        Serial.print(DHT.humidity);
        Serial.print("%");
        Serial.println(" ");
        }
    
      //turn on the led lights when calibration buttons are pressed
      if(calup == HIGH xor caldown == HIGH){
        digitalWrite(lcdlight, HIGH);
        calstate = true;
        displtimeon = millis();  //set display timer
        Serial.println("cal btn ACTIVE");
        if(syson == false){
          digitalWrite(lcdlight, HIGH);
          lcd.clear();
          lcd.print("   SYSTEM OFF");
          lcd.setCursor(0,1);
          lcd.print("  hold both btns");
          delay(3000);
          lcd.setCursor(0,1);
          lcd.print("  to turn on    ");
          displtimeon = millis();
        }
      }
    
      if(calstate == true and syson == true){  //--------DISPLAY ROUTINE
        Serial.println("printing display");
        //display variables on LCD
        lcd.setCursor(0,0);
        lcd.print("Humidity: ");
        lcd.setCursor(13,0);
        lcd.print(DHT.humidity);
        lcd.setCursor(15,0);
        lcd.print("%  ");
        lcd.setCursor(0,1);
        lcd.print("setting: ");
        lcd.setCursor(13,1);
        lcd.print(setpoint);
        lcd.setCursor(15,1);
        lcd.print("%  ");
        delay(100);
    
        calunlock ++;  
        //keeps calibration locked until display cycles 5 times after initially turned on
        //prevents adjustments on initial button press.
      }
    
    //--------CALIBRATION ADJUSTMENTS
      if(calup == HIGH and caldown == LOW and calstate == true and syson == true){ 
        if(setpoint < 90 and calunlock > 5){ 
          setpoint = setpoint + 5;  //increase setpoint 
          Serial.println("adj setpoint up");
        }
        Serial.println(setpoint);
        delay(100);
        displtimeon = millis();     //reset backlight timeout
      }
    
      if(caldown == HIGH and calup == LOW and calstate == true and syson == true){
        if(setpoint > 10 and calunlock > 5){
          setpoint = setpoint - 5;  //decrease setpoint
          Serial.println("adj setpoint dn");
          }
        Serial.println(setpoint);
        delay(100);  
        displtimeon = millis();     //reset backlight timeout
      }
    
      if(millis() > displtimeon + displtime){  //-----------------BACKLIGHT TIMEOUT
        digitalWrite(lcdlight, LOW); //turn off the screen
        calstate = false;
        Serial.println("displ + backlights off");
        lcd.clear();
        calunlock = 0;  //lock calibration
      }
    
      if(millis() < lastcheck){
        lastcheck = millis();  //reset timers in a millisecond rollover
      }
    
                                          //--------SETPOINT ERROR PROCEDURE
      if(setpoint > 91 or setpoint < 9){  //in case setpoint is ever out of bounds
        Serial.println("O/B ERROR");
        digitalWrite(lcdlight, HIGH);
        lcd.clear();
        lcd.print("O/B ERROR");  //display error message on lcd
        lcd.setCursor(0,1);
        lcd.print("RESETTING");
        delay(1000);
        for(int count = 9; count >= 0; count = count - 1){
          lcd.setCursor(15,1);
          lcd.print(count);     //count down from 10
          delay(1000);
        }
        setpoint = 50;        //reset setpoint at 50.
        displtimeon = millis();
      }
    
      //turn on humidifier relay if below setpoint  --------RELAY CONTROL
      //RELAY MODULE IS ACTIVE LOW
      if(DHT.humidity <= setpoint - 3 and syson == true){  //if humidity is 3% lower than setpoint
        Serial.println("humidifier ON, fan OFF");  
        digitalWrite(humidifier, LOW);  //turn on humidifier
        digitalWrite(fan, HIGH);
      }
      else if(DHT.humidity >= setpoint + 3 and syson == true){  //if humidity is 3% above setpoint
        Serial.println("humidifier OFF, fan ON");
        digitalWrite(humidifier, HIGH);  //turn on fan
        digitalWrite(fan, LOW); 
      }
      else{
        Serial.println("all off");  //if humidity is within 3% of setpoint
        digitalWrite(humidifier, HIGH);  //turn both off
        digitalWrite(fan, HIGH);
      }
      //delay(700);  //un-comment for serial debugging
    
      Serial.print("setpoint = ");
      Serial.println(setpoint); 
    
      //delay(700);  //un-comment for serial debugging
    }
added 5 characters in body
Source Link
Loading
Source Link
Loading