Remarks

LedBarGraph
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 LedBarGraph class allows you to control an led bar graph using GPIO.

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

LedBarGraph ledBarGraph;

public override Task Initialize()
{
    Resolver.Log.Info("Initializing...");

    // Using an array of Pins 
    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
    };

    ledBarGraph = new LedBarGraph(pins);

    return Task.CompletedTask;
}

public override async Task Run()
{
    Resolver.Log.Info("TestLedBarGraph...");

    float percentage = 0;

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

        await Task.Delay(1000);

        Resolver.Log.Info("Turning them on using Percentage...");
        while (percentage < 1)
        {
            percentage += 0.10f;
            Resolver.Log.Info($"{percentage}");
            ledBarGraph.Percentage = Math.Min(1.0f, percentage);
            await Task.Delay(100);
        }

        await Task.Delay(1000);

        Resolver.Log.Info("Turning them off using Percentage...");
        while (percentage > 0)
        {
            percentage -= 0.10f;
            Resolver.Log.Info($"{percentage}");
            ledBarGraph.Percentage = Math.Max(0.0f, percentage);
            await Task.Delay(100);
        }

        await Task.Delay(1000);

        Resolver.Log.Info("Charging animation...");
        while (percentage < 1)
        {
            percentage += 0.10f;
            Resolver.Log.Info($"{percentage}");
            ledBarGraph.Percentage = Math.Min(1.0f, percentage);
            ledBarGraph.StartBlink(ledBarGraph.GetTopLedForPercentage());
            await Task.Delay(2000);
        }

        await Task.Delay(1000);

        Resolver.Log.Info("Discharging animation...");
        while (percentage > 0)
        {
            percentage -= 0.10f;
            Resolver.Log.Info($"{percentage}");
            ledBarGraph.Percentage = Math.Max(0.0f, percentage);
            ledBarGraph.StartBlink(ledBarGraph.GetTopLedForPercentage());
            await Task.Delay(2000);
        }

        await Task.Delay(1000);

        Resolver.Log.Info("Blinking for 5 seconds at 500ms on/off...");
        ledBarGraph.StartBlink();
        await Task.Delay(5000);
        ledBarGraph.Stop();

        await Task.Delay(1000);

        Resolver.Log.Info("Blinking for 5 seconds at 200ms on/off...");
        ledBarGraph.StartBlink(TimeSpan.FromMilliseconds(200), TimeSpan.FromMilliseconds(200));
        await Task.Delay(5000);
        ledBarGraph.Stop();

        await Task.Delay(1000);
    }
}

Sample project(s) available on GitHub

Wiring Example

<img src="../../API_Assets/Meadow.Foundation.Leds.LedBarGraph/LedBarGraph_Fritzing.svg"

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

Syntax

public class LedBarGraph : object

Constructors

LedBarGraph(IDigitalOutputPort[])

Create an LedBarGraph instance from an array of IDigitalOutputPort

Declaration
public LedBarGraph(IDigitalOutputPort[] ports)

Parameters

Type Name Description
IDigitalOutputPort[] ports

LedBarGraph(IPin[])

Create an LedBarGraph instance from an array of IPins

Declaration
public LedBarGraph(IPin[] pins)

Parameters

Type Name Description
IPin[] pins

Fields

leds

Array to hold LED objects for bar

Declaration
protected Led[] leds

Field Value

Type Description
Led[]

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

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)

Blink animation that turns the LED bar graph on (500ms) and off (500ms)

Declaration
public void StartBlink()

Starts a blink animation on an individual LED on (500ms) and off (500ms)

Declaration
public void StartBlink(int index)

Parameters

Type Name Description
System.Int32 index

Starts a blink animation on an individual LED

Declaration
public void StartBlink(int index, TimeSpan onDuration, TimeSpan offDuration)

Parameters

Type Name Description
System.Int32 index
TimeSpan onDuration
TimeSpan offDuration

Blink animation that turns the LED bar graph on and off based on the OnDuration and offDuration values in ms

Declaration
public void StartBlink(TimeSpan onDuration, TimeSpan offDuration)

Parameters

Type Name Description
TimeSpan onDuration
TimeSpan offDuration

StartBlinkAsync(TimeSpan, TimeSpan, CancellationToken)

Set LED to blink

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

Parameters

Type Name Description
TimeSpan onDuration

on duration in ms

TimeSpan offDuration

off duration in ms

CancellationToken cancellationToken

cancellation token used to cancel blink

Returns

Type Description
Task

Stop()

Stops the LED bar graph when its blinking and/or turns it off.

Declaration
public void Stop()

Stop(Int32)

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

Declaration
public void Stop(int index)

Parameters

Type Name Description
System.Int32 index