// Ejemplo - desplazamiento de leds
// simulacion en https://wokwi.com/projects/379124136051183617
#include "define_pines.h"
#define NUM_JUEGOS 3
#define NUM_PASOS 10 // pasos que se van a ir repitiendo en cada juego de luces
uint8_t juego_leds[NUM_JUEGOS][NUM_PASOS]= // En 5 bits ponemos la información 5 LEDs
{
{0x10,0x08,0x40,0x02,0x01,0x1,0x2,0x4,0x8,0x10},
{0x10,0x18,0x1C,0x1E,0x1F,0x1,0x3,0x7,0xF,0x1F},
{0x1F,0x0E,0x04,0x0E,0x1F,0x0,0x1F,0x0,0x1F,0x0}
};
volatile int jj = 0; // juego actual de la secuencia de luces. Volatile ya que se modifica dentro de la ISR
// ISR para el botón
unsigned long tic=0;
void IRAM_ATTR cambiaSecuencia() { // ISR del boton
if(millis()-tic > 1000){ // tratamos "pulsaciones" como mucho 1 x segundo
tic = millis();
jj ++;
if(jj>=NUM_JUEGOS) jj=0; // va de 0 a NUM_JUEGOS - 1
}
}
// se llama una única vez al inicio del programa antes de comenzar el bule "loop"
void setup()
{
for (int i=0; i < NUM_LEDs; i++) // configurar OUTPUT todos los LEDs
pinMode(ledPins[i], OUTPUT);
attachInterrupt(digitalPinToInterrupt(botonPin), cambiaSecuencia, FALLING); // Interrupción en flanco descendente
Serial.begin(115200);
Serial.println("\n Juego de leds.... pulsa para cambiar el sentido la visualizacion");
}
// funcion de código que se repite indefinidamente
void loop()
{
for(int pp=0;pp<NUM_PASOS; pp++){ // avanzando pp, de 0 a NUM_PASOS-1
// en funcion de jj se genera el juego según la tabla de arriba
for(int i=0;i<NUM_LEDs;i++){ // para cada uno de los LEDs
digitalWrite(ledPins[i], juego_leds[jj][pp] & (1<<i) );
}
delay(200); //espera 100 ms para ir al siguiente valor de luces LED
}
}