Closed OloloevReal closed 5 years ago
Поясните подробнее =) 5 импульсов: дельта будет 0.05 * 1000 = 50. Откуда 49?
Если что, в Blynk графики считаются с синхронизацией с календарем, а Ватериус отправляет не строго по часам, поэтому числа на графике другие. p.s. +.5 - если 10л/имп.
5 импульсов: дельта будет 0.05 * 1000 = 50. Откуда 49?
Преобразование float 50.00 в int дает результат 49, не всегда правда, в большинстве случаев.
Ааа вы про вычислительные потери.
Так может переписать: unsigned int delta0 = channel0*1000 - sett.channel0_previous*1000
?
Либо так:
unsigned int delta0 = roundf((channel0 - sett.channel0_previous) * 100 * sett.liters_per_impuls); // litres
unsigned int delta1 = roundf((channel1 - sett.channel1_previous) * 100 * sett.liters_per_impuls);
Некорректная формула. в channel0 хранятся кубометры. Мою используйте и напишите о результатах испытаний, пожалуйста.
unsigned int delta0 = channel0*1000 - sett.channel0_previous*1000
Так преобразование происходит корректно
Некорректная формула. в channel0 хранятся кубометры. Мою используйте и напишите о результатах испытаний, пожалуйста.
Не понял, почему некорректная формула? в channel0/channel1 разве только кубометры? По коду смотрел вроде это показание счетчика со знаками после запятой, т.е. с литрами
Потому что в channel0 хранятся кубометры.
*channel0 = sett.channel0_start + (data.impulses0 - sett.impules0_start) / 1000.0 * sett.liters_per_impuls;
Тут ошибка не накапливается, т.к. каждый раз пересчёт. Кстати, мы можем хранить предыдущее значение импульсов и рассчитывать литры вообще без потерь. Напишите код?
Написал сам =) В следующем релизе сегодня-завтра будет HTTPS и литры без погрешностей =)
Проверяйте. Теперь без делений. Только умножаем на кол-во литров/импульс.
Добрый день!
Обратил внимание на то, что в Blynk отправляется разница показаний за интервал измерения:
В результате такого приведения типов 2 импульса преобразуются не в 20, а в 19, 5 импульсов в 49 и т.д.
Возможно, стоит сделать вот так: