Remarks

Max44009
Status Status badge: working
Source code GitHub
Datasheet(s) GitHub
NuGet package NuGet Gallery for Meadow.Foundation.Sensors.Light.Max44009

The Max44009 is an analog ambient light sensor.

Code Example

Max44009 sensor;

public override Task Initialize()
{
    Console.WriteLine("Initialize...");

    sensor = new Max44009(Device.CreateI2cBus());

    // Example that uses an IObservable subscription to only be notified when the filter is satisfied
    var consumer = Max44009.CreateObserver(
        handler: result => Console.WriteLine($"Observer: filter satisifed: {result.New.Lux:N2}Lux, old: {result.Old?.Lux:N2}Lux"),

        // only notify if the visible light changes by 100 lux (put your hand over the sensor to trigger)
        filter: result => {
            if (result.Old is { } old) { //c# 8 pattern match syntax. checks for !null and assigns var.
                // returns true if > 100lux change
                return (result.New - old).Abs().Lux > 100;
            }
            return false;
        });

    sensor.Subscribe(consumer);

    // classical .NET events can also be used:
    sensor.Updated += (sender, result) => Console.WriteLine($"Light: {result.New.Lux:N2}Lux");

    return Task.CompletedTask;
}

public override async Task Run()
{
    var result = await sensor.Read();
    Console.WriteLine("Initial Readings:");
    Console.WriteLine($" Light: {result.Lux:N2}Lux");

    sensor.StartUpdating(TimeSpan.FromSeconds(1));
}

Sample project(s) available on GitHub

Wiring Example

To wire a Max44009 to your Meadow board, connect the following:

Max44009 Meadow Pin
SCL D08
SDA D07
GND GND
VCC 3V3

It should look like the following diagram:

Characteristic Locus
Inheritance System.Object ObservableBase<Illuminance> SensorBase<Illuminance> SamplingSensorBase<Illuminance> ByteCommsSensorBase<Illuminance> > Max44009
Implements IDisposable
Inherited Members ByteCommsSensorBase<Illuminance>.Peripheral ByteCommsSensorBase<Illuminance>.ReadBuffer ByteCommsSensorBase<Illuminance>.WriteBuffer ByteCommsSensorBase<Illuminance>.Init(Int32, Int32) ByteCommsSensorBase<Illuminance>.Dispose(Boolean) ByteCommsSensorBase<Illuminance>.Dispose() SamplingSensorBase<Illuminance>.StartUpdating(Nullable<TimeSpan>) SamplingSensorBase<Illuminance>.StopUpdating() SensorBase<Illuminance>.Updated SensorBase<Illuminance>.samplingLock SensorBase<Illuminance>.SamplingTokenSource SensorBase<Illuminance>.Conditions SensorBase<Illuminance>.IsSampling SensorBase<Illuminance>.UpdateInterval SensorBase<Illuminance>.RaiseEventsAndNotify(IChangeResult<>) SensorBase<Illuminance>.Read() ObservableBase<Illuminance>.observers ObservableBase<Illuminance>.NotifyObservers(IChangeResult<>) Meadow.Foundation.ObservableBase<Illuminance>.Subscribe(IObserver<>) Meadow.Foundation.ObservableBase<Illuminance>.CreateObserver(Action<>, System.Nullable<Predicate<IChangeResult<UNIT>>>)
Namespace Meadow.Foundation.Sensors.Light
Assembly Max44009.dll

Syntax

public class Max44009 : ByteCommsSensorBase<Illuminance>, IDisposable

Constructors

Max44009(II2cBus, Byte)

Declaration
public Max44009(II2cBus i2cBus, byte address = null)

Parameters

Type Name Description
II2cBus i2cBus
System.Byte address

Methods

Initialize()

Declaration
protected void Initialize()

ReadSensor()

Declaration
protected override Task<Illuminance> ReadSensor()

Returns

Type Description
Task<Illuminance>

Overrides

Meadow.Foundation.SensorBase<Illuminance>.ReadSensor()