char datos[5], i, j, checksum;
char leer_DHT11(){
TRISBbits.RB0 = 0; //Salida
PORTBbits.RB0 = 0; // Y a cero
__delay_ms(20); // minimo 18ms segun el pdf
TRISBbits.RB0 = 1; // Entrada
while(PORTBbits.RB0); // Mientras este en 1 se quede encerrado
while(!PORTBbits.RB0); // Mientras este en 0 quedamos aca
while(PORTBbits.RB0);
for(i = 0 ; i < sizeof datos; i++) { // Los 5 bytes
datos[i] = 0; // Limpio
for(j = 0; j < 8; j++) {
while(!PORTBbits.RB0); // Mientras este en bajo, quede atrapado aca.
__delay_us(90); // Superior a un "0" que es 50+28us y menor a un "1" que es 50 + 70us
datos[i] |= PORTBbits.RB0; // Guardo el estado del bit
datos[i] <<= 1; // Roto un bit a la izquierda
}
}
checksum = 0;
for ( i = 0; i< sizeof datos - 1; i++) checksum += datos[i];
if ( checksum != datos[4]) return 1; // Aca hubo un problema, no coincide el checksum
return 0;
}