Моя логика не дотягивает до уровней пинга - PullRequest
0 голосов
/ 09 мая 2019

У меня проблемы с решением этой проблемы.

У нас есть резервуар для воды высотой 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...