Creating hysteresis with DHT11 sensor..

I'm building a simple fan controller...I want the fan to switch on at 27c and go off at 25c, hence creating a 2c hysteresis..

at the moment with the code below the fan goes on off around 27.... is this due to the else command .. do I create a >27 and <25 scenarios and put the else between?

{
    if(t>=27)
    {//lcd.setCursor(0, 0);
    //lcd.print("*  hot *  ");
    digitalWrite(fan, HIGH);
    lcd.setCursor(15, 0);
  lcd.print("F");}
  else
    {//lcd.setCursor(0, 0);
   // lcd.print("  Just Right       ");
    digitalWrite(fan, LOW);
    lcd.setCursor(15, 0);
  lcd.print("_");
  }
  {
    if(t<=25)
    
    {//lcd.setCursor(0, 0);
    //lcd.print("It's Freezing");}
    digitalWrite(fan, LOW);}
 
  }

Second question. I'm using the DHT 11 sensor, the temp is only shown in single 1c units, no decimal.. Im using the library from Using a DHTxx Sensor | DHT11, DHT22 and AM2302 Sensors | Adafruit Learning System

thanks for any help

Hackdub:
I'm building a simple fan controller...I want the fan to switch on at 27c and go off at 25c, hence creating a 2c hysteresis..

at the moment with the code below the fan goes on off around 27.... is this due to the else command .. Yes
do I create a >27 and <25 scenarios and put the else between?
Just have a >=27 and <=25 with no else condition.

Second question. I'm using the DHT 11 sensor, the temp is only shown in single 1c units, no decimal.. Im using the library from Using a DHTxx Sensor | DHT11, DHT22 and AM2302 Sensors | Adafruit Learning System
You don't show code for this but your probably using int instead of float and loosing the .x part.

Ok so code

{
    if(t>=27)
    {
    digitalWrite(fan, HIGH);
    lcd.setCursor(15, 0);
    lcd.print("F");}
  
    if(t<=25)
    {digitalWrite(fan, LOW);}
 
  }

Code for reading sensor = I'm using float, but it only shows in 1c increments.

float h = dht.readHumidity();
  float t = dht.readTemperature();
  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } 
  else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print("  %   ");
    Serial.print("Temp: "); 
    Serial.print(t);
    Serial.println("C");
  }


  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(8, 1);
  lcd.print("H:");
  lcd.print(h);
  lcd.print("%");
  //delay(2000);
  lcd.setCursor(0, 1);
  lcd.print("T:");
  lcd.print(t);
  //lcd.print("C");
  //delay(2000);

  {
    if(t>=25)
    {//lcd.setCursor(0, 0);
    //lcd.print("* hot *  ");
    digitalWrite(fan, HIGH);
    lcd.setCursor(15, 0);
  lcd.print("F");}
  else
    {//lcd.setCursor(0, 0);
   // lcd.print("  Just Right       ");
    digitalWrite(fan, LOW);
    lcd.setCursor(15, 0);
  lcd.print("_");
  }
  {
    if(t<=23)
    
    {//lcd.setCursor(0, 0);
    //lcd.print("It's Freezing");}
    digitalWrite(fan, LOW);}
 
  }

You must make use of the auto format option on the IDE. It makes code so much more readable. (And helps keep PaulS at bay).

Mark

OK try again... still only reads in 1 deg c increments

void loop()
{

  float h = dht.readHumidity();
  float t = dht.readTemperature();
  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  } 
  else {
    Serial.print("Humidity: "); 
    Serial.print(h);
    Serial.print("  %   ");
    Serial.print("Temp: "); 
    Serial.print(t);
    Serial.println("C");
  }


  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(8, 1);
  lcd.print("H:");
  lcd.print(h);
  lcd.print("%");
  //delay(2000);
  lcd.setCursor(0, 1);
  lcd.print("T:");
  lcd.print(t);
  //lcd.print("C");
  //delay(2000);


  if(t>=27)

  { 
    digitalWrite(fan, HIGH);
    lcd.setCursor(15, 0);
    lcd.print("F");
  }

  if(t<=25)

  { 
    digitalWrite(fan, LOW);
    lcd.setCursor(15, 0);
    lcd.print("_");
  }

Did you set the DHT type in the library as stated in the Adafruit tutorial you linked to and what readout do you get if you use the example sketch included in the Adafruit library download?

yes.. set as dht 11

and when using example just get it as 1 degress c increments.

i think there example shown on website , is using the dht22... not sure if that matters.

ive looked at the library files and cant see if thats the issue.

ive looked at the library files and cant see if thats the issue.

It is.

case DHT11:
      f = data[2];

f is the float temp read, but the data array is declared as uint8_t, so it will always be a whole number.

Using Google translate on the datasheet and it looks like the DHT-11 is scaled to 1 degree values.

Parameter Condition Min Typ Max Units
Temperature          1   1   1  C
Resolution           8   8   8  Bit
Repeatability of ± 1 C
Accuracy of ± 1 ± 2 C

So looks like I'm stuck with 1 deg c unless I change to dht22?

thanks for the help so far BTW

The English version gives a resolution of 0.1 degrees C.

Mark