#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/gpio.h"
// Definir GPIO para los LEDs y los botones
const uint LP[] = {15, 14, 13, 11, 10, 9, 8, 7};
#define BOTON_PURPLE 2
#define BOTON_AMARILLO 12
int secuencia_actual = 0;
void Secuencia0() {
for (int i = 0; i < 8; i++) {
gpio_put(LP[i], i % 2); // Alternar encendido y apagado
}
sleep_ms(500);
// Chequear si el botón amarillo está presionado
if (!gpio_get(BOTON_AMARILLO)) {
while (!gpio_get(BOTON_AMARILLO)) {
for (int i = 0; i < 8; i++) {
gpio_put(LP[i], i % 2);
}
}
}
for (int i = 0; i < 8; i++) {
gpio_put(LP[i], (i + 1) % 2); // Invertir el patrón de LEDs
}
sleep_ms(500);
if (!gpio_get(BOTON_AMARILLO)) {
while (!gpio_get(BOTON_AMARILLO)) {
for (int i = 0; i < 8; i++) {
gpio_put(LP[i], (i + 1) % 2);
}
}
}
}
// Secuencia 1: Enciende un LED a la vez, de 1 a 8
void Secuencia1(){
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
gpio_put(LP[j], (i == j) ? 1 : 0); // Enciende solo el LED correspondiente y apaga los demás
}
// Chequear si el botón amarillo está presionado
if (!gpio_get(BOTON_AMARILLO)) {
while (!gpio_get(BOTON_AMARILLO)) {
sleep_ms(100);
}
}
sleep_ms(300); // Pausa entre cada cambio de LED
}
}
// Secuencia 2: Enciende LEDs desde los extremos hacia el centro
void Secuencia2(){
int pares = 4; // Cantidad de pares de LEDs a encender
// Ir desde los extremos hacia el centro
for (int i = 0; i < pares; i++) {
for (int j = 0; j < 8; j++) {
gpio_put(LP[j], (j == i || j == 7 - i) ? 1 : 0); // Enciende los LEDs en pares desde los extremos
}
// Chequear si el botón amarillo está presionado
if (!gpio_get(BOTON_AMARILLO)) {
while (!gpio_get(BOTON_AMARILLO)) {
sleep_ms(100);
}
}
sleep_ms(100); // Pausa entre cada paso de la secuencia
}
// Ir desde el centro de vuelta a los extremos
for (int i = pares - 2; i >= 0; i--) { // pares - 2 para empezar desde LEDs 3 y 6
for (int j = 0; j < 8; j++) {
gpio_put(LP[j], (j == i || j == 7 - i) ? 1 : 0); // Enciende los LEDs en pares de vuelta hacia los extremos
}
// Chequear si el botón amarillo está presionado
if (!gpio_get(BOTON_AMARILLO)) {
while (!gpio_get(BOTON_AMARILLO)) {
sleep_ms(100);
}
}
sleep_ms(100); // Pausa entre cada paso de la secuencia
}
}
int main() {
stdio_init_all();
// Inicializar los pines de los LEDs como salida
for (int i = 0; i < 8; i++) {
gpio_init(LP[i]);
gpio_set_dir(LP[i], GPIO_OUT);
}
// Inicializar los botones como entrada
gpio_init(BOTON_PURPLE);
gpio_set_dir(BOTON_PURPLE, GPIO_IN);
gpio_pull_up(BOTON_PURPLE);
gpio_init(BOTON_AMARILLO);
gpio_set_dir(BOTON_AMARILLO, GPIO_IN);
gpio_pull_up(BOTON_AMARILLO);
while (true) {
if (gpio_get(BOTON_PURPLE) == 0) {
secuencia_actual = (secuencia_actual + 1) % 3; // Cambia entre 0, 1 y 2
printf("CAMBIANDO A SECUENCIA NUMERO %d\n", secuencia_actual);
sleep_ms(100);
}
switch (secuencia_actual) {
case 0:
Secuencia0();
break;
case 1:
Secuencia1();
break;
case 2:
Secuencia2();
break;
}
}
}