#include "DHT.h"
#include <Wire.h>
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#define LDR A0
#define DHTPIN 12 // Digital pin connected to the DHT sensor
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
#define LED_G 4
#define LED_R 15
#define LED_Y 5
#define BUZZ_PIN 14
#define PIR_SENSOR 13
#define POT_PIN A0
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define TIME_DELAY 2000
#define OLED_RESET -1
int warm_up;
bool objeto_detectado = false;
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(PIR_SENSOR, INPUT);
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(LED_Y, OUTPUT);
pinMode(BUZZ_PIN, OUTPUT);
dht.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(TIME_DELAY);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("IoT Bloque ENESJ");
display.display();
Serial.println("Esperando a que inicie el sensor PIR");
//delay(TIME_DELAY * 5);
delay(TIME_DELAY);
Serial.println("Listo");
}
void loop() {
int salida_sensor = digitalRead(PIR_SENSOR);
if( salida_sensor == LOW ){
if( warm_up == 1){
Serial.print("Calentando\n");
warm_up = 0;
delay(2000);
}
//Serial.print("Objeto no detectado\n");
objeto_detectado = false;
delay(500);
}
else{
//Serial.print("Objeto detectado\n");
objeto_detectado = true;
warm_up = 1;
delay(500);
}
if(objeto_detectado){
int raw = analogRead(LDR);
int lux = map(raw, 32, 4063, 100000, 0.1);
float h = dht.readHumidity();
// Read temperature as Celsius (the default)
float t = dht.readTemperature();
// Read temperature as Fahrenheit (isFahrenheit = true)
float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again).
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
else {
display.clearDisplay();
display.setCursor(0, 0);
display.print("Lux: ");
display.println(lux);
display.setCursor(0, 20);
display.print("Humidity: ");
display.print(h);
display.println("%");
display.setCursor(0, 40);
display.print("Temp: ");
display.print(t);
display.print((char)0176);
display.println("C");
display.display();
}
if( 15 < t && t < 20 ){
digitalWrite(LED_G, HIGH);
digitalWrite(LED_Y, LOW);
digitalWrite(LED_R, LOW);
digitalWrite(BUZZ_PIN, LOW);
}
else if( 20 <= t && t < 28 ){
digitalWrite(LED_Y, HIGH);
digitalWrite(LED_G, LOW);
digitalWrite(LED_R, LOW);
digitalWrite(BUZZ_PIN, LOW);
}
else if( t >= 28 ){
digitalWrite(LED_R, HIGH);
digitalWrite(LED_Y, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(BUZZ_PIN, HIGH);
}
else {
digitalWrite(LED_R, LOW);
digitalWrite(LED_Y, LOW);
digitalWrite(LED_G, LOW);
digitalWrite(BUZZ_PIN, LOW);
}
}
// Wait a few seconds between measurements.
delay(2000);
}