No veo nada incorrecto, podrias llegar a sacar esos comentarios y jutar el if con el elseif asi se entiende un poco mas.
Aca estamos hablando de un control ON/OFF, pero tranquilamente podrias crear una funcion que te devuelva un valor de PWM segun la temperatura. Ejemplo...
Si tenes 160 a 30ºC y 320 a 50ºC
Con una formula asi:
PWM = 8*Temp - 80;Cuando tenes 30 en Temp te queda 160.
Luego si vas a tener que limitarlo, ya que si observas, cuando tengas 10ºC vas a tener 0 PWM, asi que por ejemplo digamos que mas abajo de 15ºC no funcione directamente. Y si supera los 50 que siga fijo.
Es decir teniendo los siguientes valores:
set_temp_min = 15
set_temp_max = 50Usar este codigo:
while(true) // infinite loop
{
digital_reading = read_adc(); // capture current temperature reading
Temp = digital_reading * 0.4883; // convert reading to Celsius
if(temp <= set_temp_min ) // si temp es menor a 15º
{
//Parar todo o pensar que esta roto el LM35.
d=0; //al 0%
}
else if(temp >= set_temp_max) // si temp es + que set_temp (50°) cooler al 100%
{
d=320; // al 100%
}
else
{
d = 8*Temp - 80;
}
set_pwm1_duty(d);
delay_ms(1000); // 1 second delay between readings
}
Quite todos los comentarios, quite el delay despues de la lectura, ya que ahora SI o SI hay un delay de 1 segundo en el camino.