#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2); 

const int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; 

void setup() {
  lcd.init();        
  lcd.backlight();   
  
  for (int i = 0; i < 10; i++) {
    pinMode(ledPins[i], OUTPUT); 
  }
}

void loop() {
  lcd.clear(); 

  for (int pattern = 1; pattern <= 10; pattern++) {
    lcd.setCursor(0, 0);
    lcd.print("Step : ");
    lcd.print(pattern);
  
    displayPattern(pattern); 

    delay(2000); 
  }
}

void displayPattern(int patternNum) {
  switch (patternNum) {
    case 1: 
      step1();
      break;
    case 2: 
      step2();
      break;
    case 3: 
      Step3();
      break;
    case 4: 
      Step4();
      break;
    case 5: 
      step5();
      break;
    case 6: 
      step6();
      break;
    case 7: 
      step7();
      break;
    case 8: 
      step8();
      break;
    case 9: 
      step9();
      break;
    case 10: 
      step10();
      break;
  }
}

void step1() { 
  for (int i = 0; i < ledPins; i++) {
        digitalWrite(ledPins[i], HIGH);
        delay(50);
        digitalWrite(ledPins[i], LOW);
  }
  delay(1000); 
}

void step2() { 
  for (int i = ledPins - 1; i >= 0; i--) {
        digitalWrite(ledPins[i], HIGH);
        delay(50);
        digitalWrite(ledPins[i], LOW);
  }
  delay(1000); 
}

void Step3() { 
for (int i = 0; i < ledPins; i++) {
        digitalWrite(ledPins[i], i % 2 == 0 ? HIGH : LOW);
        delay(50);
        digitalWrite(ledPins[i], LOW);
  }
  delay(1000); 
}

void Step4() {
for (int i = 0; i < ledPins; i++) {
        digitalWrite(ledPins[i], i % 3 == 0 ? HIGH : LOW);
        delay(50);
        digitalWrite(ledPins[i], LOW);
  }
  delay(1000); 
}

void step5() {
for (int i = 0; i < ledPins; i++) {
        digitalWrite(ledPins[i], i % 4 == 0 ? HIGH : LOW);
        delay(50);
        digitalWrite(ledPins[i], LOW);
  }
    delay(1000); 

}

void step6() {
for (int i = 0; i < ledPins; i++) {
        digitalWrite(ledPins[i], i % 5 == 0 ? HIGH : LOW);
        delay(50);
        digitalWrite(ledPins[i], LOW);
  }
  delay(1000); 
}

void step7() {
for (int i = 0; i < ledPins; i++) {
        digitalWrite(ledPins[i], i % 6 == 0 ? HIGH : LOW);
        delay(50);
        digitalWrite(ledPins[i], LOW);
  }
  delay(1000); 
}

void step8() {
  for (int i = 0; i < ledPins; i++) {
        digitalWrite(ledPins[i], i % 7 == 0 ? HIGH : LOW);
        delay(50);
        digitalWrite(ledPins[i], LOW);
  }
}

void step9() {
for (int i = 0; i < ledPins; i++) {
        digitalWrite(ledPins[i], i % 8 == 0 ? HIGH : LOW);
        delay(50);
        digitalWrite(ledPins[i], LOW);
  }
  delay(1000); 
}

void step10() {
for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 9; j++) {
      digitalWrite(ledPins[j], HIGH);
      digitalWrite(ledPins[j + 1], HIGH);
      delay(50);
      digitalWrite(ledPins[j], LOW);
      digitalWrite(ledPins[j + 1], LOW);
    }
    for (int j = 9; j > 0; j--) {
      digitalWrite(ledPins[j], HIGH);
      digitalWrite(ledPins[j - 1], HIGH);
      delay(50);
      digitalWrite(ledPins[j], LOW);
      digitalWrite(ledPins[j - 1], LOW);
    }
  }
  delay(1000); 
}