/*-----------------------------------Codigo MultiHardware--------------------------------------------------*/
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
#pragma message "Codigo para Arduino ESP8266!"
#elif defined(ESP32)
#include <WiFi.h>
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
#pragma message "Codigo para Arduino 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
/*-----------------------------------Librertas y Objetos agregados al programa--------------------------------------------------*/
template<class T> inline Print &operator <<(Print &obj, T arg) {
obj.print(arg);
return obj;
}
/*-----------------------------------Declaración de las variables Variables y las constantes del programa--------------------------------------------------*/
#define CantidadLed 10
#define Esperar 100
int PIN_LEDS[CantidadLed] = {4, 5, 18, 19, 21, 22, 23, 34, 35, 32};
int PIN_BOTON = 2;
int Derecha = 1;
int Izquierda = 0;
int Direccion = 0;
int LedInicial = PIN_LEDS[0];
int LedActual = LedInicial;
boolean Estado = true;
float TiempoAnterior = 0;
/*-----------------------------------Configuracion de controlador o Arduino-------------------------------------------------*/
void setup() {
Serial.begin(9600);
pinMode(PIN_BOTON, INPUT);
for (int i = 0 ; i <= CantidadLed ; i++) {
pinMode(PIN_LEDS[i], OUTPUT);
}
}
/*-----------------------------------Codigo Principal del programa--------------------------------------------------*/
void loop() {
ActualizarBoton();
ActualizarLed();
}
/*-----------------------------------Funciones u operaciones--------------------------------------------------*/
void ActualizarBoton(){
if (digitalRead(PIN_BOTON)) {
Estado = !Estado;
Serial.print("Cambiando estado ");
Serial.println(Estado);
delay(400);
}
}
void ActualizarLed(){
if (Estado){
if(Derecha){
float TiempoActual = millis();
if (TiempoActual - TiempoAnterior > Esperar) {
TiempoAnterior = TiempoActual;
LedActual = PIN_LEDS[Direccion];
digitalWrite(LedActual, HIGH);
Direccion++;
}
if(Direccion == 10){
Derecha = 0;
Izquierda = 1;
}
}
if(Izquierda){
float TiempoActual = millis();
if (TiempoActual - TiempoAnterior > Esperar){
TiempoAnterior = TiempoActual;
LedActual = PIN_LEDS[Direccion];
digitalWrite(LedActual, LOW);
Direccion--;
}
if(Direccion < 0){
Derecha = 1;
Izquierda = 0;
}
}
}
}