Skip to content

Commit 0b70456

Browse files
authored
[bmxx80] Improvements in units processing (#612)
1 parent c6ecbc0 commit 0b70456

File tree

11 files changed

+151
-58
lines changed

11 files changed

+151
-58
lines changed

devices/Bmxx80/Bme280.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,11 +116,11 @@ public Bme280ReadResult Read()
116116
Thread.Sleep(GetMeasurementDuration());
117117
}
118118

119-
TryReadTemperatureCore(out Temperature temperature);
120-
TryReadPressureCore(out Pressure pressure, skipTempFineRead: true);
121-
TryReadHumidityCore(out RelativeHumidity humidity, skipTempFineRead: true);
119+
var temperatureIsValid = TryReadTemperatureCore(out Temperature temperature);
120+
var presureIsValid = TryReadPressureCore(out Pressure pressure, skipTempFineRead: true);
121+
var humidityIsValid = TryReadHumidityCore(out RelativeHumidity humidity, skipTempFineRead: true);
122122

123-
return new Bme280ReadResult(temperature, pressure, humidity);
123+
return new Bme280ReadResult(temperature, temperatureIsValid, pressure, presureIsValid, humidity, humidityIsValid);
124124
}
125125

126126
/// <summary>

devices/Bmxx80/Bme680.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,7 @@ public bool ReadHeaterIsStable()
289289
[Property("PowerMode")]
290290
public void SetPowerMode(Bme680PowerMode powerMode)
291291
{
292-
if (!powerMode.Equals(Bme680PowerMode.Forced) &&
293-
!powerMode.Equals(Bme680PowerMode.Sleep))
292+
if ((powerMode != Bme680PowerMode.Forced) && (powerMode != Bme680PowerMode.Sleep))
294293
{
295294
throw new ArgumentOutOfRangeException();
296295
}
@@ -421,12 +420,12 @@ public Bme680ReadResult Read()
421420
SetPowerMode(Bme680PowerMode.Forced);
422421
Thread.Sleep((int)GetMeasurementDuration(HeaterProfile).Milliseconds);
423422

424-
TryReadTemperatureCore(out Temperature temperature);
425-
TryReadPressureCore(out Pressure pressure, skipTempFineRead: true);
426-
TryReadHumidityCore(out RelativeHumidity humidity, skipTempFineRead: true);
427-
TryReadGasResistanceCore(out ElectricResistance gasResistance);
423+
var temperatureIsValid = TryReadTemperatureCore(out Temperature temperature);
424+
var pressureIsValid = TryReadPressureCore(out Pressure pressure, skipTempFineRead: true);
425+
var humidityIsValid = TryReadHumidityCore(out RelativeHumidity humidity, skipTempFineRead: true);
426+
var gasResistanceIsValid = TryReadGasResistanceCore(out ElectricResistance gasResistance);
428427

429-
return new Bme680ReadResult(temperature, pressure, humidity, gasResistance);
428+
return new Bme680ReadResult(temperature, temperatureIsValid, pressure, pressureIsValid, humidity, humidityIsValid, gasResistance, gasResistanceIsValid);
430429
}
431430

432431
/// <summary>

devices/Bmxx80/Bmp280.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,10 @@ public Bmp280ReadResult Read()
4141
Thread.Sleep(GetMeasurementDuration());
4242
}
4343

44-
TryReadTemperatureCore(out Temperature temperature);
45-
TryReadPressureCore(out Pressure pressure, skipTempFineRead: true);
44+
var temperatureIsValid = TryReadTemperatureCore(out Temperature temperature);
45+
var presureIsValid = TryReadPressureCore(out Pressure pressure, skipTempFineRead: true);
4646

47-
return new Bmp280ReadResult(temperature, pressure);
47+
return new Bmp280ReadResult(temperature, temperatureIsValid, pressure, presureIsValid);
4848
}
4949
}
5050
}

