Как заменить delay()?

202
24 января 2022, 23:50

Есть 4 метода Clock();Data();Temp();Hum();. Кусочек кода надо сделать без delay(). Как это можно реализовать? Не получается. Например сначала срабатывает Clock(),потом Hum(),снова Clock(),потом Temp() и Hum(). Код:

Clock();
delay(5000);
Data();
delay(2000);
Temp();
delay(2000);
Hum();
delay(2000); 
Моя 1 попытка:
void loop() {
  if (round(millis() / 5000) % 2 == 0) {
    Clock();
  }
  if (round(millis() / 2000) % 2 == 0) {
    Data();
  }
  if (round(millis() / 2000) % 2 == 0) {
    Temp();
  }
  if (round(millis() / 2000) % 2 == 0) {
    Hum();
  }
}
2 попытка:
if ( millis() - time1 > 5000)
  {
    Clock();
    time1 = millis();
  }
  if ( millis() - time2 > 2000)
  {
    Data();
    time2 = millis();
  }
  if ( millis() - time3 > 2000)
  {
    Temp();
    time3 = millis();
  }
  if ( millis() - time4 > 2000)
  {
    Hum();
    time4 = millis();
  }
3 попытка:
if ( millis() - time1 > 5000)
  {
    Clock();
    time1 = millis();
  }
  else
  {
    Data();
  }
  if ( millis() - time2 > 2000)
  {
    Temp();
    time2 = millis();
  }
  else
  {
    Hum();
  }
Answer 1

Я бы сделал как-то так:

void loop() {
  uint8_t cycle = (millis() / 1000) % 11;
  if      (cycle < 5) { Clock(); } 
  else if (cycle < 7) { Data(); }
  else if (cycle < 9) { Temp(); }
  else                  { Hum();  }
}

round(millis() / 1000)

Здесь деление и так целочисленное. Дополнительно округлять результат не нужно.

Answer 2

Вы можете использовать для каждого метода:

if( millis()-time > 2000) //2 сек к примеру
READ ALSO
Запуск программы в правом углу C#

Запуск программы в правом углу C#

мне необходимо что бы программа(то есть форма) при запуске сразу находилась в правом верхнем углу

76
Ссылка для поделиться в одноклассники?

Ссылка для поделиться в одноклассники?

Ссылка для поделиться в одноклассники? Подскажите, как правильно сделать ссылку , чтобы поделить постом в одноклассники?

114
Не кодирует кавычки

Не кодирует кавычки

Делаем так: echo json_encode(['id' => 123], JSON_HEX_QUOT);

84
SELECT * FROM msql

SELECT * FROM msql

Подскажите можно сделать выборку на уровни запроса например мне нужно вывести все значения которые будут иметь такой вид PO-01202-1454 SELECT model FROM и выводились...

77