Packages

An example open source Elixir application.

Current section

Files

Jump to
elevator lib floorSensorPoller.ex
Raw

lib/floorSensorPoller.ex

defmodule FloorSensorPoller do
@moduledoc """
A module that are observing change in the floorsensor
"""
use Task
require Driver
@pollingRate Application.compile_env(:elevator, :pollingRate)
# Public functions
# --------------------------------------------
@doc "Starts a task monitoring the floorsensor"
def start_link([]) do
Task.start_link(__MODULE__, :poller, [:between_floors])
end
# Recursive function for periodically polling the floor sensor.
def poller(prev) do
current = Driver.get_floor_sensor_state()
case {prev, current} do
{:between_floors, :between_floors} ->
nil
{floor, floor} ->
nil
# Floor change
{:between_floors, floor} ->
# Sends a update to the fsm that a new floor is reached
Fsm.floorReached(floor)
_ ->
nil
end
:timer.sleep(@pollingRate)
poller(current)
end
end