Насколько я понимаю, вы используете функцию Arduino delay()
. Плохая идея, поскольку вы блокируете все остальное в своем приложении, ну, вы уже заметили ...
Лучший подход - просто проверить, прошло ли какое-то время, e. г. используя функцию millis
:
static bool isDelay = false;
static unsigned long timestamp;
if(detect())
{
isDelay = true;
timestamp = millis();
}
if(isDelay && millis() - timestamp > 1000)
{
isDelay = false;
}
if(!isDelay)
{
// actions to be taken...
}
Всегда используйте вычитание между отметкой времени и текущим временем & ndash; счетчик времени может переполниться, результат вычитания не изменится, и вы в безопасности ...
Вы можете просто пропустить переменную isDelay
, если вы достаточно уверены, что соответствующее событие всегда происходит по крайней мере один раз между периодами переполнения (около 50 дней):
static unsigned long timestamp = millis() - 1000;
if(detect())
{
timestamp = millis();
}
if(millis() - timestamp > 1000)
{
// actions to be taken...
}
Оба варианта: статические переменные, если предположить, что у вас есть этот код в функции loop
Ардуино (или тот, который вызывается из loop
). Все же предпочитаете заменять магическое число 1000 на макрос, и у вас все хорошо ...