int8 i,j,valor[5],temp;
output_low(PIN_A4); // Pulso bajo
delay_ms(30); // demora
while(input_pin(PIN_A4) == 0) {} // Al ponerlo como entrada, se va a 1 por la resistencia de pull-up, espero que que envie un 0 el DHT
while(input_pin(PIN_A4) == 1) {} // Espero que lo suelte, es decir que aparezca un 1.
//Comienzo a recibir los datos, son 5 bytes, en el cual tienen 8 bits cada uno
for(j=0;j<5;j++)
{
valor[j] = 0; // Inicio el valor
for(i=0;i<8;i++) // Repito 8 veces, para cada j
{
while(input_pin(PIN_A4) == 0) {} // Espero que primero este en 0
delay_us(100); // 100us espero, si leo 1, significa que llego un 1, si leo 0 implica que era un 0
valor = (valor << 1) | input_pin(PIN_A4); // Desplazo un lugar a la izquierda y pongo el bit recibido, que es justamente el valor que debe ser
}
}
for(i=0;i<4;i++)
{
temp += valor[i]
}
if(temp!=valor[4])
{
// Error aca, el cheksum no es correcto
}
/* Resultado
Tendrias los siguientes valores:
valor[0] = Entero Humedad Relativa
valor[1] = Decimal Humedad Relativa
valor[2] = Entero Temperatura
valor[3] = Decimal Temperatura
valor[4] = Checksum
*/