Re: using millis() for timing

Another way of 'cheating', but not as elegant as I would like...

long returnedValue = 0;

void setup() {
  Serial.begin(9600);

}

void doFunctionAtInterval( void ( *callBackFunction )(), unsigned long *nextEvent, unsigned long interval ) {
  unsigned long now = millis();
  if ( now  >= *nextEvent ) {
    *nextEvent = now + interval;
    callBackFunction();
  }
}

void doFunctionAtInterval( long ( *callBackFunction )(), long *value, unsigned long *nextEvent, unsigned long interval ) {
  unsigned long now = millis();
  if ( now  >= *nextEvent ) {
    *nextEvent = now + interval;
    *value = callBackFunction();
  }
}


void loop() {
  doFunctionAtInterval(voidNoArgsFunction, &nextVoidNoArgsFunction, 400);
  doFunctionAtInterval(noArgFunction, &returnedValue, &nextVoidOneArgFunction, 1000);
}

long noArgFunction() {
  return random(0,100);
}

void voidNoArgsFunction() {
  Serial.println(returnedValue);
}