Buenos dias,
Para el sensor que pasas (AM2320), acá tenes la hoja de datos:
http://akizukidenshi.com/download/ds/aosong/AM2320.pdfSegún especifica la hoja de datos, la lectura es un poco mas compleja (ver pagina 13-14 y 16-17).
El sensor requiere una serie de pasos "no I2C standard" para la medición, ya que hay que despertarlo antes (wake-up) para hacer la medicion.
Segun explica, el formato es para medir RH y T:
1) Despertarlo wake-up.
2) Enviar datos a leer:
START + (I 2 C address + W) + function code (0x10) + start address register number + save data + CRC + STOP
3) Esperar medicion.
4) Leer datos:
Function code (0x10) + start address + number + CRC register
Y el ejemplo que da es:
Enviar: START +
0xB8 (SLA) +0x03 (function code) +
0x00 (starting address) +
0x04 (register length) + STOP
Recibir:
0x03(Function Code)+
0x04(data length)+
0x03(high humidity)+
0x39(low humidity) +
0x01 (high temperature) +
0x15(low temperature)+
0xE1(CRC checksum low byte) +
0xFE (CRC checksum high byte);
Donde la respuesta es:
0339H = 3×256 +3×16 +9 = 825 => humidity = 825÷10 = 82.5% RH;
0115H = 1×256 +1×16 +5 = 277 => temperature = 277÷10 = 27.7 ℃
El START y STOP del I2C, ya lo hacen las funciones de la STX8081 automáticamente al transmitir.
Entonces, las funciones I2C a utilizar serian (a modo general):
// Array con datos lectura/escritura.
new Data[10]
// Primero despertar sensor,
I2C0MasterSendByte(0xB8, 0)
DelayMS(5)
// Transmision
Data[0] = 0x03 // Function code
Data[1] = 0x00 // Start address
Data[2] = 0x04 // Register length
// Enviar array de datos.
I2C0MasterSend(0xB8, 3, Data)
DelayMS(5)
// Recepcion.
// Realizar transacción I2C para leer 8 bytes.
I2C0MasterReceive(0xB8, 8, Data)
// Luego en en Data estan los datos de RH y T
new RH, T
RH = (Data[2] << 8) | (Data[3])
T = (Data[4] << 8) | (Data[5])
Como ves, hay que entender el protocolo I2C y ademas "las particularidades del sensor". En este caso, parece medio enredado, mas aun por
la hoja de datos que no ayuda por como esta escrita.
Obviamente, eso es teórico, hay que tener el sensor y probarlo. Ademas de escribir mas prolijamente el código.
Este sensor:
http://articulo.mercadolibre.com.ar/MLA-586460420-modulo-sensor-de-humedad-temperatura-i2c-sht21-arduino-arm-_JMes mas caro, pero tiene una hoja de datos mejor
http://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/Humidity/Sensirion_Humidity_SHT21_Datasheet_V4.pdf, basado en el chip SHT21.
Aparenta ser mas fácil de utilizar.
En ambos casos, vas a tener que experimentar y hacer varias pruebas hasta leer correctamente el sensor.