/*
* MODDER: @RED9030
*/
/*
* ESP32 version
* Ténica de multiplexación con ESP (CHARLIEPLEXING)
*/
/* A B C
* LED PIN26 PIN25 PIN14
* 1 LOW HIGH INPUT
* 2 HIGH LOW INPUT
* 3 INPUT LOW HIGH
* 4 INPUT HIGH LOW
* 5 LOW INPUT HIGH
* 6 HIGH INPUT LOW
*
* Pins ESP32 34,35,36,39 no output
*/
/*
*****************************************************
* LIBRERIAS
*****************************************************
*/
/*
*****************************************************
* VARIABLES
*****************************************************
*/
const int leds_numbers = 6; //Números de leds a colocar para multiplexar de la ecuacion #leds=#pines(#pines-1).
const int timew = 1000;
// Definimos los pines a utilizar
//ESP32 PINS plexing 12bits resolution
#define PIN_A 26 // Pin A
#define PIN_B 25 // Pin B
#define PIN_C 14 // Pin C
//ESP8266 PINS plexing 10bits resolution
//#define PIN_A 4 // Pin A D2
//#define PIN_B 5 // Pin B D1
//#define PIN_C 0 // Pin C D0
/*
*****************************************************
* INICIO
*****************************************************
*/
void setup() {
}
/*
*****************************************************
* REPETICIÓN
*****************************************************
*/
void loop() {
// Bucle para encender los LEDs de menor a mayor
for(int i=1; i<=leds_numbers; i++)
{
encenderLed(i);
delay(timew);
}
// Bucle para encender los LEDs de mayor a menor eliminando lo extremos
for(int i=(leds_numbers-1); i>1; i--)
{
encenderLed(i);
delay(timew);
}
}
/*
*****************************************************
* FUNCIONES
*****************************************************
*/
// Función que pondrá en los estados correctos para encender un LED (HIGH, LOW e INPUT)
void ponerEstados(int pinHigh, int pinLow, int pinInput)
{
pinMode(pinHigh,OUTPUT);
digitalWrite(pinHigh,HIGH);
pinMode(pinLow,OUTPUT);
digitalWrite(pinLow,LOW);
pinMode(pinInput,INPUT);
}
// Esta función se va a encargar de aplicar la lógica dependiendo del LED que queramos encender
void encenderLed(int led_num)
{
switch(led_num)
{
case 1:
ponerEstados(PIN_B,PIN_A,PIN_C);
break;
case 2:
ponerEstados(PIN_A,PIN_B,PIN_C);
break;
case 3:
ponerEstados(PIN_C,PIN_B,PIN_A);
break;
case 4:
ponerEstados(PIN_B,PIN_C,PIN_A);
break;
case 5:
ponerEstados(PIN_C,PIN_A,PIN_B);
break;
case 6:
ponerEstados(PIN_A,PIN_C,PIN_B);
break;
}
}