1

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;
#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
 */
asked Jan 23, 2020 at 20:38
0

1 Answer 1

2

You have installed the Adafruit DHT library via the Arduino library manager

Adafruit library

The source code does not work with that library. It is written to use the DHT library written by Rob Tillaart, named DHTLib. That library is not included in the Library Manager of the Arduino IDE. Instead, you have to download the library as a ZIP file and install it via Sketch / Include Library / Add .ZIP library.

How to install

I don't know why you have changed the source code in the meanwhile. Using DHTLib with the source code of revision 1 of your question works fine. In the meanwhile you have tried to adapt the code to match the Adafruit library, which eventually might be ok as well after some hard work. I suggest rolling back to the code of revision 1 and installing the correct library.

answered Jan 24, 2020 at 21:59
2
  • Comments are not for extended discussion; this conversation has been moved to chat. Commented Feb 4, 2020 at 20:27
  • Yes, I'm right here: mapability.com/ei8ic/maps/prefix/canw.php, and I see you are a member of Amateur Radio SE. On an un-related note, +1 for your answer. The images used are clear and easy to read. 73. Commented Feb 4, 2020 at 20:41

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.