Пауза в программе в течение некоторого времени
У меня есть переменная timeInSec
, которая записывает время, когда цикл начинается. Он определяется как timeInSec = millis();
. У меня два условия. Если (timeInSec - lastRun)< 5
(то есть 5 секунд), выполняется первое условие (инструкция if). В противном случае, если (timeInSec - lastRun)>5
выполняется второе условие (инструкция else). Вот код:
void loop(){
timeInSec = millis(); // Records time in seconds
// if(lastRun > 0) { // if i run this, only else statement is executed
// delay(10000);
// }
if((timeInSec - lastRun) < 5000){ // Treshold time (if condition which runs when timeInSec is less than 5 seconds)
// Some code
}
else{ // If treshold time exceeds (executes when timeInSec is > 5seconds)
delay(10000); // if i run this, only else statement is executed
lastRun = timeInSec;
}
}
Здесь оператор else
выполняется один раз и управление возвращается if
снова. Я хочу приостановить управление в else
в течение 10 секунд, а затем вернуться к if
для дальнейшего выполнения. Каждый раз, когда элемент управления должен останавливаться на else
в течение 10 секунд. Я использовал delay
в инструкции else
и в этом случае выполняется только оператор else
. То же самое происходит, если я использую delay
в начале цикла (как в коде). Я пробовал без использования delay
, но не удалось.
Спасибо за помощь!
1 ответ
Не пытайтесь изменить millis()
. Вместо этого запишите последний раз
второй код (инструкция else), и проверить, было ли это больше, чем
пять секунд назад:
void loop() {
static uint32_t lastRun;
uint32_t now = millis();
if (now - lastRun < 5000) {
// Some code
}
else {
// Some code
lastRun = now; // record the time
}
}
Это по существу тот же метод, который используется в Blink without задержка Arduino учебник.