LEd chaser without delay

Hi everyone, I did led chaser without delay function pat1(it works), and function pat2 that's supposed to light LEDs one by one and put out previous led. LEDs lights up one by one, but it happens so quickly I can barely see it. Function pat1 is commented. Don't know what to do, I'd appreciate any help. Thanks in advance.

const int ledPin[] = {2,3,4,5,6,7,8,9,10,11};
const int numLED = sizeof(ledPin);


//pattern1
const byte pat1Delay = 150;
byte direct = 1;
byte currentLed = 0;
int pat1State = HIGH;

unsigned long pat1Millis = 0;
unsigned long prev1Millis = 0;

//pattern2
const byte pat2Delay = 150;
byte direct2 = 1;
byte currentLed2 = 0;
int pat2State = HIGH;

unsigned long pat2Millis = 0;
unsigned long prev2Millis = 0;
unsigned long checkTime2 = 0;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  for(byte i=0; i= pat1Delay){
    Serial.println(currentLed);
    prev1Millis = pat1Millis;
    digitalWrite(ledPin[currentLed], pat1State);
    currentLed += direct;


    }
    if(currentLed > numLED/2){
      direct = -1;
      pat1State = LOW;
      currentLed = (numLED/2)-1;
  }
  if(currentLed <= 0){
    digitalWrite(ledPin[0], LOW);
    direct = 1;
    pat1State = HIGH;
    currentLed = 0;
  }
}

void pat2(){
  pat2Millis = millis();
  unsigned long t = millis();
  if(pat2Millis - prev2Millis >= pat2Delay){
    prev2Millis = pat2Millis;
    digitalWrite(ledPin[currentLed2], pat2State);
    currentLed2 += direct2;
    if(t - checkTime2 >= pat2Delay){
      checkTime2 = t;
      digitalWrite(ledPin[currentLed2-1], LOW);
    }
  }

  if(currentLed2 > numLED/2){
    currentLed2 = (numLED/2)-1;
    pat2State = LOW;
    direct2 = -1;
  }

  if(currentLed2 <= 0){
    digitalWrite(ledPin[0], LOW);
    currentLed2 = 0;
    pat2State = HIGH;
    direct2 = 1;
  }
  
  
}

I don't know if this will solve your problem, but the byte data type is unsigned only. That means that your direct1 and direct2 variables, when they are at -1, evaluate to 255.

Also, sizeOf returns the number of bytes, not necessarily the number of elements, your array contains. Here, we are dividing the number of bytes in the array by the number of bytes of one element of the array just to be sure.

// It is better to do this:
const int numLED = sizeOf(ledPin) / sizeOf(ledPin[0])

It is also better to encapsulate your variables inside your function. Using the 'static' keyword forces the variables to retain their value even after the function exists so they still exist when you call it again. I wasn't exactly sure what effect you were attempting in pat2, but this should just keep one led on and turn off the previous led and go back and forth

const int ledPin[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
const int numLED = sizeof(ledPin) / sizeof(ledPin[0]);


//pattern1
const byte pat1Delay = 150;
byte direct = 1;
byte currentLed = 0;
int pat1State = HIGH;

unsigned long pat1Millis = 0;
unsigned long prev1Millis = 0;

//pattern2
byte direct2 = 1;
byte currentLed2 = 0;
int pat2State = HIGH;

unsigned long pat2Millis = 0;
unsigned long prev2Millis = 0;
unsigned long checkTime2 = 0;


void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  for (byte i = 0; i < numLED; i++) {
    pinMode(ledPin[i], OUTPUT);
    digitalWrite(ledPin[i], LOW);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  // pat1();
  pat2();
}

void pat1() {
  pat1Millis = millis();
  if (pat1Millis - prev1Millis >= pat1Delay) {
    Serial.println(currentLed);
    prev1Millis = pat1Millis;
    digitalWrite(ledPin[currentLed], pat1State);
    currentLed += direct;


  }
  if (currentLed > numLED / 2) {
    direct = -1;
    pat1State = LOW;
    currentLed = (numLED / 2) - 1;
  }
  if (currentLed <= 0) {
    digitalWrite(ledPin[0], LOW);
    direct = 1;
    pat1State = HIGH;
    currentLed = 0;
  }
}

void pat2() {

  const unsigned long delayTime = 150;

  static unsigned long lastTime;
  static int increment = 1;   // direction to move
  static int idx = 0;        // current index into led array
  static int prevIdx = numLED - 1;

  unsigned long t = millis();
  if (t - lastTime >= delayTime) {
    lastTime = t;
    digitalWrite(ledPin[idx], HIGH);
    digitalWrite(ledPin[prevIdx], LOW);
    prevIdx = idx;
    idx += increment;

    if (idx >= numLED) {
      idx = numLED - 1;
      increment = -1;
    }

    if (idx < 0) {
      idx = 0;
      increment = 1;
    }
  }
}

Thank you)))). It helped me a lot