Remarks

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

An LED Bar Graph is packaged array of LEDs commonly used to indicate level or progress and commonly include 8 or 10 leds.

The PwmLedBarGraph class allows you to control an led bar graph using PWM ports.

Use the SetLed method to turn on or off LEDs individually, or assign a value on the Percentage property to represent it visually on the graph bar, like a battery indicator, temperature, humidity, etc.

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.PwmLedBarGraph/PwmLedBarGraph_Fritzing.png"

Characteristic Locus
Inheritance System.Object > PwmLedBarGraph
Namespace Meadow.Foundation.Leds
Assembly Meadow.Foundation.dll

Syntax

public class PwmLedBarGraph : object

Constructors

PwmLedBarGraph(IPwmOutputController, IPin[], Voltage)

Create an LedBarGraph instance for single color LED bar graphs

Declaration
public PwmLedBarGraph(IPwmOutputController device, IPin[] pins, Voltage forwardVoltage)

Parameters

Type Name Description
IPwmOutputController device
IPin[] pins

Array of pins

Voltage forwardVoltage

Single forward voltage

PwmLedBarGraph(IPwmOutputController, IPin[], Voltage[])

Create an LedBarGraph instance for multi color LED bar graphs

Declaration
public PwmLedBarGraph(IPwmOutputController device, IPin[] pins, Voltage[] forwardVoltage)

Parameters

Type Name Description
IPwmOutputController device
IPin[] pins

Array of pins

Voltage[] forwardVoltage

Array of forward voltages

PwmLedBarGraph(IPwmPort[], Voltage)

Create an LedBarGraph instance for single color LED bar graphs

Declaration
public PwmLedBarGraph(IPwmPort[] ports, Voltage forwardVoltage)

Parameters

Type Name Description
IPwmPort[] ports

Array of Pwm Ports

Voltage forwardVoltage

Single forward voltage

PwmLedBarGraph(IPwmPort[], Voltage[])

Create an LedBarGraph instance for multi color LED bar graphs

Declaration
public PwmLedBarGraph(IPwmPort[] ports, Voltage[] forwardVoltage)

Parameters

Type Name Description
IPwmPort[] ports

Array of ports

Voltage[] forwardVoltage

Array of forward voltages

Fields

pwmLeds

Array to hold pwm leds for bar graph

Declaration
protected PwmLed[] pwmLeds

Field Value

Type Description
PwmLed[]

Properties

Count

The number of the LEDs in the bar graph

Declaration
public int Count { get; }

Property Value

Type Description
System.Int32

Percentage

A value between 0 and 1 that controls the number of LEDs that are activated

Declaration
public float Percentage { get; set; }

Property Value

Type Description
System.Single

Methods

GetTopLedForPercentage()

Returns the index of the last LED turned on

Declaration
public int GetTopLedForPercentage()

Returns

Type Description
System.Int32

SetLed(Int32, Boolean)

Set the LED state

Declaration
public void SetLed(int index, bool isOn)

Parameters

Type Name Description
System.Int32 index

index of the LED

System.Boolean isOn

SetLedBrightness(Double)

Set the brightness to the LED bar graph using PWM

Declaration
public void SetLedBrightness(double brightness)

Parameters

Type Name Description
System.Double brightness

SetLedBrightness(Int32, Single)

Set the brightness of an individual LED when using PWM

Declaration
public void SetLedBrightness(int index, float brightness)

Parameters

Type Name Description
System.Int32 index
System.Single brightness

SetPercentage(Single)

Set the percentage of LEDs that are on starting from index 0

Declaration
protected void SetPercentage(float percentage)

Parameters

Type Name Description
System.Single percentage

Percentage (Range from 0 - 1)

Starts a blink animation on an individual LED

Declaration
public void StartBlink(int index, float highBrightness = null, float lowBrightness = null)

Parameters

Type Name Description
System.Int32 index
System.Single highBrightness
System.Single lowBrightness

Starts a blink animation on an individual LED

Declaration
public void StartBlink(int index, TimeSpan highBrightnessDuration, TimeSpan lowBrightnessDuration, float highBrightness = null, float lowBrightness = null)

Parameters

Type Name Description
System.Int32 index
TimeSpan highBrightnessDuration
TimeSpan lowBrightnessDuration
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.

Declaration
public void StartBlink(float highBrightness = null, float lowBrightness = null)

Parameters

Type Name Description
System.Single highBrightness

High brigtness.

System.Single lowBrightness

Low brightness.

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 highBrightnessDuration, TimeSpan lowBrightnessDuration, float highBrightness = null, float lowBrightness = null)

Parameters

Type Name Description
TimeSpan highBrightnessDuration

On duration.

TimeSpan lowBrightnessDuration

Off duration.

System.Single highBrightness

High brigtness.

System.Single lowBrightness

Low brightness.

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

Set LED to blink

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

Parameters

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

Returns

Type Description
Task

StartPulse(Int32, Single, Single)

Starts a pulse animation on an individual LED

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

Parameters

Type Name Description
System.Int32 index
System.Single highBrightness
System.Single lowBrightness

StartPulse(Int32, TimeSpan, Single, Single)

Starts a pulse animation on an individual LED with the specified pulse cycle

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

Parameters

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

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 the Pulse animation which gradually alternates the brightness of the LED between a low and high brightness setting, using the durations provided.

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

Parameters

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

Returns

Type Description
Task

Stop()

Stops any running animations.

Declaration
public void Stop()

Stop(Int32)

Stops any animation on an individual LED and/or turns it off

Declaration
public void Stop(int index)

Parameters

Type Name Description
System.Int32 index