#include <LiquidCrystal.h>
#include <dht.h>
dht DHT;
#define DHT22_PIN 5
#define COOLER_PIN 2
#define HEATER_PIN 3
struct {
uint32_t total;
uint32_t ok;
uint32_t crc_error;
uint32_t time_out;
uint32_t connect;
uint32_t ack_l;
uint32_t ack_h;
uint32_t unknown;
} stat = { 0, 0, 0, 0, 0, 0, 0, 0};
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
void setup() {
lcd.begin(16, 2);
lcd.print("Temperature:");
Serial.begin(115200);
Serial.println("dht22_test.ino");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT_LIB_VERSION);
Serial.println();
Serial.println("Type,\tstatus,\tHumidity (%),\tTemperature (C)\tTime (us)");
pinMode(COOLER_PIN, OUTPUT);
pinMode(HEATER_PIN, OUTPUT);
}
void loop() {
float temp = 16;
int increment = 1; // 1 for increasing temperature, -1 for decreasing temperature
while (true) {
lcd.setCursor(0, 1); // Set cursor to the second line
lcd.print(" "); // Clear previous temperature value
Serial.print("DHT22, \t");
uint32_t start = micros();
// Simulated temperature change
// Change this value to simulate different temperatures
DHT.temperature = temp; // Set temperature to the incremented value
int chk = DHTLIB_OK; // Simulate successful reading
uint32_t stop = micros();
stat.total++;
switch (chk)
{
case DHTLIB_OK:
stat.ok++;
Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
stat.crc_error++;
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
stat.time_out++;
Serial.print("Time out error,\t");
break;
case DHTLIB_ERROR_CONNECT:
stat.connect++;
Serial.print("Connect error,\t");
break;
case DHTLIB_ERROR_ACK_L:
stat.ack_l++;
Serial.print("Ack Low error,\t");
break;
case DHTLIB_ERROR_ACK_H:
stat.ack_h++;
Serial.print("Ack High error,\t");
break;
default:
stat.unknown++;
Serial.print("Unknown error,\t");
break;
}
// DISPLAY DATA
Serial.print(DHT.humidity, 1);
Serial.print(",\t");
Serial.print(DHT.temperature, 1);
Serial.print(",\t");
Serial.print(stop - start);
Serial.println();
// Print temperature on LCD
lcd.setCursor(0, 1); // Set cursor to the second line
lcd.print("Temp: ");
lcd.print(DHT.temperature, 1);
lcd.print(" C");
// Default behavior for cooler and heater
if (DHT.temperature > 25) {
digitalWrite(COOLER_PIN, HIGH);
digitalWrite(HEATER_PIN, LOW);
lcd.setCursor(0, 0);
lcd.print("Cooler enabled ");
} else if (DHT.temperature < 20) {
digitalWrite(COOLER_PIN, LOW);
digitalWrite(HEATER_PIN, HIGH);
lcd.setCursor(0, 0);
lcd.print("Heater enabled ");
} else {
digitalWrite(COOLER_PIN, LOW);
digitalWrite(HEATER_PIN, LOW);
lcd.setCursor(0, 0);
lcd.print(" Normal Temp ");
}
// Increment or decrement temperature
temp += increment;
// Change direction if reaching boundaries
if (temp >= 29 || temp <= 16) {
increment *= -1;
}
if (stat.total % 20 == 0)
{
Serial.println("\nTOT\tOK\tCRC\tTO\tCON\tACK_L\tACK_H\tUNK");
Serial.print(stat.total);
Serial.print("\t");
Serial.print(stat.ok);
Serial.print("\t");
Serial.print(stat.crc_error);
Serial.print("\t");
Serial.print(stat.time_out);
Serial.print("\t");
Serial.print(stat.connect);
Serial.print("\t");
Serial.print(stat.ack_l);
Serial.print("\t");
Serial.print(stat.ack_h);
Serial.print("\t");
Serial.print(stat.unknown);
Serial.println("\n");
}
delay(2000); // Wait for 2 seconds
}
}
//code for Niko Melikidze