У меня проблемы с решением этой проблемы.
У нас есть резервуар для воды высотой 200 см. У меня есть гидролокатор дальности, который возвращает КМ с поверхности воды.
Я могу получить оставшийся уровень воды в порядке, но я хотел бы знать сдвиг уровня (Delta) вверх (дождь) или вниз (использование) и дневной итог, который я буду очищать один раз в день в другом месте.Вот где я до сих пор, и Delta и Daily не имеют смысла.Я позабочусь об обработке ошибок и т. Д., Когда получу то, что мне нужно с уровнями.
Может кто-нибудь переставить это, чтобы сделать то, что мне нужно.
ETO: Очень редко возвращается нулевое сканирование, поэтому оно почти всегда будет переходить к уровням.Поэтому, пожалуйста, для этого предположите, что сканирование никогда ноль.
const int16_t tankHeight = 200;
int16_t pingDistanceLast = 0;
int16_t waterHeightNow = 0;
int16_t waterHeightDelta = 0;
int16_t waterHeightDaily = 0;
void checkLevel() {
uint16_t pingDistanceNow = 0;
uint8_t pingCount = 0;
while ((pingCount < 5) && (pingDistanceNow == 0)) {
pingDistanceNow = sonar.ping_cm(); // Returns any READ error as ZERO
delay(50);
++pingCount;
}
if ((pingDistanceNow > 0) && (pingDistanceLast != pingDistanceNow)) {
waterHeightNow = tankHeight - pingDistanceNow;
waterHeightDelta = pingDistanceLast - pingDistanceNow;
waterHeightDaily += waterHeightDelta;
}
pingDistanceLast = pingDistanceNow;
}
void checkNewDay() {
if (nowSecSM < 2) {
waterHeightDaily = 0;
}
}