View Source VCNL4040

This is a Circuits-based Elixir driver for the VCNL4040. The VCNL4040 is an ambient light and proximity sensor. It uses I2C and GPIO for communication and has a pretty cool set of features.

For details on the hardware consult the datasheet. There is additional useful detail about the sensor in the implementation notes.

I would not consider the API completely stable yet but it is being tested for real world use.

Installation

If available in Hex, the package can be installed by adding vcnl4040 to your list of dependencies in mix.exs:

def deps do
  [
    {:vcnl4040, "~> 0.1.0"}
  ]
end

Getting started

If you have I2C hooked up on your device, typically under Nerves:

iex> Circuits.I2C.detect_devices() # Use to find the right one, example: "i2c-1"
# .. lots of output, looks for a single device on a single bus, typically
iex> VCNL4040.start_link(i2c_bus: "i2c-1", name: VCNL4040, log_samples?: true)
{:ok, _pid}
iex> VCNL4040.sensor_present?()
true
iex> RingLogger.attach
# You should start seeing the logged samples from the default setup
# because of log_samples?: true

With log_samples?: true you should get sample output in your logs every second by default.

See VCNL4040.start_link/1 for more detailed documentation on start options.

See VCNL4040.DeviceConfig for more detailed configuration of the hardware.

Simulated device

There is a simulated device for the VCNL4040 in circuits_sim at some stage of completion. At the time of writing it does not have GPIO interrupt support.

Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/vcnl4040.