Skip to main content

Help with debugging code

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:

else if (DHT.humidity >= setpoint + 3 and syson == true) { //if humidity is 3% above setpoint

Error: expected primary-expression before '.' token

The OP is not responding to comments and I'm no expert. Would appreciate if someone could help debug the code; Thanks!

    //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
    }