#include <DHT.h>

// Definiciones de pines
const int trigPin = 5;  // Pin GPIO5
const int echoPin = 18; // Pin GPIO18
const int dhtPin = 15;  // Pin GPIO15
const int buzzerPin = 4; // Pin GPIO4
const int ledPin = 2;   // Pin GPIO2

// Configuración del sensor DHT22
#define DHTTYPE DHT22
DHT dht(dhtPin, DHTTYPE);

// Variables para tiempo y distancia
long duration;
float distance;

void setup() {
  // Configuración de los pines
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  pinMode(ledPin, OUTPUT);

  // Inicialización del sensor DHT22 y la comunicación serial
  dht.begin();
  Serial.begin(115200);
}

void loop() {
  // Medición de distancia
  distance = medirDistancia();
  Serial.print("Distancia: ");
  Serial.print(distance);
  Serial.println(" cm");

  if (distance < 200) {
    activarBuzzer(1000);
    Serial.println("¡Estás muy cerca de golpearte!");
  } else {
    digitalWrite(buzzerPin, LOW);
    Serial.println("Estás a una buena distancia");
  }

  Serial.println("_________________________________________________________________");

  // Medición de temperatura
  float temp = dht.readTemperature();

  if (!isnan(temp)) {
    Serial.print("Temperatura: ");
    Serial.print(temp);
    Serial.println(" °C");

    if (temp > 40) {
      digitalWrite(ledPin, HIGH); // Enciende el LED
      Serial.println("Temperatura muy alta, ¡Peligro!");
    } else {
      digitalWrite(ledPin, LOW); // Apaga el LED
      Serial.println("Temperatura en su nivel");
    }
  } else {
    Serial.println("Error al leer la temperatura");
  }

  Serial.println("_________________________________________________________________");

  // Pausa antes de la siguiente iteración
  delay(10000); // 10 segundos
}

// Función para medir la distancia usando el sensor ultrasónico
float medirDistancia() {
  // Enviar el pulso de disparo
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // Leer la duración del eco
  duration = pulseIn(echoPin, HIGH);

  // Calcular la distancia en cm
  float distancia = (duration * 0.0343) / 2;
  return distancia;
}

// Función para activar el buzzer
void activarBuzzer(int duracion) {
  digitalWrite(buzzerPin, HIGH);
  delay(duracion);
  digitalWrite(buzzerPin, LOW);
  delay(duracion);
}
$abcdeabcde151015202530354045505560fghijfghij