Remarks
PwmLed | |
---|---|
Status | |
Source code | GitHub |
NuGet package |
*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()
{
Resolver.Log.Info("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(pins, new Voltage(2.2));
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 < pwmLedBarGraph.Count; i++)
{
pwmLedBarGraph.SetLed(i, true);
await Task.Delay(100);
pwmLedBarGraph.SetLed(i, false);
}
await Task.Delay(1000);
Resolver.Log.Info("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);
Resolver.Log.Info("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);
Resolver.Log.Info("Blinking for 5 seconds at 500ms on/off...");
pwmLedBarGraph.StartBlink();
await Task.Delay(5000);
pwmLedBarGraph.Stop();
await Task.Delay(1000);
Resolver.Log.Info("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);
Resolver.Log.Info("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(IPin, Voltage, CircuitTerminationType)
Initializes a new instance PwmLed class
Declaration
public PwmLed(IPin pin, Voltage forwardVoltage, CircuitTerminationType terminationType = CircuitTerminationType.CommonGround)
Parameters
Type | Name | Description |
---|---|---|
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
Is the object disposed
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()
Dispose of the object
Declaration
public void Dispose()
Dispose(Boolean)
Dispose of the object
Declaration
protected virtual void Dispose(bool disposing)
Parameters
Type | Name | Description |
---|---|---|
System.Boolean | disposing | Is 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 |
StartBlink(Single, Single)
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 |
StartBlink(TimeSpan, TimeSpan, Single, Single)
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()