diff --git a/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/MeadowApp.cs b/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/MeadowApp.cs index 5055a8ee33..e867b38b84 100644 --- a/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/MeadowApp.cs +++ b/Source/Meadow.Foundation.Core.Samples/Relays.Relay_Sample/MeadowApp.cs @@ -1,6 +1,7 @@ using Meadow; using Meadow.Devices; using Meadow.Foundation.Relays; +using Meadow.Peripherals.Relays; using System.Threading; using System.Threading.Tasks; @@ -23,14 +24,16 @@ public override Task Initialize() public override Task Run() { - var state = false; - while (true) { - state = !state; - - Resolver.Log.Info($"- State: {state}"); - relay.IsOn = state; + var newState = relay.State switch + { + RelayState.Open => RelayState.Closed, + _ => RelayState.Open + }; + + Resolver.Log.Info($"- State: {newState}"); + relay.State = newState; Thread.Sleep(500); } diff --git a/Source/Meadow.Foundation.Core/Relays/Relay.cs b/Source/Meadow.Foundation.Core/Relays/Relay.cs index c343a05daf..b0159df78c 100644 --- a/Source/Meadow.Foundation.Core/Relays/Relay.cs +++ b/Source/Meadow.Foundation.Core/Relays/Relay.cs @@ -9,8 +9,11 @@ namespace Meadow.Foundation.Relays /// public class Relay : IRelay { + private RelayState _state; + private readonly bool _closedValue = true; + /// - public event EventHandler OnRelayChanged = default!; + public event EventHandler OnChanged = default!; /// /// Returns digital output port @@ -25,18 +28,21 @@ public class Relay : IRelay /// /// Whether or not the relay is on. Setting this property will turn it on or off. /// - public bool IsOn + public RelayState State { - get => isOn; + get => _state; set { - isOn = value; - DigitalOut.State = isOn ? onValue : !onValue; - OnRelayChanged?.Invoke(this, isOn); + _state = value; + DigitalOut.State = State switch + { + RelayState.Open => !_closedValue, + _ => _closedValue + }; + + OnChanged?.Invoke(this, State); } } - bool isOn = false; - readonly bool onValue = true; /// /// Creates a new Relay on an IDigitalOutputPort. @@ -58,7 +64,7 @@ public Relay(IDigitalOutputPort port, RelayType type = RelayType.NormallyOpen) { // if it's normally closed, we have to invert the "on" value Type = type; - onValue = Type != RelayType.NormallyClosed; + _closedValue = Type != RelayType.NormallyClosed; DigitalOut = port; } @@ -68,7 +74,11 @@ public Relay(IDigitalOutputPort port, RelayType type = RelayType.NormallyOpen) /// public void Toggle() { - IsOn = !IsOn; + State = State switch + { + RelayState.Open => RelayState.Closed, + _ => RelayState.Open, + }; } } } \ No newline at end of file