devices/Bmxx80/Bmxx80.nfproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,14 @@
4141
<Reference Include="mscorlib, Version=1.12.0.4, Culture=neutral, PublicKeyToken=c07d481e9758c731">
4242
<HintPath>packages\nanoFramework.CoreLibrary.1.12.0\lib\mscorlib.dll</HintPath>
4343
<Private>True</Private>
44+
<SpecificVersion>True</SpecificVersion>
4445
</Reference>
4546
<Reference Include="System.Buffers.Binary.BinaryPrimitives, Version=1.2.0.0, Culture=neutral, PublicKeyToken=c07d481e9758c731">
4647
<HintPath>packages\nanoFramework.System.Buffers.Binary.BinaryPrimitives.1.2.141\lib\System.Buffers.Binary.BinaryPrimitives.dll</HintPath>
4748
<Private>True</Private>
4849
</Reference>
49-
<Reference Include="System.Device.I2c, Version=1.0.3.3, Culture=neutral, PublicKeyToken=c07d481e9758c731">
50+
<Reference Include="System.Device.I2c">
5051
<HintPath>packages\nanoFramework.System.Device.I2c.1.0.3\lib\System.Device.I2c.dll</HintPath>
51-
<Private>True</Private>
5252
</Reference>
5353
<Reference Include="System.Device.Model, Version=1.2.0.0, Culture=neutral, PublicKeyToken=c07d481e9758c731">
5454
<HintPath>packages\nanoFramework.System.Device.Model.1.2.141\lib\System.Device.Model.dll</HintPath>
@@ -84,7 +84,6 @@
8484
</Reference>
8585
</ItemGroup>
8686
<ItemGroup>
87-
<None Include="packages.config" />
8887
<Compile Include="Bme280.cs" />
8988
<Compile Include="Bme680.cs" />
9089
<Compile Include="Bme680HeaterProfile.cs" />
@@ -116,6 +115,7 @@
116115
<ItemGroup>
117116
<Compile Include="Properties\AssemblyInfo.cs" />
118117
<None Include="*.md" />
118+
<None Include="packages.config" />
119119
</ItemGroup>
120120
<Import Project="$(NanoFrameworkProjectSystemPath)NFProjectSystem.CSharp.targets" Condition="Exists('$(NanoFrameworkProjectSystemPath)NFProjectSystem.CSharp.targets')" />
121121
<ProjectExtensions>

devices/Bmxx80/ReadResult/Bme280ReadResult.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,26 @@ public class Bme280ReadResult : Bmp280ReadResult
1515
/// </summary>
1616
public RelativeHumidity Humidity { get; }
1717

18+
/// <summary>
19+
/// Gets a value indicating whether last humidity value read was successful.
20+
/// </summary>
21+
public bool HumidityIsValid { get; }
22+
1823
/// <summary>
1924
/// Initializes a new instance of the <see cref="Bme280ReadResult" /> class.
2025
/// </summary>
2126
/// <param name="temperature">The <see cref="Temperature"/> measurement.</param>
27+
/// <param name="temperatureIsValid">Last temperature value read was successful.</param>
2228
/// <param name="pressure">The <see cref="Pressure"/> measurement.</param>
29+
/// <param name="pressureIsValid">Last pressure value read was successful.</param>
2330
/// <param name="humidity">The humidity measurement.</param>
24-
public Bme280ReadResult(Temperature temperature, Pressure pressure, RelativeHumidity humidity)
25-
: base(temperature, pressure)
31+
/// <param name="humidityIsValid">Last humidity value read was successful.</param>
32+
public Bme280ReadResult(Temperature temperature, bool temperatureIsValid, Pressure pressure, bool pressureIsValid, RelativeHumidity humidity, bool humidityIsValid)
33+
: base(temperature, temperatureIsValid, pressure, pressureIsValid)
2634
{
2735
Humidity = humidity;
36+
37+
HumidityIsValid = humidityIsValid;
2838
}
2939
}
3040
}

devices/Bmxx80/ReadResult/Bme680ReadResult.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,28 @@ public class Bme680ReadResult : Bme280ReadResult
1515
/// </summary>
1616
public ElectricResistance GasResistance { get; }
1717

