#include <18f452.h>  //Mc a utilizar
#include <STDIO.h>  //librería para hacer operaciones matemáticas
#fuses hs,nowdt,noprotect,nolvp    //High speed, sin perro guardian, no pretegido, no bajo voltaje.
#use delay(clock=4000000,RESTART_WDT)     //reloj a 4 MHz
#byte porta=0xf80
#byte portb=0xf81
#byte portc=0xf82     // Cambiando nombres a los puertos
#byte portd=0xf83
#byte porte=0xf84
void main()   // Deja de leer todo lo primero y vamonos a:
{ 
   
   int const disp [10] = /*{0x3f, 0x06, 0x5b, 0x4f,0x66,     //declaramos los vectores para el display (Catodo Común)
                          0x6d, 0x7d, 0x07, 0x7f, 0x6f};*/  
                         {0x40, 0x79, 0x24,0x30, 0x19,       //declaramos los vectores para el display (Anodo Común)
                          0x12, 0x02, 0x78, 0x00, 0x18};
   int uni,dec,multi,k;      //Variables para los displays y k como retardo
   int b=1;                    // Bandera lógica
   int a=1;                    //Bandera lógica
   float temp,temperatura;    //Variables para las operaciones y así obtener la temperatura dentro del PIC
   float dato;                      
   SETUP_TIMER_2(t2_div_by_16,200,10);     //definimos el Timer 2 
   enable_interrupts(GLOBAL);                     //Activamos las interrupciones globales
   setup_adc_ports(2);                              //número de puertos ADC, puse 2 porque aveces conecto otro sensor y sacar promedios.
   setup_adc(adc_clock_div_32);                 //Configuración de los ADC
   set_adc_channel(0);                              //Activamos el ADC 0
   delay_us(10);                                       //Esperamos 10 microsegundos
   set_tris_B(0x00);
   set_tris_C(0x80);                             //Configuración de puertos.
   set_tris_D(0x00);
   portb=0;                        //Limpiamos el puerto b, que es donde estan conectados los displays de 7 segmentos.
                        
      while (TRUE)                      //Programa
      {
         dato  = read_adc();                      //Leemos el ADC y metemos el valor a la variable dato
         read_adc(ADC_START_ONLY);         //decirle al pic que solo y únicamente lea el ADC para una buena lectura
         dato = read_adc(ADC_READ_ONLY); //meter de nuevo el valor a dato para corroborar
         temp  = (0.0196078*dato);            //¿porqué 0.0196078? 5 volts entre 255 (recordemos que estamos trabajando con 8 bytes del ADC) nos da ese numero, o sea conversion de Analógico a digital. 
         multi = temp*100;                               //multiplicamos por 100 para tener la temperatura real entre 10.
         dec   = multi/10;                                 //Con esta operación solo tengo el dato de las decenas
         uni   = multi%10;                                //Con esta solo tengo el dato de las unidades en una variable
         temperatura  = temp * 100;                 //Temperatura con el valor verdadero.
         
// Control para encender o apgar un ventilador o una bomba  
         if(temperatura > 29 && a==0)      //Se activa D2 (Ventilador)
          {
            b=1;
            output_high(PIN_D2);
            output_low(PIN_D1);
          }
         if(temperatura <= 29 && temperatura >= 27)                               //Todo esta inactivo
          {
            b=1;
            output_low(PIN_D2);
            output_low(PIN_D1);
          }  
         if(temperatura < 27 && b==0)      //Se activa D1 (Calentador)
          {
            a=1;
            output_low(PIN_D2);
            output_high(PIN_D1);
          }
         if(temperatura < 25)
          {
           b=0;
          }
         if(temperatura > 31)
          {
           a=0;
          }