Conflicto entre dos Sensores Usando el Pic 18F4550

Tengo estos dos Sensores cada uno si me trabaja individual pero cuando ambos los manipulo el programa ya no hace lo que yo esperaria el programa es de dos sensores de temperatura el primero se activa a 3 Grados luego apaga el led a los 24 y se empieza a disminuir esta, despues se activa el otro en 24 para que empiece a sensar el otro es un ciclo.



Código:
#include "PICPLAY_18F4550.h"
// Definiciones para el programa    
#define  condensador       PIN_C1
#define  luz_lcd           Pin_B3
#define  alarma            Pin_B2
#define  boton_up          input(PIN_B0)   // Boton que incrementa la temperatura deseada por le usuario
#define  boton_down        input(PIN_B1)   // Boton que decrementa la temperatura deseada por el usuario
#define  presionado     0  // los botones al presionarse dan 0
#define  no_presionado  1  // los botones al no presionarse dan 1
#define limite_evaporador 2.9
#define limite_inferior 17.0
#define limite_superior 30.0

//****************************************************************************************
#include "picplay_lcd.c"               // libreria para LCD
#include "picplay_adc.c"
//float    temperatura_central=24.0;  // temperatura_central deseada inicialmente de 24.0°C
float   t_ambiente,t_evaporador;          // temperatura medida tambien como float
float temperatura_central;
void pitido(void);                  // declaramos funcion pitido() para hacer sonido con buzzer
void main(void){
lcd_init();                   // inicializa el lcd
on(luz_lcd);                  // enciende luz del lcd (PIN_B3)
adc_init(ADC_REF_EXTERNAL);   // Voltaje de referencia externo, lo ajustaremos a 2.56V mediante POT2 de la tarjeta (RA3/Vref+)
temperatura_central=24.0;      //inicializa temperatura central
while(true){                  // LAZO INFINITO
t_ambiente=read_adc10(0);          // leemos el canal 0 del ADC en formato 10 bits
t_evaporador=read_adc10(1);          // leemos el canal 1 del ADC en formato 10 bits
t_ambiente=t_ambiente*0.25;         // convertimos a °C, (en esta ocacion los decimales no se truncan porque "temperatura" es float)
t_evaporador=t_evaporador*0.25;    // convertimos a °C, (en esta ocacion los decimales no se truncan porque "temperatura" es float)
lcd_gotoxy(9,1);
printf(lcd_putc,"T1=%3.2f",t_ambiente);   // imprime temperatura en LCD en formato de punto flotante
lcd_gotoxy(1,2);
printf(lcd_putc,"T2=%3.2f",t_evaporador );   // imprime temperatura en LCD en formato de punto flotante
lcd_gotoxy(1,1);
printf(lcd_putc,"TD=%3.2f",temperatura_central); // imprime temperatura deseada en LCD en formato de punto flotante
   
   if (t_evaporador >= temperatura_central) 
   {
      t_evaporador = 0;
   }
   if((t_evaporador>=limite_evaporador)&& (t_evaporador<temperatura_central))
   {
      on(condensador );
   }
   else if (t_evaporador>=temperatura_central)
   {
      off(condensador );
   }
   
   if((t_ambiente>temperatura_central))
   {
      on(condensador );
   }
   else if ((t_evaporador<=limite_evaporador))
   {
      off(condensador );
   }
   else if ((t_evaporador<temperatura_central)&& (t_ambiente>temperatura_central))
   {
      off(condensador );
   }

if(boton_up==presionado){
   temperatura_central+=1;  
   pitido();
   delay_ms(100);         
   }
if(boton_down==presionado){
   temperatura_central-=1;
   pitido();
   delay_ms(200);         
   }
} // cierra lazo infinito
} // cierra main
void pitido(void){
on(alarma);
delay_ms(50);
off(alarma);
} ...
 
Última edición por un moderador:
Atrás
Arriba