L298n speed control not working

While working on the code and improving it I encountered another problem. When scan2 completes and starts scan1, scan1 doesn't complete and scan2 starts again. Here is the new code

#include <Servo.h>
#include <Wire.h>
#include <Adafruit_MLX90614.h>

#define len 10

Adafruit_MLX90614 mlx;

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

int flame_sensor = 8;
int flame = 0;
int motor1pin1 = 2;
int motor1pin2 = 3;
int motor2pin1 = 4;
int motor2pin2 = 5;
float d1 = 3.4;
float temp = 0;
float fire_temp = 39.0;
int motorspeed = 100;
int motor1speedpin = 11;
int motor2speedpin = 6;
float scan_temp = 0;
float max_temp = 0;
float scan_temp_array[len];
int degree = 0;
int pos1 = 0;
int pos2 = 0;
int equal = 0;
int i = 0;
long sum = 0;
int pump = 7;

void setup() {
  Serial.begin(9600);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  myservo.write(90);
  pinMode(motor1pin1, OUTPUT);
  pinMode(motor1pin2, OUTPUT);
  pinMode(motor2pin1, OUTPUT);
  pinMode(motor2pin2, OUTPUT);
  pinMode(motor1speedpin, OUTPUT);
  pinMode(motor2speedpin, OUTPUT);
  pinMode(flame_sensor, INPUT);
  mlx.begin();
  
}
void put_of_fire(){
  digitalWrite(pump, HIGH);
  for (pos = 45; pos <= 135; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(30);
  }
  digitalWrite(pump, LOW);
}
void scan1() {
  Serial.println("scan1");
  for (pos = 45; pos <= 135; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    sum = 0;
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(5);
    Serial.println(len);
    for (i = 0; i<=len; i+=1) {
      scan_temp_array[i]=mlx.readObjectTempC();
      delay(1);
    }
    Serial.println("read");
    for (i = 0; i<=len; i+=1) {
      sum += scan_temp_array[i];
    }
    Serial.println("added");
    scan_temp = roundf(sum/len);
    Serial.println(scan_temp);
    if (scan_temp >= max_temp){
      if (scan_temp != max_temp){
        max_temp = scan_temp;
        degree = pos;
      }
      else {
        equal=1;
        if (pos<90) {
          pos1 = pos;
        } 
        else {
          pos2 = pos;
        }
      }
    }
  }
  if (equal == 1) {
  degree = (pos1+pos2)/2;
  }
  if (degree<90){
  digitalWrite(motor1speedpin, HIGH);
  digitalWrite(motor1pin1, HIGH);
  digitalWrite(motor1pin2, LOW);

  digitalWrite(motor2speedpin, HIGH);
  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, HIGH);

  delay(d1*(90-degree));

  digitalWrite(motor1pin1, LOW);
  digitalWrite(motor1pin2, LOW);

  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, LOW);
  myservo.write(90);
  return;
} else if(degree>90){
  digitalWrite(motor1speedpin, HIGH);
  digitalWrite(motor1pin1, LOW);
  digitalWrite(motor1pin2, HIGH);

  digitalWrite(motor2speedpin, HIGH);
  digitalWrite(motor2pin1, HIGH);
  digitalWrite(motor2pin2, LOW);

  delay(d1*(degree-90));

  digitalWrite(motor1pin1, LOW);
  digitalWrite(motor1pin2, LOW);

  digitalWrite(motor2pin1, LOW);
  digitalWrite(motor2pin2, LOW);
  myservo.write(90);
  return;
  }
}
void scan2() {
  while(true){
    Serial.println("scan2");
    for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
      // in steps of 1 degree
      myservo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(30);                       // waits 15 ms for the servo to reach the position
      if(Serial.available()>0){           // read value from serial monitor
    	  flame = Serial.readString().toInt();
        }
      if (digitalRead(flame_sensor)==0||flame==1){
        if (pos<90){
          digitalWrite(motor1speedpin, HIGH);
          digitalWrite(motor1pin1, HIGH);
          digitalWrite(motor1pin2, LOW);

          digitalWrite(motor2speedpin, HIGH);
          digitalWrite(motor2pin1, LOW);
          digitalWrite(motor2pin2, HIGH);

          delay(d1*(90-pos));

          digitalWrite(motor1pin1, LOW);
          digitalWrite(motor1pin2, LOW);

          digitalWrite(motor2pin1, LOW);
          digitalWrite(motor2pin2, LOW);
          myservo.write(90);
          Serial.println("scan2 break1");
          break;
        } else if(pos>90){
          digitalWrite(motor1speedpin, HIGH);
          digitalWrite(motor1pin1, LOW);
          digitalWrite(motor1pin2, HIGH);

          digitalWrite(motor2speedpin, HIGH);
          digitalWrite(motor2pin1, HIGH);
          digitalWrite(motor2pin2, LOW);

          delay(d1*(pos-90));

          digitalWrite(motor1pin1, LOW);
          digitalWrite(motor1pin2, LOW);

          digitalWrite(motor2pin1, LOW);
          digitalWrite(motor2pin2, LOW);
          myservo.write(90);
          Serial.println("scan2 break1");
          break;
          }
      }
    }
    
    if(pos != 181){
      Serial.println("scan2 to scan1");
      scan1();
      break;
    }
    
    for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
      myservo.write(pos);              // tell servo to go to position in variable 'pos'
      delay(30);                       // waits 15 ms for the servo to reach the position
      if(Serial.available()>0){           // read value from serial monitor
    	  flame = Serial.readString().toInt();
        }
      if (digitalRead(flame_sensor)==0||flame==1){
        if (pos<90){
          digitalWrite(motor1speedpin, HIGH);
          digitalWrite(motor1pin1, HIGH);
          digitalWrite(motor1pin2, LOW);

          digitalWrite(motor2speedpin, HIGH);
          digitalWrite(motor2pin1, LOW);
          digitalWrite(motor2pin2, HIGH);

          delay(d1*(90-pos));

          digitalWrite(motor1pin1, LOW);
          digitalWrite(motor1pin2, LOW);

          digitalWrite(motor2pin1, LOW);
          digitalWrite(motor2pin2, LOW);
          myservo.write(90);
          Serial.println("scan2 break1");
          break;
        } else if(pos>90){
          digitalWrite(motor1speedpin, HIGH);
          digitalWrite(motor1pin1, LOW);
          digitalWrite(motor1pin2, HIGH);

          digitalWrite(motor2speedpin, HIGH);
          digitalWrite(motor2pin1, HIGH);
          digitalWrite(motor2pin2, LOW);

          delay(d1*(pos-90));

          digitalWrite(motor1pin1, LOW);
          digitalWrite(motor1pin2, LOW);

          digitalWrite(motor2pin1, LOW);
          digitalWrite(motor2pin2, LOW);
          myservo.write(90);
          Serial.println("scan2 break1");
          break;
          }
      }
    }

    if(pos != -1){
      Serial.println("scan2 to scan1");
      scan1();
      break;
    }
    analogWrite(motor1speedpin, motorspeed);
    analogWrite(motor2speedpin, -motorspeed);
    digitalWrite(motor1pin1, HIGH);
    digitalWrite(motor1pin2, LOW);

    digitalWrite(motor2pin1, HIGH);
    digitalWrite(motor2pin2, LOW);
    
    delay(500);

    digitalWrite(motor1pin1, LOW);
    digitalWrite(motor1pin2, LOW);

    digitalWrite(motor2pin1, LOW);
    digitalWrite(motor2pin2, LOW);

  }
}
void loop(){
  scan2();
  Serial.println("main loop");
  while(true){
    temp = mlx.readObjectTempC();
    Serial.println(mlx.readObjectTempC());
    if (temp > fire_temp) {
      digitalWrite(motor1pin1, LOW);
      digitalWrite(motor1pin2, LOW);

      digitalWrite(motor2pin1, LOW);
      digitalWrite(motor2pin2, LOW);
      delay(99999999);
      put_of_fire();
      break;
    } else {
      analogWrite(motor1speedpin, motorspeed);
      analogWrite(motor2speedpin, -motorspeed);
      digitalWrite(motor1pin1, HIGH);
      digitalWrite(motor1pin2, LOW);

      digitalWrite(motor2pin1, HIGH);
      digitalWrite(motor2pin2, LOW);
    }
  }
}

Here is the serial logs
20:57:28.507 -> scan2 break1
20:57:28.507 -> scan2 to scan1
20:57:28.540 -> scan1
20:57:28.540 -> 10
20:57:29.002 -> scan2
20:57:40.374 -> scan2