18+
/// <summary>
19+
/// Gets a value indicating whether last gas resistance value read was successful.
20+
/// </summary>
21+
public bool GasResistanceIsValid { get; }
22+
1823
/// <summary>
1924
/// Initializes a new instance of the <see cref="Bme680ReadResult" /> class.
2025
/// </summary>
2126
/// <param name="temperature">The <see cref="Temperature"/> measurement.</param>
27+
/// <param name="temperatureIsValid">Last temperature value read was successful.</param>
2228
/// <param name="pressure">The <see cref="Pressure"/> measurement.</param>
29+
/// <param name="pressureIsValid">Last pressure value read was successful.</param>
2330
/// <param name="humidity">The humidity measurement.</param>
31+
/// <param name="humidityIsValid">Last humidity value read was successful.</param>
2432
/// <param name="gasResistance">The gas resistance measurement.</param>
25-
public Bme680ReadResult(Temperature temperature, Pressure pressure, RelativeHumidity humidity, ElectricResistance gasResistance)
26-
: base(temperature, pressure, humidity)
33+
/// <param name="gasResistanceIsValid">Last gas resistance value read successful.</param>
34+
public Bme680ReadResult(Temperature temperature, bool temperatureIsValid, Pressure pressure, bool pressureIsValid, RelativeHumidity humidity, bool humidityIsValid, ElectricResistance gasResistance, bool gasResistanceIsValid)
35+
: base(temperature, temperatureIsValid, pressure, pressureIsValid, humidity, humidityIsValid)
2736
{
2837
GasResistance = gasResistance;
38+
39+
GasResistanceIsValid = gasResistanceIsValid;
2940
}
3041
}
3142
}

devices/Bmxx80/ReadResult/Bmp280ReadResult.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,35 @@ public class Bmp280ReadResult
1515
/// </summary>
1616
public Temperature Temperature { get; }
1717

18+
/// <summary>
19+
/// Gets a value indicating whether the last temperature value read was successful.
20+
/// </summary>
21+
public bool TemperatureIsValid { get; }
22+
1823
/// <summary>
1924
/// Gets the collected pressure measurement.
2025
/// </summary>
2126
public Pressure Pressure { get; }
2227

28+
/// <summary>
29+
/// Gets a value indicating whether the Last pressure value read was successful.
30+
/// </summary>
31+
public bool PressureIsValid { get; }
32+
2333
/// <summary>
2434
/// Initializes a new instance of the <see cref="Bmp280ReadResult" /> class.
2535
/// </summary>
2636
/// <param name="temperature">The <see cref="Temperature"/> measurement.</param>
37+
/// <param name="temperatureIsValid">Last temperature value read was successful.</param>
2738
/// <param name="pressure">The <see cref="Pressure"/> measurement.</param>
28-
public Bmp280ReadResult(Temperature temperature, Pressure pressure)
39+
/// <param name="pressureIsValid">Last pressure value read was successful.</param>
40+
public Bmp280ReadResult(Temperature temperature, bool temperatureIsValid, Pressure pressure, bool pressureIsValid)
2941
{
30-
Temperature = temperature;
31-
Pressure = pressure;
42+
Temperature = temperature;
43+
TemperatureIsValid = temperatureIsValid;
44+
45+
Pressure = pressure;
46+
PressureIsValid = pressureIsValid;
3247
}
3348
}
3449
}

devices/Bmxx80/samples/Bme280.sample.cs

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public static void RunSample()
2828
// set this to the current sea level pressure in the area for correct altitude readings
2929
Pressure defaultSeaLevelPressure = WeatherHelper.MeanSeaLevel;
3030

