#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"



  //lista de los GPIO de los LEDs y Botones
const uint PINES[]= {0,1,2,3,4,5,6,7,26,12};
//const uint B0 = 2;
//const uint B1 = 12;
 
#define BOTON_CAMBIO 26
#define BOTON_PAUSA 12
 
int CONTADOR = 0;
int SECUENCIA_ACTUAL = 0;
 
void SECUENCIA(){
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 1);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 1);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 1);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 1);
  sleep_ms(500);
  if (!gpio_get(BOTON_PAUSA) == 1)
  {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 1);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 1);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 1);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 1);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 1);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 1);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 1);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 1);
  gpio_put(PINES[7], 0);
  sleep_ms(500);
  if (!gpio_get(BOTON_PAUSA) == 1)   {
    while (true) {
      gpio_put(PINES[0], 1);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 1);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 1);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 1);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
 
}
 
void SECUENCIA1(){
  gpio_put(PINES[0], 1);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(300);
   if (!gpio_get(BOTON_PAUSA) == 1)  {
    while (true) {
      gpio_put(PINES[0], 1);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 1);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(300);
  if (!gpio_get(BOTON_PAUSA) == 1) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 1);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 1);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(300);
  if (!gpio_get(BOTON_PAUSA) == 1) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 1);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 1);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(300);
  if (!gpio_get(BOTON_PAUSA) == 1) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 1);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 1);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(300);
  if (!gpio_get(BOTON_PAUSA) == 1) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 1);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 1);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(300);
  if (!gpio_get(BOTON_PAUSA) == 1) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 1);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 1);
  gpio_put(PINES[7], 0);
  sleep_ms(300);
  if (!gpio_get(BOTON_PAUSA) == 1) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 1);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 1);
  sleep_ms(300);
  if (!gpio_get(BOTON_PAUSA) == 1) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 1);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
}
 
void SECUENCIA2(){
  gpio_put(PINES[0], 1);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 1);
  sleep_ms(200);
  if (!gpio_get(BOTON_PAUSA) == 01) {
    while (true) {
      gpio_put(PINES[0], 1);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 1);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 1);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 1);
  gpio_put(PINES[7], 0);
  sleep_ms(200);
  if (!gpio_get(BOTON_PAUSA) == 01) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 1);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 1);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 1);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 1);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(200);
  if (!gpio_get(BOTON_PAUSA) == 01) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 1);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 1);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 1);
  gpio_put(PINES[4], 1);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(200);
  if (!gpio_get(BOTON_PAUSA) == 01) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 1);
      gpio_put(PINES[4], 1);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 1);
  gpio_put(PINES[4], 1);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(200);
  if (!gpio_get(BOTON_PAUSA) == 01) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 1);
      gpio_put(PINES[4], 1);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 1);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 1);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 0);
  sleep_ms(200);
  if (!gpio_get(BOTON_PAUSA) == 01) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 1);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 1);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 0);
  gpio_put(PINES[1], 1);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 1);
  gpio_put(PINES[7], 0);
  sleep_ms(200);
  if (!gpio_get(BOTON_PAUSA) == 01) {
    while (true) {
      gpio_put(PINES[0], 0);
      gpio_put(PINES[1], 1);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 1);
      gpio_put(PINES[7], 0);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
  gpio_put(PINES[0], 1);
  gpio_put(PINES[1], 0);
  gpio_put(PINES[2], 0);
  gpio_put(PINES[3], 0);
  gpio_put(PINES[4], 0);
  gpio_put(PINES[5], 0);
  gpio_put(PINES[6], 0);
  gpio_put(PINES[7], 1);
  sleep_ms(200);
  if (!gpio_get(BOTON_PAUSA) == 01) {
    while (true) {
      gpio_put(PINES[0], 1);
      gpio_put(PINES[1], 0);
      gpio_put(PINES[2], 0);
      gpio_put(PINES[3], 0);
      gpio_put(PINES[4], 0);
      gpio_put(PINES[5], 0);
      gpio_put(PINES[6], 0);
      gpio_put(PINES[7], 1);
      if (!gpio_get(BOTON_PAUSA) == 0 ){
        break;
      }
    }
  }
}
 
int main() {
  stdio_init_all();
 
  //Inicilizar los pines de los LEDs como Salida
  for (int i = 0;i < 8;i++){
    gpio_init(PINES[i]);
    gpio_set_dir(PINES[i],GPIO_OUT);
  }
 
 
  gpio_init(BOTON_CAMBIO);
  gpio_set_dir(BOTON_CAMBIO, GPIO_IN);
  gpio_pull_up(BOTON_CAMBIO);
 
  gpio_init(BOTON_PAUSA);
  gpio_set_dir(BOTON_PAUSA, GPIO_IN);
  gpio_pull_up(BOTON_PAUSA);
 
  while (true) {
    if (gpio_get(BOTON_CAMBIO) == 0) {
            SECUENCIA_ACTUAL = (SECUENCIA_ACTUAL + 1) % 3;  // Cambia entre 0, 1 y 2
            printf("Cambiando a Secuencia%d\n", SECUENCIA_ACTUAL);
            sleep_ms(200);
        }
 
        if (SECUENCIA_ACTUAL == 0) {
            SECUENCIA();
        } else if (SECUENCIA_ACTUAL == 1) {
            SECUENCIA1();
        } else {
            SECUENCIA2();
        }
 
    }
}