#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
DHTesp dht;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// lecturas
const int pot = 35;
const int tem = 14;
int temperatura;
const int luz = 32;
const float GAMMA = 0.7;
const float RL10 = 50;
byte degreeSymbol[8] = {
B01110,
B01010,
B01110,
B00000,
B00000,
B00000,
B00000,
B00000
};
// boton
const int BUTTON = 12;
volatile bool buttonPressed = false;
volatile unsigned long buttonPressStartTime = 0;
unsigned long elapsedTime;
unsigned long lastPrintTime = 0;
bool x = false;
bool y = false;
bool t = false;
bool l = false;
bool p = false;
void buttonInterrupt() {
if (digitalRead(BUTTON) == HIGH) {
buttonPressed = true;
buttonPressStartTime = millis();
} else {
buttonPressed = false;
}
}
void setup() {
// put your setup code here, to run once
Serial.begin(115200);
Wire.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Datos: ");
lcd.createChar(0, degreeSymbol);
pinMode(pot, INPUT);
pinMode(luz, INPUT);
pinMode(BUTTON, OUTPUT);
dht.setup(tem, DHTesp::DHT22);
attachInterrupt(digitalPinToInterrupt(BUTTON), buttonInterrupt, CHANGE);
}
void potenciometro(){
}
void loop() {
//lectura del boton //////////////////////////////////////////////////////////////
if (buttonPressed) {
elapsedTime = millis() - buttonPressStartTime;
unsigned long currentTime = millis();
if (currentTime - lastPrintTime >= 20){
Serial.println(elapsedTime);
lastPrintTime = currentTime;
}
}
//temperatura ////////////////////////////////////////////////////////////////////////
if (elapsedTime >= 20 && elapsedTime < 1000 && buttonPressed == LOW && y == false){
lcd.setCursor(0,1);
lcd.print(" ");
noInterrupts();
l = false;
y = true;
x = false;
t = true;
p = false;
elapsedTime = 0;
interrupts();
}
if (t == true){
TempAndHumidity data = dht.getTempAndHumidity();
Serial.println("temperatura");
int temperatura = data.temperature;
lcd.setCursor(13,1);
lcd.write((uint8_t)0);
lcd.setCursor(0,1);
lcd.print("temp : " ) ;
lcd.setCursor(7,1);
lcd.print( String(data.temperature, 2) );
lcd.print(" ");
lcd.setCursor(14,1);
lcd.print("C" ) ;
}
//luz /////////////////////////////////////////////////////////////////////////////
if (elapsedTime >= 20 && elapsedTime < 1000 && buttonPressed == LOW && y == true){
lcd.setCursor(0,1);
lcd.print(" ");
noInterrupts();
t = false;
y = false;
x = false;
l = true;
p = false;
elapsedTime = 0;
interrupts();
}
if (l == true){
Serial.println("luz");
int light = analogRead(luz);
float dato2 = light / 4095. * 5;
float resistance = 2000 * dato2 / (1 - dato2 / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
lcd.setCursor(0,1);
lcd.print("luz: ");
lcd.setCursor(5,1);
lcd.print(lux);
lcd.print(" ");
}
// voltage ///////////////////////////////////////////////////////////////////////////////////
if (elapsedTime >= 3000 && buttonPressed == LOW && x == false ){
lcd.setCursor(0,1);
lcd.print(" ");
noInterrupts();
t = false;
l = false;
p = true;
x = true;
elapsedTime = 0;
interrupts();
}
if(p == true){
Serial.println("voltage");
int dato1 = analogRead(pot);
float voltage = map(dato1,0,4095,0,500);
voltage = voltage /100;
lcd.setCursor(0,1);
lcd.print("voltaje: ");
lcd.setCursor(10,1);
lcd.print(voltage);
lcd.setCursor(14,1);
lcd.print("V");
}
}