//jhoan's code
///control lcd i2c
#include "DHTesp.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Ticker.h>
LiquidCrystal_I2C lcd(0x27, 16,2);
/////////
int ECHO = 35;
int TRIG = 32;
int PIR = 25;
int fotoR = 13;
int Dht = 15;
int DISTANCIA=0;
/////dht22
int pinDHT = 15;
DHTesp dht;
///pulsador
int boton = 18;
int pulsos = 0;
int presion;
//interruptores
int ON_pir = 26, ON_HR= 27, ON_dht22 = 14, ON_foto= 13;
//variables
int pirON,dht_ON,presencia,ht_sr04,LDR_ON;
//fotoresistor
int foto_resitorAO = 2;
int foto_digital = 4, digital;
const float GAMMA = 0.7;
const float RL10 = 50;
long readUltrasonicDistance(int trigger, int echoPin){
digitalWrite(trigger, LOW);
pinMode(trigger,OUTPUT);
delayMicroseconds(2);
digitalWrite(trigger, HIGH);
delayMicroseconds(10);
digitalWrite(trigger, LOW);
pinMode(echoPin, INPUT);
return pulseIn(echoPin,HIGH);
}
Ticker bucle;
Ticker pulsaciones;
void setup() {
Serial.begin(115200);
Wire.begin();
lcd.init();
lcd.backlight();
Serial.println("inicio de lectura");
Serial.println("-----");
dht.setup(Dht, DHTesp::DHT22 );
pinMode(ON_dht22, INPUT);
pinMode(PIR, INPUT);
pinMode(ON_pir, INPUT);
pinMode(foto_resitorAO, INPUT);
pinMode(foto_digital, INPUT);
//boton
pinMode(boton, INPUT_PULLUP);
lcd.setCursor(0, 0);
lcd.print("Encendido!");
delay(1000);
lcd.clear();
lcd.setCursor(1,1);
lcd.print("presiona para ver las variables");
delay(500);
bucle.attach(1,inicioLcd);
pulsaciones.attach(0.05,conteoPulsos);
}
void inicioLcd(){
for(int r=0;r < 16; r++ ){
delay(300);
lcd.scrollDisplayLeft();}
for(int r=0;r < 32; r++ ){
delay(300);
lcd.scrollDisplayRight();}
}
void conteoPulsos(){
presion = digitalRead(boton);
if(presion==LOW){
pulsos++;
Serial.println(pulsos);
delay(300);
}
if(pulsos>5){
pulsos=0;
}
}
void loop() {
TempAndHumidity data = dht.getTempAndHumidity();
int analogValue = analogRead(foto_resitorAO);
float voltage = analogValue / 4095. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
DISTANCIA =0.01723 * readUltrasonicDistance(TRIG, ECHO);
switch(pulsos){
case 1:
bucle.detach();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp:");
lcd.print(data.temperature, 2);
lcd.print("°C");
lcd.setCursor(0,1);
lcd.print("Humedad:");
lcd.print(data.humidity,1);
lcd.print("%");
break;
case 2:
lcd.clear();
lcd.setCursor(0,0);
lcd.print("movimiento:");
lcd.print(presencia);
break;
}
dht_ON=digitalRead(ON_dht22);
if(dht_ON==1){
//Mostramos los datos de la temperatura y humedad
Serial.println("Temperatura: " + String(data.temperature, 2) + "°C");
Serial.println("Humedad: " + String(data.humidity, 1) + "%");
Serial.println("---");
delay(1000);
}
if(dht_ON==0){
Serial.println("sensor DHT22 apagado");
Serial.println("---");
delay(1000);
// bucle.detach();
// lcd.clear();
// lcd.setCursor(0,0);
// lcd.print("Temp:");
// lcd.print(data.temperature, 2);
// lcd.print("°C");
// lcd.setCursor(0,1);
// lcd.print("Humedad:");
// lcd.print(data.humidity,1);
// lcd.print("%");
}
/////////// sensor PIR
presencia=digitalRead(PIR);
pirON=digitalRead(ON_pir);
if(pirON==1)
{
if(presencia==1){Serial.println("PIR = hay movimiento!");
Serial.println("---");
delay(1000);}
if(presencia==0){Serial.println("PIR = no hay movimiento");
Serial.println("---");
delay(1000);}
}
else{Serial.println("sensor PIR apagado");
Serial.println("---");
delay(1000);
// bucle.detach();
// lcd.clear();
// lcd.setCursor(0,0);
// lcd.print("movimiento:");
// lcd.print(presencia);
}
///////////sensor ultrasonico
ht_sr04=digitalRead(ON_HR);
if(ht_sr04==1){
DISTANCIA =0.01723 * readUltrasonicDistance(TRIG, ECHO);
Serial.print("distancia:");
Serial.println(DISTANCIA);
Serial.println("---");
delay(1000);
}
else{Serial.println("sensor HC-SR04 apagado");
Serial.println("---");
delay(1000);
}
///////FOTORESISTENCIA(modulo)
LDR_ON= digitalRead(ON_foto);
if(LDR_ON==1){
Serial.print("lux:");
Serial.println(lux);
Serial.println("---");
delay(1000);
//parte digital
digital=digitalRead(foto_digital);
if(digital==0){
Serial.println("hay luz!");
Serial.println("---");
delay(1000);
}else{Serial.println("oscuridad!");
Serial.println("---");
delay(1000);}
}else{Serial.println("sensor LDR apagado");
Serial.println("---");
delay(1000);
}
}