#include <LiquidCrystal.h> //para la LCD
#include <DHT.h> //para el sensor de temp y hum
#define DHTTYPE DHT11 //sensor de temp y hum
#define DHTPIN A4 //se dice donde se encuentra conectado el sensor
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); //se dice donde está conectada la LCD
//se definen estados
typedef enum estados{s0, s1, s2, s3, s4, s5, s6, s7} estados;
estados estadoActual = s0;
estados estadoFuturo = s0;
const long interval = 500;
unsigned long previousMillis = 0;
//ubicación de los botones
int b1 = 6;
int b2 = 5;
int b3 = 4;
int b4 = 2;
//ubicación de las leds
int led1 = A0;
int led2 = A1;
int led3 = A2;
int led4 = A3;
//ubicación motor
int motor = 3;
void setup() {
dht.begin(); //se inicia el sensor
//se inicia la LCD
lcd.begin(16,2); //número de columnas y filas en la LCD
lcd.print("Hello world!");
delay(1000); //delay de 1 seg
lcd.setCursor(0,0); //se dice donde se quiere iniciar a escribir en la LCD
lcd.print("Menu: ");
delay(2000); //delay de 2 seg
//se nombra los pines de entradas y salidas
pinMode(b1, INPUT_PULLUP);
pinMode(b2, INPUT_PULLUP);
pinMode(b3, INPUT_PULLUP);
pinMode(b4, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}
void loop(){
bool estado1 = !digitalRead(b1);
bool estado2 = !digitalRead(b2);
bool estado3 = !digitalRead(b3);
bool estado4 = !digitalRead(b4);
//se nombran las variables de temp y hum obtenidas del sensor
float h = dht.readHumidity();
float t = dht.readTemperature();
switch(estadoActual){
case s0:
if(estado1 == HIGH)
estadoFuturo = s1;
if(estado2 == HIGH)
estadoFuturo = s2;
if(estado3 == HIGH)
estadoFuturo = s3;
if(estado4 == HIGH)
estadoFuturo = s4;
else
estadoFuturo = s0;
break;
case s1:
delay(2000);
estadoFuturo = s0;
break;
case s2:
delay(2000);
estadoFuturo = s0;
break;
case s3:
delay(2000);
estadoFuturo = s0;
break;
case s4:
if(estado4 == HIGH)
estadoFuturo = s5;
else
estadoFuturo = s4;
break;
case s5:
if(estado4 == HIGH)
estadoFuturo = s6;
else
estadoFuturo = s5;
break;
case s6:
if(estado4 == HIGH)
estadoFuturo = s7;
else
estadoFuturo = s6;
break;
case s7:
if(estado4 == HIGH)
estadoFuturo = s0;
else
estadoFuturo = s7;
break;
}
switch(estadoActual){
case s0: //se escribe el menú
lcd.setCursor(0,0);
lcd.print("1.Temp ");
lcd.setCursor(0,1);
lcd.print("2.Hum ");
lcd.setCursor(8,0);
lcd.print("3.T y H ");
lcd.setCursor(8,1);
lcd.print("4.Fan ");
//analogWrite(motor,50);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
break;
case s1: //medir temperatura
lcd.setCursor(0,0);
lcd.print("Temp es de: ");
lcd.setCursor(0,1);
lcd.print(t);
lcd.setCursor(5,1);
lcd.print(" C ");
delay(100);
break;
case s2: //medir humedad
lcd.setCursor(0,0);
lcd.print("Hum es de: ");
lcd.setCursor(0,1);
lcd.print(h);
lcd.setCursor(5,1);
lcd.print("% ");
delay(100);
break;
case s3: //medir humedad y temp
lcd.setCursor(0,0);
lcd.print("Temp es de: ");
lcd.setCursor(0,12);
lcd.print(t);
lcd.setCursor(0,1);
lcd.print("Hum es de: ");
lcd.setCursor(11,1);
lcd.print(h);
delay(100);
break;
case s4:
// analogWrite(motor, 120);
//analogWrite(motor,50);
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
break;
case s5:
//analogWrite(motor, 150);
//analogWrite(motor,60);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
break;
case s6:
//analogWrite(motor, 175);
//analogWrite(motor,80);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
break;
case s7:
//analogWrite(motor, 255);
//analogWrite(motor,100);
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
break;
}
unsigned long currentMillis = millis();
if(currentMillis-previousMillis >= interval){
estadoActual = estadoFuturo;
previousMillis = currentMillis;
}
delay(1);
}