#include <DHT.h>
#include <LiquidCrystal.h>

#define DHT_PIN A0
#define DHT_TYPE DHT22

#define STEP 4        
#define DIR 3    
#define LDR_ANALOG_PIN A1

LiquidCrystal lcd(12, 11, 13, 6, 1, 0); // RS, E, D4, D5, D6, D7


int boton = 8;
int boton2 = 7;
int TRIG = 10;
int ECHO = 9;
int BUZZER = 5; 
int LED_BLUE = 2;

//garaje
boolean flagBoton1 = true;
boolean flagBoton2 = false;

void printGarageStatus() {
  lcd.clear();
  lcd.setCursor(0, 0);
  if (flagBoton2) {
    lcd.print("Subiendo");
  } else {
    lcd.print("Bajando ");
  }
}

DHT dht(DHT_PIN, DHT_TYPE);

void setup() 
{
  pinMode(STEP, OUTPUT);  
  pinMode(DIR, OUTPUT);  
  pinMode(boton, INPUT);   
  pinMode(boton2, INPUT);
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
  pinMode(BUZZER, OUTPUT);
  pinMode(LED_BLUE, OUTPUT);
  pinMode(LDR_ANALOG_PIN, INPUT);  
  lcd.begin(16, 2); // Inicializa el LCD con 16 columnas y 2 filas
  dht.begin();
}

void loop() 
 {
  boton = digitalRead(8);
  digitalWrite(TRIG, HIGH);
  delay(1);
  digitalWrite(TRIG, LOW);

  
//GARAJE
  //BAJAR
  if(boton==true && flagBoton1 == true){ 
    printGarageStatus();
    digitalWrite(DIR, HIGH);  
     for(int i = 0; i < 100; i++){  
      digitalWrite(STEP, HIGH);     
      delay(10);           
      digitalWrite(STEP, LOW);    
      delay(10);            
      flagBoton1 = false;
      flagBoton2 = true;
     }
    delay(2000);              
  }

  boton2 = digitalRead(7);

  //SUBIR
  if(boton2==true && flagBoton2 == true){ 
      printGarageStatus();
      digitalWrite(DIR, LOW);  
      for(int i = 0; i < 100; i++){
       digitalWrite(STEP, HIGH); 
       delay(10);
       digitalWrite(STEP, LOW);
       delay(10);
      flagBoton1 = true;
      flagBoton2 = false;
      }
      delay(2000);          
    }

//MEDIDOR DISTANCIA
  float duration = pulseIn(ECHO, HIGH);
  float distance = duration * 0.034 / 2;  
  if (distance <= 10 && distance > 0) {
    tone(BUZZER, 1000);
    delay(200);
    noTone(BUZZER);
  }
    lcd.setCursor(9, 0);
    lcd.print("D: ");
    lcd.print(distance);
    lcd.print(" cm");
 
//MEDIDOR TEMP y HUM
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  lcd.setCursor(0, 0);
  lcd.print("T: ");
  lcd.print(temperature);
 
  lcd.setCursor(0, 2);
  lcd.print("H: ");
  lcd.print(humidity);
  lcd.print("% ");

//FOTORRESISTENCIA
  int ldrAnalogValue = analogRead(LDR_ANALOG_PIN);  

  if (ldrAnalogValue < 500) {  
      digitalWrite(LED_BLUE, LOW);
      lcd.setCursor(11, 1);
      lcd.print("Dia  ");
  } else {
      digitalWrite(LED_BLUE, HIGH);
      digitalWrite(LED_BLUE, LOW);
      lcd.setCursor(11, 1);
      lcd.print("Noche");

  }
 }
$abcdeabcde151015202530354045505560fghijfghij
A4988