//Generar un algoritmo para encender un led con la tecla 1 y apagarlo de manera continua
//con la tecla 2. Emplear un teclado matricial de 4x4 (Membrana simple filas, columnas)

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

LiquidCrystal_I2C lcd(0x27,20,4); 


const uint8_t filas = 4; //Asignar cuatro filas
const uint8_t columnas = 4; //Asignar cuatro columnas
int led1 = 12; //pin de la ESP led
int led2 = 13; //pin de la ESP led
int led3 = 14; //pin de la ESP led
int led4 = 27; //pin de la ESP led
int led5 = 26; //pin de la ESP led
int led6 = 25; //pin de la ESP led
int led7 = 33; //pin de la ESP led
int led8 = 32; //pin de la ESP led
int led9 = 0; //pin de la ESP led

int leds[] = {led1, led2, led3, led6, led5, led4, led7, led8, led9};

char Keys [filas] [columnas] = {
  {'1', '2', '3', 'A'}, 
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

uint8_t filaspin [filas] = {19, 18, 5, 17}; //TX

uint8_t columnaspin [columnas] = {16, 4, 2, 15}; //16 RX2

Keypad teclado = Keypad(makeKeymap(Keys), filaspin, columnaspin, filas, columnas);

void apagar() {
  digitalWrite(led2, LOW);
  digitalWrite(led4, LOW);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led9, LOW);
  digitalWrite(led1, LOW);
  digitalWrite(led8, LOW);
  digitalWrite(led3, LOW);
}

void setup() {
  Serial.begin(115200);

  // Configurar todos los LEDs como salida
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);

  digitalWrite(led2, LOW);
  digitalWrite(led4, LOW);
  digitalWrite(led5, LOW);
  digitalWrite(led6, LOW);
  digitalWrite(led7, LOW);
  digitalWrite(led9, LOW);
  digitalWrite(led1, LOW);
  digitalWrite(led8, LOW);
  digitalWrite(led3, LOW);

  lcd.init();
  lcd.backlight(); // Encender la retroiluminación de la pantalla
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ESPERANDO SECUENCIA");
}

void loop() {
  char key = teclado.getKey();

  if (key) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Tecla presionada: ");
    //    lcd.setCursor(0, 1);
    lcd.print(key);

    if (key == '#') {
      lcd.setCursor(3, 2);
      lcd.print("SECUENCIA 4");
      for (int j = 0; j < 9; j++) {
        digitalWrite(leds[j], HIGH);
        delay(300);
        digitalWrite(leds[j], LOW);
        delay(200);
        digitalWrite(leds[j], HIGH);
        if ( j == 9) {
          delay(10);
          break;
        }

      }
    }

    if ( key == '0') {

      apagar();
    }

    if (key == 'B') {
      for (int j = 9; j > 0; j--) {
        digitalWrite(leds[j], HIGH);
        delay(300);
        digitalWrite(leds[j], LOW);
        delay(200);
        digitalWrite(leds[j], HIGH);
        if ( j == 0) {
          delay(10);
          break;
        }
      }


    }


    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ESPERANDO SECUENCIA");
    lcd.setCursor(4, 2);
    lcd.print("OPRIMA OTRA");
    lcd.setCursor(4, 3);
    lcd.print("++OPCION++");
  }
}
$abcdeabcde151015202530fghijfghij