// IN THE NAME OF ALLAH //
// ATH10 Humidity & Temperature I2C Sensor //
// Code by : Javad Moosavi //
// www.ECA.ir //
#include <Wire.h>
int result[6];
int Humidity;
int temp;
float B;
float Q;
int i;
void setup()
{
Serial.begin(9600); //Begin Serial Communication for show data
Serial.println("IN THE NAME OF ALLAH");
Serial.println("AHT 10 T/H Sensor");
Serial.println("www.ECA.ir");
Wire.begin(); //Begin I2C Communication
}
void loop()
{
Wire.beginTransmission(0x38); //Send Slave address to I2C bus
Wire.write(byte(0xAC)); //Send Measure command
Wire.write(byte(0x33)); //Command 1
Wire.write(byte(0x00)); //Command 2
Wire.endTransmission(); //Send data and wait for response
delay(1000);
Wire.requestFrom(0x38, 6); //Request Slave Response (accodrding to datasheet it is 6 bytes)
int C = Wire.available(); //Get bytes!
if(C != 6) { Serial.println("incompelete data!");} //Check if data is compelete or not!
//Put result in an array
for(i = 0; i <= 5; i++)
{
result[i] = Wire.read();
}
int M = result[3] & 0xF;
//Note! we get 6 bytes from sensor
//first 8 bits are status
//other 40 bits are for humidity and temp
//first 20 bits issuing hiumidity
//second 20 bits issuinig temp
//formulas are expressed in datasheet
//Humidity
Humidity = (result[1] << 12) | (result[2] << 4) | (result[3] >> 4);
Q = float(Humidity) / 1048576;
Q = Q * 100;
Serial.print("Humidity : ");
Serial.print(Q,2);
Serial.print(" %");
//Temperature
temp = (M << 16) | (result[4] << 8) | (result[5]);
B = float(temp) / 1048576;
B = B * 200;
B = B -50;
Serial.print(" | Temp : ");
Serial.print(B, 2);
Serial.println(" C");
delay(2000);
}