Skip to content

Instantly share code, notes, and snippets.

@dmbr0
Last active December 28, 2023 09:44
Show Gist options
  • Save dmbr0/18e019c1c0c42f1f06c73320d3129fb4 to your computer and use it in GitHub Desktop.
Save dmbr0/18e019c1c0c42f1f06c73320d3129fb4 to your computer and use it in GitHub Desktop.
controlling relay with temperature
-module(relays).
-export([relay_one/0, handle_msg_one/2]).
relay_one() ->
GPIO = gpio:open(),
gpio:set_direction(GPIO, 2, output),
handle_msg_one(GPIO, off).
handle_msg_one(GPIO, State) ->
receive
on ->
io:format("ON~n"),
gpio:set_level(GPIO, 2, 1),
timer:sleep(3000),
io:format("OFF~n"),
gpio:set_level(GPIO, 2, 0),
handle_msg_one(GPIO, off);
off ->
io:format("ON~n"),
gpio:set_level(GPIO, 2, 1),
timer:sleep(1000),
io:format("OFF~n"),
gpio:set_level(GPIO, 2, 0),
handle_msg_one(GPIO, off);
_ ->
handle_msg_one(GPIO, State)
after 1000 ->
handle_msg_one(GPIO, State)
end.
-module(tph_reader).
-export([run/0]).
run() ->
{ok, I2CBus} = i2c_bus:start(#{
sda => 21,
scl => 22
}),
{ok, BME} = bme280:start(I2CBus),
loop(BME, hot).
loop(BME, LastState) ->
case bme280:take_reading(BME) of
{ok, Reading} ->
{Temperature, Pressure, Humidity} = Reading,
io:format("Temperature: ~pC, Pressure: ~phPa, Humidity: ~p%RH~n", [
Temperature, Pressure, Humidity
]),
case Temperature > 22.2 of
true when LastState /= hot ->
io:format("It's hot. Turn off Heat.~n"),
RelaysPid = whereis(relays),
RelaysPid ! off,
loop(BME, hot);
_ ->
case Temperature < 21.5 of
true when LastState /= cold ->
io:format("It's cold. Turn on Heat.~n"),
RelaysPid = whereis(relays),
RelaysPid ! on,
loop(BME, cold);
_ ->
timer:sleep(5000),
loop(BME, LastState)
end
end;
Other ->
io:format("Error taking reading temperature: ~p~n", [Other]),
loop(BME, LastState)
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment