#include <Arduino.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
// Frecuencias correspondientes a las notas musicales
#define E5 659
#define C5 523
#define G5 784
#define G4 392
#define E4 330
#define A4 440
#define B4 466
#define Bb4 466
#define DHT_PIN 27 // Pin GPIO al que está conectado el pin de datos del DHT22
#define DHT_TYPE DHT22 // Tipo de sensor DHT (puede ser DHT11 o DHT22)
DHT dht(DHT_PIN, DHT_TYPE);
const int pinAltavoz = 5; // Elige el pin GPIO al que está conectado el altavoz
const float temperaturaDeseada = 25.0; // Temperatura deseada en grados Celsius
const unsigned long tiempoLimite = 2000; // Tiempo límite en milisegundos (ejemplo: 1 minuto)
unsigned long tiempoInicio;
bool alarmaActivada = true;
void setup() {
pinMode(pinAltavoz, OUTPUT);
digitalWrite(pinAltavoz, LOW);
}
void loop() {
// Realiza la lectura de la temperatura (podría ser desde un sensor)
float temperaturaActual = leerTemperatura();
// if (temperaturaActual >= temperaturaDeseada || millis()-tiempoInicio>=tiempoLimite) {
if (temperaturaActual >= temperaturaDeseada ) {
// Ejemplo de encender el sonido durante 1 segundo
encenderSonido(1000);
// delay(5000); // Espera 5 segundos antes de volver a encender el sonido
delay(50); // Añadir un pequeño espacio entre las notas
}
}
void encenderSonido(unsigned long duracion) {
// tone(pinAltavoz, 1000); // Frecuencia del tono (ejemplo: 1000 Hz)
// delay(duracion);
// noTone(pinAltavoz); // Detener el tono
// Frecuencias correspondientes a las notas musicales
int melody[] = {E5, E5, 0, E5, 0, C5, E5, 0, G5, 0, 0, 0, G4, 0, 0, 0,
C5, 0, 0, G4, 0, 0, E4, 0, 0, A4, 0, B4, 0, Bb4, A4};
// Duraciones de las notas (en milisegundos)
int noteDurations[] = {8, 8, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4, 4,
8, 4, 4, 8, 4, 4, 8, 4, 4, 8, 4, 4, 4, 4, 4};
for (int i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) {
int noteDuration = 1000 / noteDurations[i];
tone(pinAltavoz, melody[i], noteDuration);
delay(noteDuration * 1.1); // Añadir un pequeño espacio entre las notas
noTone(pinAltavoz);
// delay(50); // Añadir un pequeño espacio entre las notas
}
}
float leerTemperatura() {
// Código para leer la temperatura (puedes ajustar según tus necesidades)
// Devuelve un valor simulado en este ejemplo, deberías reemplazarlo con la lógica real de lectura de temperatura.
float temperatura = dht.readTemperature(); // Lee la temperatura en grados Celsius
// float humedad = dht.readHumidity(); // Lee la humedad relativa en porcentaje
if(temperatura>0){
return temperatura;
}else{
return 23.0;
}
}