#define dht22 PIN_A0

byte dht22_dat[5];
byte leer_datos_dht22();
byte leer_datos_dht()
{
byte i = 0;
byte result=0;
   for (i=0; i< 8; i++) 
   {
      while(input(dht22)==0);
      delay_us(30);
      if(input(dht22)==1)
      {
        result |=(1<<(7-i));
      }
      while(input(dht22)==1); 
   }
return result;
}
Void leer_dht22(float &dhthum,float &dthtemp)
{
byte i, dht22_checksum;
int16 temperatura, humedad; 
float temp,hum;

output_low(dht22);  // Si esta en standart_io lo pasa a salida solo
delay_ms(20);
input(dht22);  // Si esta en standart_io lo pasa a entrada solo, sino cambiar el tris aca.
delay_us(10);
while(input(dht22)!=0);     // Espero que se ponga en 0
while(input(dht22)!=1);     // Terminado el 0 espero que se ponga en 1.
// Aca recibo los datos
delay_us(80);
for(i=0; i<5; i++)
   {
      dht22_dat[ i ] = leer_datos_dht();
   }
delay_us(80);
output_high(dht22);
dht22_checksum= dht22_dat[0]+dht22_dat[1]+dht22_dat[2]+dht22_dat[3];

if(dht22_dat[4]!=dht22_checksum)
   {
   }
humedad = make16(dht22_dat[0],dht22_dat[1]);
temperatura = make16(dht22_dat[2],dht22_dat[3]);
hum=humedad;
temp=temperatura;
dhthum=(hum)/10;
dthtemp=(temp)/10;
}

