Skip to main content

Meadow.Foundation.Leds.LedBarGraph

LedBarGraph
StatusStatus badge: working
Source codeGitHub
NuGet packageNuGet 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.

LED bar graphs

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++)
{
await ledBarGraph.SetLed(i, true);
await Task.Delay(100);
await ledBarGraph.SetLed(i, false);
}

await Task.Delay(1000);

Resolver.Log.Info("Turning them on using Percentage...");
while (percentage < 1)
{
percentage += 0.10f;
await ledBarGraph.SetPercentage(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;
await ledBarGraph.SetPercentage(Math.Max(0.0f, percentage));
await Task.Delay(100);
}

await Task.Delay(1000);

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

await Task.Delay(1000);

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

await Task.Delay(1000);

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

await Task.Delay(1000);

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

await Task.Delay(1000);
}
}

Sample project(s) available on GitHub

Wiring Example

Circuit layout sample showing an LED BAR graph connected to a Meadow F7

Class LedBarGraph

Represents an LED bar graph composed on multiple LEDs

Assembly: Meadow.Foundation.dll
View Source
Declaration
public class LedBarGraph

Properties

Count

The number of the LEDs in the bar graph

View Source
Declaration
public int Count { get; }

Percentage

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

View Source
Declaration
public float Percentage { get; protected set; }

Fields

leds

Array to hold LED objects for bar

View Source
Declaration
protected Led[] leds

Methods

StopAnimation()

Stops the LED bar graph when its blinking

View Source
Declaration
public Task StopAnimation()
Returns

System.Threading.Tasks.Task

StopAnimation(int)

Stops the blinking animation on an individual LED

View Source
Declaration
public Task StopAnimation(int index)
Returns

System.Threading.Tasks.Task

Parameters
TypeName
System.Int32index

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

View Source
Declaration
public Task StartBlink()
Returns

System.Threading.Tasks.Task

StartBlink(TimeSpan, TimeSpan)

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

View Source
Declaration
public Task StartBlink(TimeSpan onDuration, TimeSpan offDuration)
Returns

System.Threading.Tasks.Task

Parameters
TypeNameDescription
System.TimeSpanonDurationThe duration the LED bar graph stays on
System.TimeSpanoffDurationThe duration the LED bar graph stays off

StartBlink(int)

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

View Source
Declaration
public Task StartBlink(int index)
Returns

System.Threading.Tasks.Task

Parameters
TypeNameDescription
System.Int32indexIndex of the LED

StartBlink(int, TimeSpan, TimeSpan)

Starts a blink animation on an individual LED

View Source
Declaration
public Task StartBlink(int index, TimeSpan onDuration, TimeSpan offDuration)
Returns

System.Threading.Tasks.Task

Parameters
TypeNameDescription
System.Int32indexIndex of the LED
System.TimeSpanonDurationThe duration the LED stays on
System.TimeSpanoffDurationThe duration the LED stays off

GetTopLedForPercentage()

Returns the index of the last LED turned on

View Source
Declaration
public int GetTopLedForPercentage()
Returns

System.Int32

SetLed(int, bool)

Set the LED state

View Source
Declaration
public Task SetLed(int index, bool isOn)
Returns

System.Threading.Tasks.Task

Parameters
TypeNameDescription
System.Int32indexIndex of the LED
System.BooleanisOnTrue for on, False for off

SetPercentage(float)

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

View Source
Declaration
public Task SetPercentage(float percentage)
Returns

System.Threading.Tasks.Task

Parameters
TypeNameDescription
System.SinglepercentagePercentage (Range from 0 - 1)