Added PwmWrapper class to simplify value management of each pin.
This commit is contained in:
parent
42c3319709
commit
c2c23f3cc5
64
Proculite.GpioRest/Wrappers/PwmWrapper.cs
Normal file
64
Proculite.GpioRest/Wrappers/PwmWrapper.cs
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
using System.Device.Pwm.Drivers;
|
||||||
|
|
||||||
|
namespace Proculite.GpioRest.Wrappers
|
||||||
|
{
|
||||||
|
public class PwmWrapper
|
||||||
|
{
|
||||||
|
private readonly SoftwarePwmChannel _softwarePwmChannel;
|
||||||
|
private readonly ILogger? _logger;
|
||||||
|
public int PinNumber { get; }
|
||||||
|
public double Value
|
||||||
|
{
|
||||||
|
get => _softwarePwmChannel.DutyCycle;
|
||||||
|
set { _softwarePwmChannel.DutyCycle = value; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public PwmWrapper(int pinNumber, ILogger? logger = null)
|
||||||
|
{
|
||||||
|
PinNumber = pinNumber;
|
||||||
|
_softwarePwmChannel = new SoftwarePwmChannel(pinNumber, usePrecisionTimer: true);
|
||||||
|
_logger = logger;
|
||||||
|
_softwarePwmChannel.DutyCycle = 0;
|
||||||
|
_softwarePwmChannel.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetValue(double value)
|
||||||
|
{
|
||||||
|
LogValue(value);
|
||||||
|
if (value < 0 || value > 1)
|
||||||
|
{
|
||||||
|
LogValueOutOfBounds();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_softwarePwmChannel.DutyCycle = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetHigh()
|
||||||
|
{
|
||||||
|
SetValue(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetLow()
|
||||||
|
{
|
||||||
|
SetValue(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LogValue(double value)
|
||||||
|
{
|
||||||
|
if (_logger is null)
|
||||||
|
return;
|
||||||
|
_logger.LogDebug("New value for pin {PinNumber}: {Value}", PinNumber, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LogValueOutOfBounds()
|
||||||
|
{
|
||||||
|
if (_logger is null)
|
||||||
|
return;
|
||||||
|
_logger.LogWarning(
|
||||||
|
"Attempting to set value of pin {PinNumber}, but it's not between 0 and 1.",
|
||||||
|
PinNumber
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue