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

Sure

/* 
 * PIR SENSOR with a count for every event and a millis pause when active 
 */

/////////////////////////////
int period = 10;                       // minutes
unsigned long time_now = 0;
unsigned long time_now2 = 0; 
unsigned long time_now3 = 0;
unsigned long time_now4 = 0;
unsigned long time_now5 = 0;
int counter = 0;

//VARS
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)

#define blueLed 13

unsigned long previousMillis = 0;        // stores last time Led blinked

long interval = 200;           // interval at which to blink (milliseconds)

//----------
int calibrationTime = 10;        

//the time when the sensor outputs a low impulse
long unsigned int lowIn;         

//the amount of milliseconds the sensor has to be low 
//before we assume all motion has stopped
long unsigned int pause = 1000;  

boolean lockLow = true;
boolean takeLowTime;  

int pirPin = 2;    //the digital pin connected to the PIR sensor's output
int ledPin = 12;   // solenoid pin


/////////////////////////////
//SETUP
void setup(){
  Serial.begin(9600);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  digitalWrite(pirPin, LOW);
//----
    // set the digital pin as output:
  pinMode(blueLed, OUTPUT);
//----
  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
    for(int i = 0; i < calibrationTime; i++){
      Serial.print(".");
      delay(1000);
      }
    Serial.println(" done");
    Serial.println("SENSOR ACTIVE");
    delay(50);
    
  }

////////////////////////////
//LOOP

void loop(){
       
       Ser();
       Blink();
       time_now = millis();
       Sensor();
}
       
void Ser()  {

if(millis() > time_now4 + 10000){
    Serial.println();
    Serial.print("The number of events : ");
    Serial.print(counter);
    Serial.println();
    Serial.print(period);
    Serial.print("   - Minutes for delay on");
        Serial.println();
  time_now4 = millis();}
  }
       
  void Sensor()   {
       if(digitalRead(pirPin) == HIGH){
            while(millis() < time_now + period*60000){
              if(millis() > time_now5 + period*60000){
              counter = counter+1;
               Serial.println("The number of events : "); 
               Serial.println(counter);
                time_now5 = millis();}
              digitalWrite(ledPin, LOW);   //the led visualizes the sensors output pin state
              if(millis() > time_now2 + 10000){
              Serial.print("motion detected HOLD ");
              Serial.print(millis()/1000);
              Serial.println(" sec"); 
              delay(50);
              time_now2 = millis();
              }
              takeLowTime = true;  
            if(lockLow){                  //makes sure we wait for a transition to LOW before any further output is made:
             lockLow = false;
             if(millis() > time_now3 + 1000){            
             Serial.println("---");
             Serial.print("motion detected at ");
             Serial.print(millis()/1000);
             Serial.println(" sec"); 
             delay(50);
             time_now3 = millis();
             }  
            }     
           }
       }
       

     if(digitalRead(pirPin) == LOW){       
       digitalWrite(ledPin, HIGH);  //the led visualizes the sensors output pin state

       if(takeLowTime){
        lowIn = millis();          //save the time of the transition from high to LOW
        takeLowTime = false;       //make sure this is only done at the start of a LOW phase
        }
       //if the sensor is low for more than the given pause, 
       //we assume that no more motion is going to happen
       if(!lockLow && millis() - lowIn > pause){  
           //makes sure this block of code is only executed again after 
           //a new motion sequence has been detected
           lockLow = true;
           if(millis() > time_now2 + 1000){ 
           Serial.println("---");                       
           Serial.print("motion ended at ");      //output
           Serial.print((millis() - pause)/1000);
           Serial.println(" sec");
           delay(50);
           time_now2 = millis();
           }
       }
       }
  }
void Blink()      {
        //-/---
        if (millis() - previousMillis >= interval) {
                                                          // save the last time you blinked the LED
        previousMillis = millis();
        digitalWrite(blueLed, !digitalRead(blueLed));     //change led state
    
  }
}