-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathAHT10.cpp
59 lines (50 loc) · 1.23 KB
/
AHT10.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <Arduino.h>
#include <Wire.h>
#include "AHT10.h"
static const uint8_t AHT10_ADDR = 0x38;
bool AHT10::begin() {
Wire.beginTransmission(AHT10_ADDR);
Wire.write(0xE1);
Wire.write(0x08);
Wire.write(0x00);
return Wire.endTransmission() == 0;
}
bool AHT10::reset() {
Wire.beginTransmission(AHT10_ADDR);
Wire.write(0xBA);
return Wire.endTransmission() == 0;
}
bool AHT10::measure(float *temp, float *hum) {
uint8_t data[6];
uint32_t d;
Wire.beginTransmission(AHT10_ADDR);
Wire.write(0xAC);
Wire.write(0x33);
Wire.write(0x00);
if (Wire.endTransmission())
return false;
delay(75);
if ((Wire.requestFrom(AHT10_ADDR, (uint8_t)6) != 6) || (Wire.readBytes(data, 6) != 6))
return false;
if (temp) {
d = ((uint32_t)(data[3] & 0x0F) << 16) | ((uint32_t)data[4] << 8) | data[5];
*temp = (float)d * 200 / 1048576 - 50;
}
if (hum) {
d = ((uint32_t)data[1] << 12) | ((uint32_t)data[2] << 4) | (data[3] >> 4);
*hum = (float)d * 100 / 1048576;
}
return true;
}
float AHT10::getTemperature() {
float result;
if (! measure(&result, NULL))
result = NAN;
return result;
}
float AHT10::getHumidity() {
float result;
if (! measure(NULL, &result))
result = NAN;
return result;
}