Просмотр исходного кода

Increased measurement accuracy of the DS18S20 sensor

Victor 3 лет назад
Родитель
Сommit
a2c2bf74e3
3 измененных файлов с 6 добавлено и 3 удалено
  1. 1 1
      interfaces/OneWireSensor.c
  2. 4 0
      unitemp.c
  3. 1 2
      views/SensorEdit_view.c

+ 1 - 1
interfaces/OneWireSensor.c

@@ -401,7 +401,7 @@ UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) {
         }
         int16_t raw = buff[0] | ((int16_t)buff[1] << 8);
         if(instance->familyCode == FC_DS18S20) {
-            sensor->temp = (float)raw / 2.0f;
+            sensor->temp = ((float)raw / 2.0f) - 0.25 + ((float)(buff[7] - buff[6]) / buff[7]);
         } else {
             sensor->temp = (float)raw / 16.0f;
         }

+ 4 - 0
unitemp.c

@@ -9,10 +9,14 @@
 //TODO: Реализовать ограничение на добавление датчиков если интерфейс недоступен
 //TODO: Не выкидывать датчик в ошибку при первом же неудачном опросе
 //TODO: Исправить зависание BMP280
+//TODO: BMP280 SPI
 //TODO: Вид при отсутствии датчиков
 //TODO: Ограничение длины названия датчика (в пикселях) в виде листа датчиков
 //TODO: Ограничение на добавление датчика I2C с адресом уже имеющегося датчика
 //TODO: Ускорить обработку отсутствующих датчиков
+//TODO: Добавить настройку единицы измерения давления
+//TODO: Обновлять данные только с тех датчиков, которые присутствуют на экране
+//TODO: Исправить сканирование one wire существующего датчика
 
 /* Переменные */
 //Данные приложения

+ 1 - 2
views/SensorEdit_view.c

@@ -13,11 +13,11 @@ static VariableItemList* variable_item_list;
 static Sensor* editable_sensor;
 //Изначальный GPIO датчика
 static const GPIO* initial_gpio;
+
 //Элемент списка - имя датчика
 static VariableItem* sensor_name_item;
 //Элемент списка - адрес датчика one wire
 static VariableItem* onewire_addr_item;
-
 //Элемент списка - адрес датчика one wire
 static VariableItem* onewire_type_item;
 
@@ -289,7 +289,6 @@ void unitemp_SensorEdit_switch(Sensor* sensor) {
 
     //Адрес устройства на шине one wire (для датчиков one wire)
     if(sensor->type->interface == &ONE_WIRE) {
-        //Сохранение
         onewire_addr_item = variable_item_list_add(
             variable_item_list, "Address", 2, _onwire_addr_change_callback, NULL);
         OneWireSensor* ow_sensor = sensor->instance;