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