Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
Sample project(s) available on GitHub
Syntax
public class SwitchingAnemometer : PollingSensorBase<Speed>, IObservable<IChangeResult<Speed>>, IAnemometer, ISamplingSensor<Speed>, ISensor<Speed>, IDisposable
Constructors
SwitchingAnemometer(IDigitalInterruptPort)
Creates a new switching anemometer using the specific IDigitalInputPort
.
Declaration
public SwitchingAnemometer(IDigitalInterruptPort inputPort)
Parameters
Type | Name | Description |
---|---|---|
IDigitalInterruptPort | inputPort |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
SwitchingAnemometer(IPin)
Creates a new SwitchingAnemometer
using the specific digital input
on the device.
Declaration
public SwitchingAnemometer(IPin digitalInputPin)
Parameters
Type | Name | Description |
---|---|---|
IPin | digitalInputPin |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
Properties
IsDisposed
Is the object disposed
Declaration
public bool IsDisposed { get; }
Property Value
Type | Description |
---|---|
bool |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
KmhPerSwitchPerSecond
Calibration for how fast the wind speed is when the switch is hit
once per second. Used to calculate the wind speed based on the time
duration between switch events. Default is 2.4kmh
.
Declaration
public float KmhPerSwitchPerSecond { get; set; }
Property Value
Type | Description |
---|---|
float |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
NoWindTimeout
Time to wait if no events come in to register a zero speed wind
Declaration
public TimeSpan NoWindTimeout { get; set; }
Property Value
Type | Description |
---|---|
TimeSpan |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
OneTimeReadDuration
Time to capture samples for a one time Read if IsSampling is false
Declaration
public TimeSpan OneTimeReadDuration { get; set; }
Property Value
Type | Description |
---|---|
TimeSpan |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
SampleCount
Number of samples to take for a reading
Declaration
public int SampleCount { get; set; }
Property Value
Type | Description |
---|---|
int |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
WindSpeed
The current wind speed
Declaration
public Speed? WindSpeed { get; protected set; }
Property Value
Type | Description |
---|---|
Speed? |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
Methods
Dispose()
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
Declaration
public void Dispose()
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
Dispose(bool)
Dispose of the object
Declaration
protected virtual void Dispose(bool disposing)
Parameters
Type | Name | Description |
---|---|---|
bool | disposing | Is disposing |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
RaiseEventsAndNotify(IChangeResult<Speed>)
Raise events for subscribers and notify of value changes
Declaration
protected override void RaiseEventsAndNotify(IChangeResult<Speed> changeResult)
Parameters
Type | Name | Description |
---|---|---|
IChangeResult<Speed> | changeResult | The updated sensor data |
Overrides
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
ReadSensor()
Reads data from the sensor
Declaration
protected override Task<Speed> ReadSensor()
Returns
Type | Description |
---|---|
Task<Speed> | The latest sensor reading |
Overrides
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
StartUpdating(TimeSpan?)
Starts continuously sampling the sensor
This method also starts raising Updated
events and IObservable
subscribers getting notified. Use the standbyDuration
parameter
to specify how often events and notifications are raised/sent.
Declaration
public override void StartUpdating(TimeSpan? updateInterval = null)
Parameters
Type | Name | Description |
---|---|---|
TimeSpan? | updateInterval |
Overrides
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
StopUpdating()
Stops the driver from raising wind speed events
Declaration
public override void StopUpdating()
Overrides
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
SwitchIntervalToKmh(TimeSpan)
A wind speed of 2.4km/h causes the switch to close once per second
Declaration
protected float SwitchIntervalToKmh(TimeSpan interval)
Parameters
Type | Name | Description |
---|---|---|
TimeSpan | interval | The interval between signals |
Returns
Type | Description |
---|---|
float |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}
Events
WindSpeedUpdated
Raised when the speed of the wind changes
Declaration
public event EventHandler<IChangeResult<Speed>> WindSpeedUpdated
Event Type
Type | Description |
---|---|
EventHandler<IChangeResult<Speed>> |
Remarks
SwitchingAnemometer | |
---|---|
Status | |
Source code | GitHub |
Datasheet(s) | GitHub |
NuGet package |
Code Example
SwitchingAnemometer anemometer;
public override Task Initialize()
{
Resolver.Log.Info("Initialize...");
anemometer = new SwitchingAnemometer(Device.Pins.A01);
//==== classic events example
anemometer.WindSpeedUpdated += (sender, result) =>
{
Resolver.Log.Info($"new speed: {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
};
//==== IObservable example
var observer = SwitchingAnemometer.CreateObserver(
handler: result =>
{
Resolver.Log.Info($"new speed (from observer): {result.New.KilometersPerHour:n1}kmh, old: {result.Old?.KilometersPerHour:n1}kmh");
},
null
);
anemometer.Subscribe(observer);
return Task.CompletedTask;
}
public override Task Run()
{
// start raising updates
anemometer.StartUpdating();
Resolver.Log.Info("Hardware initialized.");
return Task.CompletedTask;
}