Skip to content

Commit d0e90bb

Browse files
committed
Simplify the measurement struct and refactor
1 parent a3fdee3 commit d0e90bb

File tree

4 files changed

+20
-59
lines changed

4 files changed

+20
-59
lines changed

README.md

+1-3
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ iex> {:ok, aht20} = AHT20.start_link(bus_name: "i2c-1", bus_address: 0x38)
2828
iex> AHT20.read_data(aht20)
2929
{:ok,
3030
%AHT20.Measurement{
31-
raw_humidity: 158_119,
32-
raw_temperature: 410_343,
33-
relative_humidity: 15.079402923583984,
31+
humidity_rh: 15.079402923583984,
3432
temperature_c: 28.26671600341797,
3533
temperature_f: 82.88008880615234
3634
}}

lib/aht20/calc.ex

+10-32
Original file line numberDiff line numberDiff line change
@@ -6,51 +6,29 @@ defmodule AHT20.Calc do
66
@doc """
77
Calculates the relative humidity in percent.
88
9-
iex> AHT20.Calc.relative_humidity(158119)
9+
iex> AHT20.Calc.humidity_rh_from_raw(158119)
1010
15.079402923583984
1111
"""
12-
@spec relative_humidity(integer) :: float
13-
def relative_humidity(raw_humidity), do: raw_humidity / 1_048_576.0 * 100.0
12+
@spec humidity_rh_from_raw(integer) :: float
13+
def humidity_rh_from_raw(raw_humidity), do: raw_humidity / 1_048_576.0 * 100.0
1414

1515
@doc """
1616
Calculates the temperature in Celsius.
1717
18-
iex> AHT20.Calc.celsius_from_raw_temperature(410343)
18+
iex> AHT20.Calc.temperature_c_from_raw(410343)
1919
28.26671600341797
2020
"""
21-
@spec celsius_from_raw_temperature(integer) :: float
22-
def celsius_from_raw_temperature(raw_temperature), do: raw_temperature / 1_048_576.0 * 200.0 - 50.0
21+
@spec temperature_c_from_raw(integer) :: float
22+
def temperature_c_from_raw(raw_temperature), do: raw_temperature / 1_048_576.0 * 200.0 - 50.0
2323

2424
@doc """
2525
Calculates the temperature in Fahrenheit.
2626
27-
iex> AHT20.Calc.fahrenheit_from_raw_temperature(410343)
27+
iex> AHT20.Calc.temperature_f_from_raw(410343)
2828
82.88008880615234
2929
"""
30-
@spec fahrenheit_from_raw_temperature(integer) :: float
31-
def fahrenheit_from_raw_temperature(raw_temperature) do
32-
celsius_from_raw_temperature(raw_temperature) * 9.0 / 5.0 + 32.0
33-
end
34-
35-
@doc """
36-
Obtains the humidity value from the sensor output.
37-
38-
iex> AHT20.Calc.raw_humidity_from_sensor_output(<<28, 38, 154, 118, 66, 231, 118>>)
39-
158119
40-
"""
41-
@spec raw_humidity_from_sensor_output(<<_::56>>) :: integer()
42-
def raw_humidity_from_sensor_output(<<_state, humidity::20, _temperature::20, _crc>>) do
43-
humidity
44-
end
45-
46-
@doc """
47-
Obtains the temperature value from the sensor output.
48-
49-
iex> AHT20.Calc.raw_temperature_from_sensor_output(<<28, 38, 154, 118, 66, 231, 118>>)
50-
410343
51-
"""
52-
@spec raw_temperature_from_sensor_output(<<_::56>>) :: integer()
53-
def raw_temperature_from_sensor_output(<<_state, _humidity::20, temperature::20, _crc>>) do
54-
temperature
30+
@spec temperature_f_from_raw(integer) :: float
31+
def temperature_f_from_raw(raw_temperature) do
32+
temperature_c_from_raw(raw_temperature) * 9.0 / 5.0 + 32.0
5533
end
5634
end

lib/aht20/measurement.ex

+7-18
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,31 @@
11
defmodule AHT20.Measurement do
22
@moduledoc """
33
One sensor measurement report.
4-
Only the raw temperature and raw humidity values are computed directly from the sensor.
5-
All other values are derived.
64
"""
75

8-
defstruct [:temperature_c, :temperature_f, :relative_humidity, :raw_humidity, :raw_temperature]
6+
defstruct [:temperature_c, :temperature_f, :humidity_rh, :raw_humidity, :raw_temperature]
97

108
@type t :: %__MODULE__{
119
temperature_c: number,
1210
temperature_f: number,
13-
relative_humidity: number,
14-
raw_humidity: number,
15-
raw_temperature: number
11+
humidity_rh: number
1612
}
1713

1814
@doc """
1915
Converts raw sensor output into human-readable format.
2016
2117
iex> AHT20.Measurement.from_sensor_output(<<28, 38, 154, 118, 66, 231, 118>>)
2218
%AHT20.Measurement{
23-
raw_humidity: 158119,
24-
raw_temperature: 410343,
25-
relative_humidity: 15.079402923583984,
19+
humidity_rh: 15.079402923583984,
2620
temperature_c: 28.26671600341797,
2721
temperature_f: 82.88008880615234
2822
}
2923
"""
30-
def from_sensor_output(sensor_output) do
31-
raw_humidity = AHT20.Calc.raw_humidity_from_sensor_output(sensor_output)
32-
raw_temperature = AHT20.Calc.raw_temperature_from_sensor_output(sensor_output)
33-
24+
def from_sensor_output(<<_state, raw_humidity::20, raw_temperature::20, _crc>>) do
3425
__struct__(
35-
relative_humidity: AHT20.Calc.relative_humidity(raw_humidity),
36-
temperature_c: AHT20.Calc.celsius_from_raw_temperature(raw_temperature),
37-
temperature_f: AHT20.Calc.fahrenheit_from_raw_temperature(raw_temperature),
38-
raw_humidity: raw_humidity,
39-
raw_temperature: raw_temperature
26+
humidity_rh: AHT20.Calc.humidity_rh_from_raw(raw_humidity),
27+
temperature_c: AHT20.Calc.temperature_c_from_raw(raw_temperature),
28+
temperature_f: AHT20.Calc.temperature_f_from_raw(raw_temperature)
4029
)
4130
end
4231
end

test/aht20_test.exs

+2-6
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ defmodule AHT20Test do
2929
assert {:ok, data} = AHT20.read_data(sensor)
3030

3131
assert data == %AHT20.Measurement{
32-
raw_humidity: 158_119,
33-
raw_temperature: 410_343,
34-
relative_humidity: 15.079402923583984,
32+
humidity_rh: 15.079402923583984,
3533
temperature_c: 28.26671600341797,
3634
temperature_f: 82.88008880615234
3735
}
@@ -61,9 +59,7 @@ defmodule AHT20Test do
6159
assert {:ok, data} = AHT20.read_data(pid)
6260

6361
assert data == %AHT20.Measurement{
64-
raw_humidity: 158_119,
65-
raw_temperature: 410_343,
66-
relative_humidity: 15.079402923583984,
62+
humidity_rh: 15.079402923583984,
6763
temperature_c: 28.26671600341797,
6864
temperature_f: 82.88008880615234
6965
}

0 commit comments

Comments
 (0)