Remarks

PwmLed
Status Status badge: working
Source code GitHub
NuGet package NuGet Gallery for Meadow.Foundation

*PwmLed represents an LED whose voltage (and brightness) is controlled by the duty-cycle of a PWM signal. It can be used both with Leds that have been current limited with in-series resistors, or Leds without resistors.

Controlling an LED via a PWM signal is more power efficient than using a current-limiting resistor. It also provides more control, allowing multiple grades of brightness.

To use PwmLed without a resistor, pass in the forward voltage (voltage drop) of the LED to the forwardVoltage constructor parameter, and the class will limit its output to the maximum forward voltage rating of the LED.

To use with an LED that has a resistor in series, pass 0.0 or TypicalForwardVoltage.ResistorLimited for the forwardVoltage parameter.

Code Example

PwmLedBarGraph pwmLedBarGraph;

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

    // Using an array of Pins that support PWM (D02 - D13)
    IPin[] pins =
    {
         Device.Pins.D11,
         Device.Pins.D10,
         Device.Pins.D09,
         Device.Pins.D08,
         Device.Pins.D07,
         Device.Pins.D06,
         Device.Pins.D05,
         Device.Pins.D04,
         Device.Pins.D03,
         Device.Pins.D02
    };

    pwmLedBarGraph = new PwmLedBarGraph(Device, pins, new Voltage(2.2));

    return Task.CompletedTask;
}

public override async Task Run()
{
    Console.WriteLine("TestLedBarGraph...");

    float percentage = 0;

    while (true)
    {
        Console.WriteLine("Turning them on and off for 200ms using SetLed...");
        for (int i = 0; i < pwmLedBarGraph.Count; i++)
        {
            pwmLedBarGraph.SetLed(i, true);
            await Task.Delay(100);
            pwmLedBarGraph.SetLed(i, false);
        }

        await Task.Delay(1000);

        Console.WriteLine("Turning them on using Percentage...");
        while (percentage < 1)
        {
            percentage += 0.01f;
            pwmLedBarGraph.Percentage = Math.Min(1.0f, percentage);
            await Task.Delay(100);
        }

        await Task.Delay(1000);

        Console.WriteLine("Turning them off using Percentage...");
        while (percentage > 0)
        {
            percentage -= 0.01f;
            pwmLedBarGraph.Percentage = Math.Max(0.0f, percentage);
            await Task.Delay(100);
        }

        await Task.Delay(1000);

        Console.WriteLine("Blinking for 5 seconds at 500ms on/off...");
        pwmLedBarGraph.StartBlink();
        await Task.Delay(5000);
        pwmLedBarGraph.Stop();

        await Task.Delay(1000);

        Console.WriteLine("Bar blinking with high and low brightness for 5 seconds...");
        pwmLedBarGraph.StartBlink(TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(200), 0.75f, 0.25f);
        await Task.Delay(5000);
        pwmLedBarGraph.Stop();

        await Task.Delay(1000);

        Console.WriteLine("Bar pulsing for 5 seconds...");
        pwmLedBarGraph.StartPulse();
        await Task.Delay(5000);
        pwmLedBarGraph.Stop();

        await Task.Delay(1000);
    }
}

Sample project(s) available on GitHub

Wiring Example

<img src="../../API_Assets/Meadow.Foundation.Leds.PwmLed/PwmLed_Fritzing.svg"

Characteristic Locus
Inheritance System.Object > PwmLed
Implements IDisposable
Namespace Meadow.Foundation.Leds
Assembly Meadow.Foundation.dll

Syntax

public class PwmLed : IPwmLed, IDisposable

Constructors

PwmLed(IPwmOutputController, IPin, Voltage, CircuitTerminationType)

Initializes a new instance of the PwmLed class.

Declaration
public PwmLed(IPwmOutputController device, IPin pin, Voltage forwardVoltage, CircuitTerminationType terminationType = CircuitTerminationType.CommonGround)

Parameters

Type Name Description
IPwmOutputController device

IO Device

IPin pin

Pin

Voltage forwardVoltage

Forward voltage

CircuitTerminationType terminationType

Whether the other end of the LED is hooked to ground or High. Typically used for RGB Leds which can have either a common cathode, or common anode. But can also enable an LED to be reversed by inverting the PWM signal.

PwmLed(IPwmPort, Voltage, CircuitTerminationType)

Creates a new PwmLed on the specified PWM pin and limited to the appropriate voltage based on the passed forwardVoltage. Typical LED forward voltages can be found in the TypicalForwardVoltage class.

Declaration
public PwmLed(IPwmPort pwmPort, Voltage forwardVoltage, CircuitTerminationType terminationType = CircuitTerminationType.CommonGround)

Parameters

Type Name Description
IPwmPort pwmPort

Port to control

Voltage forwardVoltage

Forward voltage of led

CircuitTerminationType terminationType

Termination type of LED

Properties

Brightness

Gets the brightness of the LED, controlled by a PWM signal, and limited by the calculated maximum voltage. Valid values are from 0 to 1, inclusive.

Declaration
public float Brightness { get; set; }

Property Value

Type Description
System.Single

ForwardVoltage

Gets the forward voltage value

Declaration
public Voltage ForwardVoltage { get; protected set; }

Property Value

Type Description
Voltage

IsDisposed

Declaration
public bool IsDisposed { get; }

Property Value

Type Description
System.Boolean

IsOn

Gets or Sets the state of the LED

Declaration
public bool IsOn { get; set; }

Property Value

Type Description
System.Boolean

Port

Gets the PwmPort

Declaration
protected IPwmPort Port { get; set; }

Property Value

Type Description
IPwmPort

Methods

Dispose()

Declaration
public void Dispose()

Dispose(Boolean)

Declaration
protected virtual void Dispose(bool disposing)

Parameters

Type Name Description
System.Boolean disposing

SetBrightness(Single)

Sets the LED to a specific brightness.

Declaration
public void SetBrightness(float brightness)

Parameters

Type Name Description
System.Single brightness

Valid values are from 0 to 1, inclusive

Start a Blink animation which sets the brightness of the LED alternating between a low and high brightness setting.

Declaration
public void StartBlink(float highBrightness = 1F, float lowBrightness = 0F)

Parameters

Type Name Description
System.Single highBrightness
System.Single lowBrightness

Start the Blink animation which sets the brightness of the LED alternating between a low and high brightness setting, using the durations provided.

Declaration
public void StartBlink(TimeSpan onDuration, TimeSpan offDuration, float highBrightness = 1F, float lowBrightness = 0F)

Parameters

Type Name Description
TimeSpan onDuration
TimeSpan offDuration
System.Single highBrightness
System.Single lowBrightness

StartBlinkAsync(TimeSpan, TimeSpan, Single, Single, CancellationToken)

Start blinking the LED

Declaration
protected Task StartBlinkAsync(TimeSpan onDuration, TimeSpan offDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken)

Parameters

Type Name Description
TimeSpan onDuration

on duration in ms

TimeSpan offDuration

off duration in ms

System.Single highBrightness

maximum brightness

System.Single lowBrightness

minimum brightness

CancellationToken cancellationToken

token for cancellation

Returns

Type Description
Task

StartPulse(Single, Single)

Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting.

Declaration
public void StartPulse(float highBrightness = null, float lowBrightness = 0.15F)

Parameters

Type Name Description
System.Single highBrightness
System.Single lowBrightness

StartPulse(TimeSpan, Single, Single)

Start the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided.

Declaration
public void StartPulse(TimeSpan pulseDuration, float highBrightness = null, float lowBrightness = 0.15F)

Parameters

Type Name Description
TimeSpan pulseDuration
System.Single highBrightness
System.Single lowBrightness

StartPulseAsync(TimeSpan, Single, Single, CancellationToken)

Start pulsing the led

Declaration
protected Task StartPulseAsync(TimeSpan pulseDuration, float highBrightness, float lowBrightness, CancellationToken cancellationToken)

Parameters

Type Name Description
TimeSpan pulseDuration

duration in ms

System.Single highBrightness

maximum brightness

System.Single lowBrightness

minimum brightness

CancellationToken cancellationToken

token used to cancel pulse

Returns

Type Description
Task

Stop()

Stops any running animations.

Declaration
public void Stop()