/****************** Arduino SPI with DHT22 and UltraSonic ******************/
/****************** LiquidCrystal_I2C 4 x 20 **********************************/
#include "SPI.h"
// DHT lib
#include <Adafruit_Sensor.h>
#include <DHT.h>
// DHT22
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
//Variables
//float hum; //Stores humidity value
float temp; //Stores temperature value
float dis;
float converted = 0.00;
// Sonic Sensor
#define ECHO_PIN 4
#define TRIG_PIN 3
#define G 12
#define R 8
const int buttonPin = 13;
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
// https://maxpromer.github.io/LCD-Character-Creator/
byte smileFace[] = {0x00,0x00,0x1B,0x1B,0x00,0x11,0x0E,0x00};
byte sadFace[] = {0x00,0x00,0x1B,0x1B,0x00,0x00,0x0E,0x11};
void setup()
{
// initialize the lcd
lcd.init();
// Create face
lcd.createChar(7, smileFace);
lcd.createChar(6, sadFace);
// Initialize device.
dht.begin();
// Sonic
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(G, OUTPUT);
pinMode(R, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
//printHeader();
}
void loop()
{if (digitalRead(buttonPin) == LOW) {
//Read data and store it to variables hum and temp
//hum = dht.readHumidity();
temp= dht.readTemperature();
if ((temp > 32.0) && (temp < 37.0))
{
digitalWrite(G, HIGH);
digitalWrite(R, LOW);
}
else {
digitalWrite(R, HIGH);
digitalWrite(G, LOW);
}
printSensorData();
printReactionFace();
printHeader( );}
}
//Print headers
void printHeader( )
{
lcd.backlight();
lcd.setCursor(1,0);
lcd.print("CELCIUS");
lcd.setCursor(1,1);
lcd.print("KELVIN");
//lcd.setCursor(1,2);
//lcd.print("HUMIDITY");
lcd.setCursor(1,3);
lcd.print("DISTANCE");
}
void printReactionFace()
{
lcd.setCursor(10,0);
(temp < 40.0)
? lcd.write(6)
: lcd.write(7);
lcd.setCursor(10,1);
(converted < 273.15)
? lcd.write(6)
: lcd.write(7);
// lcd.setCursor(10,2);
// (hum < 20)
// ? lcd.write(6)
// : lcd.write(7);
lcd.setCursor(10,3);
(dis < 3.0)
? lcd.write(6)
: lcd.write(7);
}
void printSensorData()
{ //lcd.backlight();
//lcd.setCursor(1,0);
//lcd.print("CELCIUS");
lcd.setCursor(12, 0);
lcd.print(temp);
lcd.setCursor(20 - 3, 0);
lcd.print((char)223);
lcd.println("C");
// Kelvin
// T(K) = T(°C) + 273.15
converted = temp + 273.15;
lcd.setCursor(1,1);
// lcd.print("KELVIN");
//lcd.setCursor(1,2);
lcd.setCursor(12, 1);
lcd.print(converted);
lcd.setCursor(20 - 3, 1);
lcd.println("K");
// Humidity
//lcd.setCursor(12, 2);
//lcd.print(hum);
// lcd.setCursor(20 - 3, 2);
// lcd.println("%");
// Distance
dis = readDistanceCM();
lcd.setCursor(12, 3);
lcd.print(dis);
lcd.setCursor(20 - 3, 3);
lcd.println("cm");
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}