/* -----------------------------------------------------------------
------------------------- Codigo MultiHardWare ---------------------
----------------------------------------------------------------- */
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
#pragma message "Codigo para ESP8266!"
#elif defined(ESP32)
#include <WiFi.h>
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#pragma message "Codigo para ESP32!"
#elif defined(ARDUINO)
#pragma message "Codigo para Arduino basado AVR (UNO, MEGA, etc)!"
#else
#pragma message "No es ni ESP32 o ES8266 o AVR, que es?"
#endif
/* -----------------------------------------------------------------
-------------------------- Librerias y Objetos ---------------------
----------------------------------------------------------------- */
template<class T> inline Print &operator <<(Print &obj, T arg) {
obj.print(arg);
return obj;
}
/* -----------------------------------------------------------------
---------------- Declaracion de Variables y constantes -------------
----------------------------------------------------------------- */
#define CantidadLed 10 // definir un puerto para la cantidad de led
#define Esperar 100 // definir esperar en el puerto 100
int PIN_LEDS[CantidadLed] = {4, 5, 18, 19, 21, 22, 23, 12, 13, 25}; // hacer un arreglo con diferentes puertos a usar
int PIN_BOTON = 2; // definir puerto del boton
// definir variables para el funcionamiento del circuito
int Derecha = 1;
int Izquierda = 0;
int Direccion = 0;
int LedInicial = PIN_LEDS[0]; // extraer primer valor del arreglo
int LedActual = LedInicial; // establecer ese valor en una variable
boolean Estado = true; // definir la variable estado como boolean en 1
float TiempoAnterior = 0; // definir el tiempo como flotante y en 0
/* -----------------------------------------------------------------
------------------------- Configuracion Arduino --------------------
----------------------------------------------------------------- */
void setup() {
Serial.begin(9600); // iniciar canal serial
pinMode(PIN_BOTON, INPUT); // definir boton como entrada
// definir arreglo de leds como salidas
for (int i = 0 ; i <= CantidadLed ; i++) {
pinMode(PIN_LEDS[i], OUTPUT);
}
}
/* -----------------------------------------------------------------
---------------------------- Codigo Principal ----------------------
----------------------------------------------------------------- */
void loop() {
// llamar funciones
ActualizarBoton();
ActualizarLed();
}
/* -----------------------------------------------------------------
-------------------------------- Funciones -------------------------
----------------------------------------------------------------- */
void ActualizarBoton() { //funcion para el boton
if (digitalRead(PIN_BOTON)){ // leer estado del boton
Estado = !Estado; // intercalar estado
Serial.println("Cabiando estado "); // imprimir el estado
Serial.println(Estado);
delay(400); // tiempo de espera entre cambio
}
}
void ActualizarLed(){ // secuencia para el arreglo de leds
if(Estado) { // si el estado es un 0 no se ejecuta el interno
if(Derecha){ // encender los led de manera asendente
float TiempoActual = millis(); // leer el tiempo que esta transcurriendo en ese entonces
if(TiempoActual - TiempoAnterior > Esperar){ // comparar tiempos para hacer el delay
TiempoAnterior = TiempoActual;
LedActual = PIN_LEDS[Direccion]; // ir al arreglo de leds y escojer el led a encender
digitalWrite(LedActual, HIGH); // encender led
Direccion++; // ir al led siguiente y repetir
}
if(Direccion == 10){ // cuando se haya encendido los 9 leds se pasa al siguiente if
Derecha = 0;
Izquierda = 1;
}
}
if(Izquierda){ // apagar los led de manera descendente
float TiempoActual = millis(); // leer el tiempo actual que esta transcurriendo
if(TiempoActual - TiempoAnterior > Esperar){ // comparar tiempos para hacer el delay
TiempoAnterior = TiempoActual;
LedActual = PIN_LEDS[Direccion]; // escojer el led de manera descendente
digitalWrite(LedActual, LOW); // apagar led
Direccion--; // escojer el siguiente led
}
if(Direccion < 0){ // cuando se llegue al led 0 se vuelve a iniciar el if de derecha
Derecha = 1;
Izquierda = 0;
}
}
}
}