Hola compañeros programadores, en este dia me dispongo a realizar un nuevo proyecto, se que como novato no dispongo de la experiencia, así que les pido su ayuda y experiencia para poder solucionar un problema que tengo con este codigo que estoy realizando, estoy utilizando la plataforma de Pic c, para realizar un sistema invernadero, mi sistema dispone de los siguientes elementos, tres potenciometros, un lm35 y un yl 69(sensor de humedad) además de un sistema de iluminación, controlando la intensidad por medio de un potenciómetro, En este momento estoy utilizando varias entradas del adc, para poder realizar las conversiones de temperatura, y humedad, y aclaro antes de que se comente este detalle, soy demasiado novato y dispongo solo de los conocimientos del manual pic, y videotutoriales de youtube por lo que sé que mi codigo es más que insuficiente, aclarado eso

, con los potenciómetros me gustaría realizar dos parámetros para la temperatura y para el YL 69, este parámetro es un set, este set para el lm35 sería una temperatura introducida por el usuario y dependiendo si esta temperatura es mayor o menor, se activarán unos ventiladores, para que la temperatura disminuya y un foco incandescente para que la temperatura aumente, en el caso del yl si la humedad llega a un rango set, se activa una bomba sumergible.
prácticamente mi problema es al realizar el ciclo de comparación entre el set colocado por el usuario y la temperatura , ya que por la manera en que coloco mi ciclo . y tambien tengo problemas ya que no me quiere leer el último adc que ocupo, que es el de la intensidad luminosa. de la manera mas atenta les agradezco su ayuda y cualquier comentario es bien recibido, gracias y bonito día.
#include <16f877a.h>
#device adc=10
#fuses hs,nowdt
#use delay(clock=20M)
#define lcd_data_port getenv("sfr:portb")
#define lcd_rs_pin pin_b0
#define lcd_rw_pin pin_b1
#define lcd_enable_pin pin_b2
#include <lcd.c>
void main()
{
int16 t1,t3,s1,s3,l1;
float t2,t4,s2,s4,l2;
setup_adc_ports(all_analog);
setup_adc(adc_clock_internal);
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc, "Valor: Actual / Sets");
while(true)
{
set_adc_channel(0);
delay_us(20);
t1=read_adc();
t2=(5.0*t1)/1024.0;
t2=t2*100;
delay_us(50);
set_adc_channel(1);
delay_us(20);
t3=read_adc();
t4=(5.0*t3)/1024.0;
////// mi problema empieza aquí
if(t4<t2) /// entonces la temperatura disminuye
{
while(t4!=t2)
{
output_high(pin_b7);
delay_ms(3000);
}
}
else //temperratura aumente con el foco
{
while(t4!=t2)
{
output_high(pin_b7);
delay_ms(2000);
}
}
// en esta parte es el problema si la quito ya me imprime los prints, pero no se como colocar la comparacion
lcd_gotoxy(1,2);
printf(lcd_putc,"Temper %.0f C / %.0f C",t2,t4);
delay_us(50);
set_adc_channel(2);
delay_us(20);
s1=read_adc();
s1=1023-s1;
s2=(5.0*s1)/1024.0;
s2=(s2*100)/5;
delay_us(50);
set_adc_channel(3);
delay_us(20);
s3=read_adc();
s4=(5.0*s3)/1024.0;
lcd_gotoxy(21,1);
printf(lcd_putc,"Humedad %.0f %% / %.0f %% ",s2,s4);
delay_us(50);
set_adc_channel(4);
delay_us(20);
l1=read_adc();
l2=(5.0*l1)/1024.0;
lcd_gotoxy(21,2);
printf(lcd_putc,"Luz %.0f %%",l2);
//delay_ms(1500);
}
}