Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как сделать задержку без использования delay

Денис Бекетов Знаток (447), закрыт 7 лет назад
я попробовал реализовать функцией возвращающей 1 при достижении определённого количества милисекунд. но когда я хочу сделать несколько вызовов (с различными аргументами) то выполняется только самая минимальная
вот код:

bool timer(int zaderjka)
{
static unsigned long previousMillis = 0;

if(millis() - previousMillis > zaderjka) {
previousMillis = millis();
return true;
}
else { return false;}
}
Вот вызов :

if(timer(5000) == true) {
Serial.println('1');
}
if(timer(10000) == true) {
Serial.println('2');
}
if(timer(1000) == true) {
Serial.println(millis()); //выполняется только эта часть
}
Лучший ответ
Карлсон Оракул (65591) 7 лет назад
Так ты в отладке посмотри что у тебя в коде творится. Что за millis?
Используй sleep(value);

int getCurrentTime(){
SYSTEMTIME time;
GetSystemTime(&time);
return (time.wSecond * 1000) + time.wMilliseconds;
}

void timer(int delay){
int startTime = getCurrentTime();
while (startTime + delay > getCurrentTime());
return;
}
Остальные ответы
Daniel Bovet Мыслитель (5185) 7 лет назад
ulong prev_time=0;
void wait(ulong tm)
{
while(1)
{
if(get_current_time()-prev_time>tm)
{
prev_time=get_current_time();
return;
}
}
}

//-call-//
prev_time=get_current_time();//-в первый раз-//
wait(1000);

Как-то так абстрактно я бы делал
Похожие вопросы