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

#define t   300
#define t2  600

LiquidCrystal_I2C lcd(0x27, 20, 4);  // Set the LCD I2C address and the display dimensions

int leds[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
int total_leds = 12;

void setup() {
  Serial.begin(115200);
  
  lcd.begin(20, 4);  // Initialize the LCD
  lcd.backlight();  // Turn on the backlight
  lcd.setCursor(0, 0);
  lcd.print("Effects on LCD");
  lcd.setCursor(0, 1);
  lcd.print("code by himani");
 
 lcd.setCursor(0, 2);
  lcd.print("HAVE A NICE DAY");
 
  delay(2000);
  lcd.clear();
  
  for (int i = 0; i < total_leds; i++) {
    pinMode(leds[i], OUTPUT);
  }
}

void loop() {
  lcd.setCursor(0, 0);
  lcd.print("Effect 1");
  for (int i = 0; i < 3; i++) effect_1();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 2");
  for (int i = 0; i < 3; i++) effect_2();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 3");
  for (int i = 0; i < 20; i++) effect_3();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 4");
  for (int i = 0; i < 3; i++) effect_4();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 5");
  for (int i = 0; i < 3; i++) effect_5();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 6");
  for (int i = 0; i < 3; i++) effect_6();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 7");
  for (int i = 0; i < 3; i++) effect_7();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 8");
  for (int i = 0; i < 3; i++) effect_8();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 9");
  for (int i = 0; i < 10; i++) effect_9();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 10");
  for (int i = 0; i < 10; i++) effect_10();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 11");
  for (int i = 0; i < 5; i++) effect_11();
  
  lcd.setCursor(0, 0);
  lcd.print("Effect 12");
  for (int i = 0; i < 5; i++) effect_12();
 
 

  ledsOff();
  lcd.clear();
  delay(2000);
}

void ledsOn() {
  for (int i = 0; i < total_leds; i++) {
    digitalWrite(leds[i], HIGH);
  }
}

void ledsOff() {
  for (int i = 0; i < total_leds; i++) {
    digitalWrite(leds[i], LOW);
  }
}

void effect_1() {
  int i = 0;
  for (i = 0; i < total_leds; i++) {
    digitalWrite(leds[i], HIGH);
    delay(t);
  }
  for (i = 0; i < total_leds; i++) {
    digitalWrite(leds[i], LOW);
    delay(t);
  }
  
  for (i = total_leds - 1; i >= 0; i--) {
    digitalWrite(leds[i], HIGH);
    delay(t);
  }
  for (i = total_leds - 1; i >= 0; i--) {
    digitalWrite(leds[i], LOW);
    delay(t);
  }
}

void effect_2() {
  int i = 0;
  for (i = 0; i < total_leds - 1; i++) {
    digitalWrite(leds[i], HIGH);
    delay(t);
  }
  for (i = total_leds - 1; i >= 0; i--) {
    digitalWrite(leds[i], LOW);
    delay(t);
  }
  
  for (i = total_leds - 1; i >= 0; i--) {
    digitalWrite(leds[i], HIGH);
    delay(t);
  }
  for (i = 0; i <= total_leds; i++) {
    digitalWrite(leds[i], LOW);
    delay(t);
  }
}

void effect_3() {
  for (int i = 0; i < total_leds; i = i + 2) {
    digitalWrite(leds[i], HIGH);
    digitalWrite(leds[i + 1], LOW);
  }
  delay(t2);
  for (int i = 0; i < total_leds; i = i + 2) {
    digitalWrite(leds[i], LOW);
    digitalWrite(leds[i + 1], HIGH);
  }
  delay(t2);
}

void effect_4() {
  for (int i = 0; i <= total_leds; i++) {
    digitalWrite(leds[i], HIGH);
    delay(t2);
    i += 1;
  }
  for (int i = total_leds - 2; i >= 0; i--) {
    digitalWrite(leds[i], HIGH);
    delay(t2);
    i -= 1;
  }
}

void effect_5() {
  int i = 0;
  for (i = 0; i <= total_leds / 2; i++) {
    digitalWrite(i, HIGH);
    digitalWrite(leds[total_leds - i], HIGH);
    delay(t2);
  }
  for (i = 0; i <= total_leds / 2; i++) {
    digitalWrite(i, LOW);
    digitalWrite(leds[total_leds - i], LOW);
    delay(t2);
  }
  delay(t2);
  for (i = 0; i <= total_leds / 2; i++) {
    digitalWrite(i, HIGH);
    digitalWrite(leds[total_leds - i], HIGH);
    delay(t2);
  }
  for (i = total_leds / 2; i >= 0; i--) {
    digitalWrite(leds[i], LOW);
    digitalWrite(leds[total_leds - i], LOW);
    delay(t2);
  }
}

void effect_6() {
  for (int i = 0; i < total_leds; i++) {
    digitalWrite(leds[i], HIGH);
    delay(t2);
    digitalWrite(leds[i], LOW);
  }
}

void effect_7() {
  for (int i = total_leds; i > 0; i--) {
    digitalWrite(leds[i-1], HIGH);
    delay(t2);
    digitalWrite(leds[i-1], LOW);
  }
}

void effect_8() {
  for (int i = 0; i <= total_leds; i++) {
    digitalWrite(leds[i], HIGH);
    delay(t2);
  }
  for (int i = total_leds - 2; i >= 0; i--) {
    digitalWrite(leds[i], LOW);
    delay(t2);
  }
}

void effect_9() {
  for (int i = 0; i < total_leds / 2; i++) {
    digitalWrite(leds[i], HIGH);
    digitalWrite(leds[total_leds - 1 - i], HIGH);
    delay(t2);
    digitalWrite(leds[i], LOW);
    digitalWrite(leds[total_leds - 1 - i], LOW);
  }
}

void effect_10() {
  for (int i = total_leds / 2 - 1; i >= 0; i--) {
    digitalWrite(leds[i], HIGH);
    digitalWrite(leds[total_leds - 1 - i], HIGH);
    delay(t2);
    digitalWrite(leds[i], LOW);
    digitalWrite(leds[total_leds - 1 - i], LOW);
  }
}

void effect_11() {
  for (int i = 0; i < total_leds + 2; i++) {
    if (i < total_leds) {
      digitalWrite(leds[i], HIGH);
    }
    if (i > 1) {
      digitalWrite(leds[i - 2], LOW);
    }
    delay(t2);
  }
}

void effect_12() {
  for (int i = 2; i < total_leds; i++) {
    if (i == 2) {
      digitalWrite(leds[0], HIGH);
      digitalWrite(leds[1], HIGH);
    }
    digitalWrite(leds[i], HIGH);
    digitalWrite(leds[i - 2], LOW);
    delay(t2);
  }
  for (int i = total_leds - 2; i >= 0; i--) {
    digitalWrite(leds[i], HIGH);
    digitalWrite(leds[i + 2], LOW);
    delay(t2);
  }
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C
led7:A
led7:C
led8:A
led8:C
led9:A
led9:C
led10:A
led10:C
led11:A
led11:C
led12:A
led12:C
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL