Remarks

LedBarGraph
Status
Source code GitHub
NuGet package

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

The following example shows how to use the intanciate a PwmLedBarGraph witn an array of PWM ports, and turn on/off leds individually, make the entire bar blink and pulse:

public class MeadowApp : App<F7Micro, MeadowApp>
{
    PwmLedBarGraph pwmLedBarGraph;

    public MeadowApp()
    {
        Console.WriteLine("Initializing...");

        // Using an array of IPwmPorts
        IPwmPort[] ports =
        {
                Device.CreatePwmPort(Device.Pins.D04),
                Device.CreatePwmPort(Device.Pins.D05),
                Device.CreatePwmPort(Device.Pins.D06),
                Device.CreatePwmPort(Device.Pins.D07),
                Device.CreatePwmPort(Device.Pins.D08),
                Device.CreatePwmPort(Device.Pins.D09),
                Device.CreatePwmPort(Device.Pins.D10),
                Device.CreatePwmPort(Device.Pins.D11),
                Device.CreatePwmPort(Device.Pins.D12),
                Device.CreatePwmPort(Device.Pins.D13)
        };
        pwmLedBarGraph = new PwmLedBarGraph(ports, 0.25f);            

        TestPwmLedBarGraph();
    }

    protected void TestPwmLedBarGraph()
    {
        Console.WriteLine("TestLedBarGraph...");

        float percentage = 0;

        while (true)
        {
            Console.WriteLine("Turning them on using SetLed...");
            for (int i = 0; i < pwmLedBarGraph.Count; i++)
            {
                pwmLedBarGraph.SetLed(i, true);
                Thread.Sleep(300);
            }

            Thread.Sleep(1000);

            Console.WriteLine("Turning them off using SetLed...");
            for (int i = pwmLedBarGraph.Count - 1; i >= 0; i--)
            {
                pwmLedBarGraph.SetLed(i, false);
                Thread.Sleep(300);
            }

            Thread.Sleep(1000);

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

            Thread.Sleep(1000);

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

            Thread.Sleep(1000);

            Console.WriteLine("Bar blinking on and off...");
            pwmLedBarGraph.StartBlink();
            Thread.Sleep(3000);
            pwmLedBarGraph.Stop();

            Thread.Sleep(1000);

            Console.WriteLine("Bar pulsing...");
            pwmLedBarGraph.StartPulse();
            Thread.Sleep(3000);
            pwmLedBarGraph.Stop();

            Thread.Sleep(1000);
        }
    }
}

Sample projects available on GitHub

Wiring Example

Characteristic Locus
Inheritance System.Object > PwmLedBarGraph
Inherited Members System.Object.ToString() System.Object.Equals(System.Object) System.Object.Equals(System.Object, System.Object) System.Object.ReferenceEquals(System.Object, System.Object) System.Object.GetHashCode() System.Object.GetType() System.Object.MemberwiseClone()
Namespace Meadow.Foundation.Leds
Assembly Meadow.Foundation.dll

Syntax

public class PwmLedBarGraph

Constructors

PwmLedBarGraph(IIODevice, IPin[], Single)

Create an LedBarGraph instance from an array of IPwnPin and a forwardVoltage for all LEDs in the bar graph

Declaration
public PwmLedBarGraph(IIODevice device, IPin[] pins, float forwardVoltage)

Parameters

Type Name Description
IIODevice device
IPin[] pins
System.Single forwardVoltage

PwmLedBarGraph(IPwmPort[], Single)

Create an LedBarGraph instance from an array of IDigitalOutputPort

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

Parameters

Type Name Description
IPwmPort[] ports
System.Single forwardVoltage

Fields

pwmLeds

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

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 uint GetTopLedForPercentage()

Returns

Type Description
System.UInt32

SetLed(UInt32, Boolean)

Set the LED state

Declaration
public void SetLed(uint index, bool isOn)

Parameters

Type Name Description
System.UInt32 index

index of the LED

System.Boolean isOn

Starts a blink animation on an individual LED

Declaration
public void SetLedBlink(uint index, uint onDuration = 200U, uint offDuration = 200U, float highBrightness = 1F, float lowBrightness = 0F)

Parameters

Type Name Description
System.UInt32 index
System.UInt32 onDuration
System.UInt32 offDuration
System.Single highBrightness
System.Single lowBrightness

SetLedBrightness(UInt32, Single)

Set the brightness of an individual LED when using PWM

Declaration
public void SetLedBrightness(uint index, float brightness)

Parameters

Type Name Description
System.UInt32 index
System.Single brightness

SetLedPulse(UInt32, UInt32, Single, Single)

Starts a pulse animation on an individual LED

Declaration
public void SetLedPulse(uint index, uint pulseDuration = 600U, float highBrightness = 1F, float lowBrightness = 0.15F)

Parameters

Type Name Description
System.UInt32 index
System.UInt32 pulseDuration
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(uint onDuration = 200U, uint offDuration = 200U, float highBrightness = 1F, float lowBrightness = 0F)

Parameters

Type Name Description
System.UInt32 onDuration

On duration.

System.UInt32 offDuration

Off duration.

System.Single highBrightness

High brigtness.

System.Single lowBrightness

Low brightness.

StartPulse(UInt32, 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. Pulse duration. High brigtness. Low brightness.

Declaration
public void StartPulse(uint pulseDuration = 600U, float highBrightness = 1F, float lowBrightness = 0.15F)

Parameters

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

Stop()

Stops any running animations.

Declaration
public void Stop()