/* -----------------------------------------------------------------
------------------------- Codigo MultiHardWare ---------------------
----------------------------------------------------------------- */
#if defined(ESP8266)
#include <ESP8266WiFi.h> //Se agregan las librerias de la placa ESP8266
#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
#define Esperar 100
int PIN_LEDS[CantidadLed] = {4, 5, 18, 19, 21, 22, 23, 27, 26, 25}; // Se crea un arreglo con numeros de los pines donde se conectan los led
int PIN_BOTON = 2; //Se declara variable de tipo entero
int Derecha = 1;
int Izquierda = 0; //Se crean variables con sus estados iniciales
int Direccion = 0;
int LedInicial = PIN_LEDS[0]; //Se crea un arreglo (cantidadleds)
int LedActual = LedInicial;
boolean Estado = true; //Se declara y se asigna la variable de tipo boolean
float TiempoAnterior = 0; //Se declara y se asigna la variable de tipo float
/* -----------------------------------------------------------------
------------------------- Configuracion Arduino --------------------
----------------------------------------------------------------- */
void setup() {
Serial.begin(9600); //Se configura puerto serial
pinMode(PIN_BOTON, INPUT); //Se declara la variable como una entrada
for (int i = 0 ; i <= CantidadLed ; i++){
//Recorre de uno en uno la lista desde el indice igual a cero hasta los menores e iguales a cantidad de leds
pinMode(PIN_LEDS[i], OUTPUT); //declaro el PIN_LED para cada indice como salida
}
}
/* -----------------------------------------------------------------
---------------------------- Codigo Principal ----------------------
----------------------------------------------------------------- */
void loop() {
ActualizarBoton();
ActualizarLed(); //Se crean los estados
}
/* -----------------------------------------------------------------
---------------------------- Funciones -------------------------------
----------------------------------------------------------------- */
void ActualizarBoton(){
if (digitalRead(PIN_BOTON)) {
Estado = !Estado; //Se dedeclara el estado de forma inversa
Serial.print("Cambiando estado "); //Si se cumple la condición, imprime el dato.
Serial.println(Estado);
delay(400);
}
}
void ActualizarLed(){
if (Estado){ //Condicion para indica el estado del boton 1,0
if(Derecha){ //Encienden de izquierda a derecha en forma ascendente
float TiempoActual = millis(); //Si el tiempo actual con mills indica el tiempo de recorrido del codigo
if (TiempoActual - TiempoAnterior > Esperar) { //Condicion para comparar si el tiempoActual es menor al tiempoAnterior
TiempoAnterior = TiempoActual;
LedActual = PIN_LEDS[Direccion]; //Indica la direccion de encendido de los LEDS
digitalWrite(LedActual, HIGH); //Se estabelce esatdo de la variable
Direccion++; //Indica la direccion si va en orden ascendente o descendente
}
if(Direccion == 10){ //Indica cantidad de leds
Derecha = 0;
Izquierda = 1; //Hacia la izquierda se pueden encender en secuencia de a 1 en 1
}
}
if(Izquierda){
float TiempoActual = millis();
if (TiempoActual - TiempoAnterior > Esperar){ //Condicion para comparar si el tiempoActual es menor al tiempoAnterior
TiempoAnterior = TiempoActual;
TiempoAnterior = TiempoActual; //Tiempo anterior Es igual a Tiempo Actual
LedActual = PIN_LEDS[Direccion]; //Indica la direccion de encendido de los LEDS
digitalWrite(LedActual, LOW); //Led Actual , apagado para iniciar la direccion descendente
Direccion--; //Indica la direccion descendente
}
if(Direccion < 0){ //Si la direccion llega a un valor menor que 0 .
Derecha = 1; //Invertir la direccion a la derecha iniciando con 1 en forma ascendente
Izquierda = 0;
}
}
}
}