программирование mbed os 5 c ++ - PullRequest
0 голосов
/ 31 мая 2018
void rise_handler() { timer.start();}
void fall_handler() { timer.stop(); }
void signal() {
     while(1) {
              if (num > 0.5) {
                 rise_handler();
              } 
              else {
                 fall_handler();
              }
     }
}

У меня есть вход от датчика, и он меняется со временем.Что мне делать, если num больше 0,5 будет вызываться только один раз в цикле while?

1 Ответ

0 голосов
/ 31 мая 2018

Добавить логический флаг.Когда условие истинно, вы устанавливаете флаг, а когда оно ложно, вы очищаете флаг.

Используйте этот флаг в сочетании с условием, чтобы знать, когда вызывать какую функцию.

Пример:

bool flag = false;

while (1)
{
    if (num > 0.5)
    {
        if (!flag)
        {
            // First time above the threshold
            flag = true;
            rise_handler();
        }
    }
    else
    {
        if (flag)
        {
            // First time below the threshold
            flag = false;
            fall_handler();
        }
    }
}
...