Задержка в функции

Да, недоделал.)) Нужна ещё одна проверка. Но это не лучше, чем у Alexey_Rem , просто как вариант. Избавиться от глобального флага не удалось. Надо будет ещё позаниматься.

Не совсем понял, зачем в 1-ом посте второй раз пишем инструкции до задержки (стр.17).

Ещё ,как вариант, делить функцию с задержкой на две функции и вызывать их по таймеру из loop().

bool funct_del_flag = false;
unsigned long d_time = 0;

void setup() {
  Serial.begin(9600);
  delay(300);
}

void funct()
{
  if (!funct_del_flag) {
    Serial.println("ON");
    //...инструкции до задержки
    funct_del_flag = true;
  }
  if (funct_del_flag) {

    if ((millis() - d_time) >= 1000) {
      d_time = millis();
      funct_del_flag = false;
      Serial.println("OFF");
      //...инструкции после задержки
    }
    else {
      return;
    }
  }

}


void loop() {
  //  ...
  funct();
  //  ...
}

P.S. Ну я и тупорез))!!! Глянул на свежую голову - в таком варианте и return не нужен)))

bool funct_del_flag = false;
unsigned long d_time = 0;

void setup() {
  Serial.begin(9600);
  delay(300);
}

void funct()
{
  if (!funct_del_flag) {
    Serial.println("ON");
    //...инструкции до задержки
    funct_del_flag = true;
  }
  if (funct_del_flag) {

    if ((millis() - d_time) >= 1000) {
      d_time = millis();
      funct_del_flag = false;
      Serial.println("OFF");
      //...инструкции после задержки
    }
  }
}

void loop() {
  //  ...
  funct();
  //  ...
}