feat: минорые изменения после тестирования

This commit is contained in:
2025-11-28 14:20:24 +03:00
parent 5ff0384def
commit d50557a581
12 changed files with 80 additions and 28 deletions
@@ -9,8 +9,8 @@ public class TemperatureHumidityService : IDisposable
{
public static TemperatureHumidityServiceConfiguration Default => new TemperatureHumidityServiceConfiguration
{
Bus = 0,
Address = 0x44
Bus = 6,
Address = 0x45
};
public int Bus { get; set; }
@@ -54,7 +54,7 @@ public class TemperatureHumidityService : IDisposable
}
}
public async Task<(double temperature, double relativeHumidity)> MeasureAsync(int measurementsCount = 1, CancellationToken cancellationToken = default)
public (double temperature, double relativeHumidity) Measure(int measurementsCount = 1, bool checkCrc = true, CancellationToken cancellationToken = default)
{
// В соответствии с даташитом на SHT45-AD1B-R2 псевдокод измерения с высокой точностью следующий:
// i2c_write(i2c_addr=0x44, tx_bytes=[0xFD])
@@ -90,19 +90,19 @@ public class TemperatureHumidityService : IDisposable
// Отправляем команду
_sensor.Write(command);
// 10 мс ожидания
await Task.Delay(10, cancellationToken);
Task.Delay(10, cancellationToken);
// Читаем данные
_sensor.Read(data);
// Распаковываем данные [2 * 8-bit T-data; 8-bit CRC; 2 * 8-bit RH-data; 8-bit CRC]
ushort temperatureTicks = BitConverter.ToUInt16(data.ToArray(), 0);
byte temperatureChecksum = data[2];
int relativeHumidityTicks = BitConverter.ToUInt16(data.ToArray(), 3);
byte relativeHumidityChecksum = data[5];
ushort temperatureTicks = BitConverter.ToUInt16(data.Slice(0, 2));
int relativeHumidityTicks = BitConverter.ToUInt16(data.Slice(3, 2));
// Проверка по CRC
if (!CheckCrc(data.Slice(0, 2), temperatureChecksum) ||
!CheckCrc(data.Slice(3, 2), relativeHumidityChecksum))
if (checkCrc && (!CheckCrc(data.Slice(0, 2), temperatureChecksum) ||
!CheckCrc(data.Slice(3, 2), relativeHumidityChecksum)))
{
_logger.LogWarning("Temperature and humidity sensor CRC error");
continue;