31-
I2cConnectionSettings i2cSettings = new(busId, Bme280.DefaultI2cAddress);
31+
I2cConnectionSettings i2cSettings = new(busId, Bme280.SecondaryI2cAddress);
3232
using I2cDevice i2cDevice = I2cDevice.Create(i2cSettings);
3333
using Bme280 bme80 = new Bme280(i2cDevice)
3434
{
@@ -47,13 +47,27 @@ public static void RunSample()
4747
// var altValue = WeatherHelper.CalculateAltitude(preValue, defaultSeaLevelPressure, tempValue) which would be more performant.
4848
bme80.TryReadAltitude(defaultSeaLevelPressure, out var altValue);
4949

50-
Debug.WriteLine($"Temperature: {readResult.Temperature.DegreesCelsius}\u00B0C");
51-
Debug.WriteLine($"Pressure: {readResult.Pressure.Hectopascals}hPa");
52-
Debug.WriteLine($"Altitude: {altValue.Meters}m");
53-
Debug.WriteLine($"Relative humidity: {readResult.Humidity.Percent}%");
50+
if (readResult.TemperatureIsValid)
51+
{
52+
Debug.WriteLine($"Temperature: {readResult.Temperature.DegreesCelsius}\u00B0C");
53+
}
54+
if (readResult.PressureIsValid)
55+
{
56+
Debug.WriteLine($"Pressure: {readResult.Pressure.Hectopascals}hPa");
57+
}
58+
59+
if (readResult.TemperatureIsValid && readResult.PressureIsValid)
60+
{
61+
Debug.WriteLine($"Altitude: {altValue.Meters}m");
62+
}
63+
64+
if (readResult.HumidityIsValid)
65+
{
66+
Debug.WriteLine($"Relative humidity: {readResult.Humidity.Percent}%");
67+
}
5468

5569
// WeatherHelper supports more calculations, such as saturated vapor pressure, actual vapor pressure and absolute humidity.
56-
if (!readResult.Temperature.Equals(null) && !readResult.Humidity.Equals(null))
70+
if (readResult.TemperatureIsValid && readResult.HumidityIsValid)
5771
{
5872
Debug.WriteLine($"Heat index: {WeatherHelper.CalculateHeatIndex(readResult.Temperature, readResult.Humidity).DegreesCelsius}\u00B0C");
5973
Debug.WriteLine($"Dew point: {WeatherHelper.CalculateDewPoint(readResult.Temperature, readResult.Humidity).DegreesCelsius}\u00B0C");
@@ -74,13 +88,24 @@ public static void RunSample()
7488
// var altValue = WeatherHelper.CalculateAltitude(preValue, defaultSeaLevelPressure, tempValue) which would be more performant.
7589
bme80.TryReadAltitude(defaultSeaLevelPressure, out altValue);
7690

77-
Debug.WriteLine($"Temperature: {readResult.Temperature.DegreesCelsius}\u00B0C");
78-
Debug.WriteLine($"Pressure: {readResult.Pressure.Hectopascals}hPa");
91+
if (readResult.TemperatureIsValid)
92+
{
93+
Debug.WriteLine($"Temperature: {readResult.Temperature.DegreesCelsius}\u00B0C");
94+
}
95+
if (readResult.PressureIsValid)
96+
{
97+
Debug.WriteLine($"Pressure: {readResult.Pressure.Hectopascals}hPa");
98+
}
99+
79100
Debug.WriteLine($"Altitude: {altValue.Meters}m");
80-
Debug.WriteLine($"Relative humidity: {readResult.Humidity.Percent}%");
101+
102+
if (readResult.HumidityIsValid)
103+
{
104+
Debug.WriteLine($"Relative humidity: {readResult.Humidity.Percent}%");
105+
}
81106

82107
// WeatherHelper supports more calculations, such as saturated vapor pressure, actual vapor pressure and absolute humidity.
83-
if (!readResult.Temperature.Equals(null) && !readResult.Humidity.Equals(null))
108+
if (readResult.TemperatureIsValid && readResult.HumidityIsValid)
84109
{
85110
Debug.WriteLine($"Heat index: {WeatherHelper.CalculateHeatIndex(readResult.Temperature, readResult.Humidity).DegreesCelsius}\u00B0C");
86111
Debug.WriteLine($"Dew point: {WeatherHelper.CalculateDewPoint(readResult.Temperature, readResult.Humidity).DegreesCelsius}\u00B0C");

devices/Bmxx80/samples/Bme680.sample.cs

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,33 @@ public static void RunSample()
4444
var readResult = bme680.Read();
4545

4646
// Print out the measured data
47-
Debug.WriteLine($"Gas resistance: {readResult.GasResistance.Ohms}Ohm");
48-
Debug.WriteLine($"Temperature: {readResult.Temperature.DegreesCelsius}\u00B0C");
49-
Debug.WriteLine($"Pressure: {readResult.Pressure.Hectopascals}hPa");
50-
Debug.WriteLine($"Relative humidity: {readResult.Humidity.Percent}%");
47+
if (readResult.GasResistanceIsValid)
48+
{
49+
Debug.WriteLine($"Gas resistance: {readResult.GasResistance.Ohms}Ohm");
50+
}
51+
if (readResult.TemperatureIsValid)
52+
{
53+
Debug.WriteLine($"Temperature: {readResult.Temperature.DegreesCelsius}\u00B0C");
54+
}
55+
if (readResult.PressureIsValid)
56+
{
57+
Debug.WriteLine($"Pressure: {readResult.Pressure.Hectopascals}hPa");
58+
}
59+
if (readResult.HumidityIsValid)
60+
{
61+
Debug.WriteLine($"Relative humidity: {readResult.Humidity.Percent}%");
62+
}
5163

52-
if (!readResult.Temperature.Equals(null) && !readResult.Pressure.Equals(null))
64+
if (readResult.TemperatureIsValid && readResult.PressureIsValid)
5365
{
5466
var altValue = WeatherHelper.CalculateAltitude(readResult.Pressure, defaultSeaLevelPressure, readResult.Temperature);
5567
Debug.WriteLine($"Altitude: {altValue.Meters}m");
5668
}
5769

58-
if (!readResult.Temperature.Equals(null) && !readResult.Humidity.Equals(null))
70+
if (readResult.TemperatureIsValid && readResult.HumidityIsValid)
5971
{
6072
// WeatherHelper supports more calculations, such as saturated vapor pressure, actual vapor pressure and absolute humidity.
61-
Debug.WriteLine($"Heat index: {WeatherHelper.CalculateHeatIndex(readResult.Temperature, readResult. Humidity).DegreesCelsius}\u00B0C");
73+
Debug.WriteLine($"Heat index: {WeatherHelper.CalculateHeatIndex(readResult.Temperature, readResult.Humidity).DegreesCelsius}\u00B0C");
6274
Debug.WriteLine($"Dew point: {WeatherHelper.CalculateDewPoint(readResult.Temperature, readResult.Humidity).DegreesCelsius}\u00B0C");
6375
}
6476

@@ -83,18 +95,30 @@ public static void RunSample()
8395
var readResult = bme680.Read();
8496

8597
// Print out the measured data
86-
Debug.WriteLine($"Gas resistance: {readResult.GasResistance.Ohms}Ohm");
87-
Debug.WriteLine($"Temperature: {readResult.Temperature.DegreesCelsius}\u00B0C");
88-
Debug.WriteLine($"Pressure: {readResult.Pressure.Hectopascals}hPa");
89-
Debug.WriteLine($"Relative humidity: {readResult.Humidity.Percent}%");
98+
if (readResult.GasResistanceIsValid)
99+
{
100+
Debug.WriteLine($"Gas resistance: {readResult.GasResistance.Ohms}Ohm");
101+
}
102+
if (readResult.TemperatureIsValid)
103+
{
104+
Debug.WriteLine($"Temperature: {readResult.Temperature.DegreesCelsius}\u00B0C");
105+
}
106+
if (readResult.PressureIsValid)
107+
{
108+
Debug.WriteLine($"Pressure: {readResult.Pressure.Hectopascals}hPa");
109+
}
110+
if (readResult.HumidityIsValid)
111+
{
112+
Debug.WriteLine($"Relative humidity: {readResult.Humidity.Percent}%");
113+
}
90114

91-
if (!readResult.Temperature.Equals(null) && !readResult.Pressure.Equals(null))
115+
if (readResult.TemperatureIsValid && readResult.PressureIsValid)
92116
{
93117
var altValue = WeatherHelper.CalculateAltitude(readResult.Pressure, defaultSeaLevelPressure, readResult.Temperature);
94118
Debug.WriteLine($"Altitude: {altValue.Meters}m");
95119
}
96120

97-
if (!readResult.Temperature.Equals(null) && !readResult.Humidity.Equals(null))
121+
if (!readResult.TemperatureIsValid && readResult.HumidityIsValid)
98122
{
99123
// WeatherHelper supports more calculations, such as saturated vapor pressure, actual vapor pressure and absolute humidity.
100124
Debug.WriteLine($"Heat index: {WeatherHelper.CalculateHeatIndex(readResult.Temperature, readResult.Humidity).DegreesCelsius}\u00B0C");
@@ -104,7 +128,6 @@ public static void RunSample()
104128
Thread.Sleep(1000);
105129
}
106130
}
107-
108131
}
109132
}
110133
}

0 commit comments

Comments
 (0)