Using Millis() and a while if statement is creating a delay to read other callfn

A function called Sensor() should be just sensing. Don't have it also do the timing and output.

Your main loop could look something like...

void loop() {
  Sensor();
  if(sensedSomethingNew()) startTimer();
  if(timerIsActive) turnOutputOn(); else turnOutputOff();
}