forked from dotnet/iot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Relay.cs
88 lines (78 loc) · 2.64 KB
/
Relay.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Device.Gpio;
using Iot.Device.GrovePiDevice.Models;
namespace Iot.Device.GrovePiDevice.Sensors
{
/// <summary>
/// Relay module
/// </summary>
public class Relay : DigitalOutput
{
/// <summary>
/// Relay constructor
/// </summary>
/// <param name="grovePi">The GrovePi class</param>
/// <param name="port">The grove Port, need to be in the list of SupportedPorts</param>
public Relay(GrovePi grovePi, GrovePort port)
: this(grovePi, port, false)
{
}
/// <summary>
/// Relay constructor
/// </summary>
/// <param name="grovePi">The GrovePi class</param>
/// <param name="port">The grove Port, need to be in the list of SupportedPorts</param>
/// <param name="inverted">If inverted, the relay is on when output is low and off when output is high</param>
public Relay(GrovePi grovePi, GrovePort port, bool inverted)
: base(grovePi, port)
{
IsInverted = inverted;
}
/// <summary>
/// True when the relay is on
/// </summary>
public bool IsOn => (_value == PinValue.High) && !IsInverted;
/// <summary>
/// Switch on the relay
/// </summary>
public void On()
{
Value = PinValue.Low;
}
/// <summary>
/// Switch off the relay
/// </summary>
public void Off()
{
Value = PinValue.High;
}
/// <summary>
/// If inverted, the relay is on when output is low and off when output is high
/// </summary>
public bool IsInverted { get; internal set; }
/// <summary>
/// Get/set the state of the relay, 0 for off, 1 for on. Wehn set, anything not 0 will be considered as on
/// </summary>
public new PinValue Value
{
get
{
return _value;
}
set
{
_value = value;
_grovePi.DigitalWrite(_port, ((_value == PinValue.High) && !IsInverted) ? PinValue.High : PinValue.Low);
}
}
/// <summary>
/// Get "On" when relay if on and "Off" when relay is off
/// </summary>
public override string ToString() => ((_value == PinValue.High) && !IsInverted) ? "On" : "Off";
/// <summary>
/// Get the name Relay
/// </summary>
public new string SensorName => "Relay";
}
}