Hola, qué tal. Estoy realizando un proyecto con las especificaciones del tema. El detalle es el siguiente:
Si la temperatura es entre 40 y 50 grados: encender el motor
Si la temperatura está entre 1 y 20: encender bombillo
El problema es que no me está dando las salidas en los pines RB0 Y RB1 cuando llego a esos grados (Estoy usando el LM35).
Este es mi código:
#INCLUDE <16F887.h>
#DEVICE ADC=10
#DEVICE *=16
#USE DELAY(CLOCK=4000000)
#FUSES NOWDT //No Watch Dog Tim
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //No brownout reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES XT
#include "lcd.c" // libreria lcd
VOID main(){
int16 tempdigital;
FLOAT temperatura;
lcd_init(); // Activa lcd
lcd_gotoxy(1,1); // columna 1 renglon 1
lcd_putc("Temperatura:"); //
setup_adc_ports(sAN0|VSS_VDD); // AN0 como entrada analogica
setup_adc(adc_clock_internal);
setup_counters(RTCC_internal,rtcc_div_1);
set_adc_channel(0); //Seleccionar Canal 0 para sensor de Temperatura
while(true){
tempdigital=read_adc(); //Leer ADC
temperatura=150*tempdigital/1024.0; //Escalizar señal de salida temperatura
lcd_gotoxy(1,2); // cursor en columna 1 renglon 2
printf(lcd_putc,"%2f C",temperatura);
delay_ms(100); //Periodo de actualizacion lectura
if (temperatura>=40&&temperatura<=50)
{
output_high(pin_b0);
output_low(pin_b1);
lcd_gotoxy(5,2);
printf(lcd_putc,"Motor encendido");
delay_ms(200);
}
if(temperatura>=1&&temperatura<=20)
output_low(pin_b0);
output_high(pin_b1);
lcd_gotoxy(5,2);
printf(lcd_putc, "Foco encendido");
delay_ms(200);
}
}