// No se incluye la librería LCD
// Variables
const int sensor = A0;
const int but1 = 8;
const int but2 = 9;
const int led1 = 11;
const int led2 = 12;
const int dicipador = 10;
const int buzz = 13;
int alarm = 100;
char tipo;
int valor;
int id = 0;
int dmemory = 75;
void setup() {
Serial.begin(9600);
pinMode(sensor, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(dicipador, OUTPUT);
pinMode(buzz, OUTPUT);
Serial.println("Presiona A_ para cambiar la alarma de temperatura");
}
void loop() {
int lectura = analogRead(sensor);
float voltaje = lectura * (5.0 / 1023.0);
float temperatura = (voltaje - 0.5) * 50.0;
Serial.print("Temp: ");
Serial.print(temperatura);
Serial.print(" C | Alarm: ");
Serial.println(alarm);
// Leer nuevo valor de alarma desde monitor serial
if (Serial.available()) {
tipo = Serial.read();
valor = Serial.parseInt();
}
if (tipo == 'A') {
alarm = valor;
Serial.print("Nuevo valor de alarma: ");
Serial.println(alarm);
}
// LED indicador verde
digitalWrite(led2, (temperatura <= alarm) ? HIGH : LOW);
// Buzzer y LED rojo por sobrecalentamiento
if (temperatura > alarm && temperatura < alarm * 1.5) {
tone(buzz, 1000);
digitalWrite(led1, HIGH);
delay(50);
noTone(buzz);
digitalWrite(led1, LOW);
} else if (temperatura >= alarm * 1.5) {
tone(buzz, 1000);
digitalWrite(led1, HIGH);
delay(500);
noTone(buzz);
digitalWrite(led1, LOW);
} else {
noTone(buzz);
digitalWrite(led1, LOW);
}
// Control del disipador
id = dmemory;
if (temperatura < alarm * 0.85) {
id = 191 * (temperatura / alarm);
analogWrite(dicipador, id);
} else if (temperatura > alarm) {
id = 1 + 191 * (temperatura - alarm);
analogWrite(dicipador, id);
} else {
analogWrite(dicipador, id);
}
delay(500); // Pequeño retardo para estabilidad
}