Multitask using millis(), interrupts, timealarm() in combination with for() loops

Since you didn't post example code to play with, consider the difference between running this program with HOBBLE=true and HOBBLE=false

bool HOBBLE = true;
int NUM = 20;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
}

void loop() {
  if (HOBBLE) {
    for (int ii = 0; ii < NUM ; ++ii) {
      Serial.print(ii);
      Serial.print(" ");
      delay(100);
    }
    Serial.println();
  }
  else // un-HOBBLED
  {
    replacement();
  }
  Serial.print("."); // or other things
}

void replacement() {
  static int ii;
  uint32_t now = millis();
  const uint32_t interval = 100;
  static uint32_t last = 0; // remember for next time
  if (now - last >= interval) {
    last = now;
    Serial.print(ii);
    Serial.print(" ");
    ii += 1;
    if (ii >= NUM) {
      Serial.println();
      ii = 0;
    }
  }
}

and consider these:

1 Like