/* -----------------------------------------------------------------
------------------------- 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;
}
#include <Ticker.h>
Ticker tic_led;
/* -----------------------------------------------------------------
--------------- Declaracion variables y constantes -----------------
----------------------------------------------------------------- */
#define CantidadLed 10
#define Esperar 100
int PIN_LEDS[CantidadLed] = {4, 5, 18, 19, 21, 22, 23, 12, 13, 26};
int PIN_BOTON = 2;
int Derecha = 1;
int Izquierda = 0;
int Direccion = 0;
int Ledlnicial = PIN_LEDS [0];
int LedActual= Ledlnicial;
boolean Estado = true;
float TiempoAnterior = 0;
/* -----------------------------------------------------------------
------------------------- Configuracion puertos --------------------
----------------------------------------------------------------- */
void setup() {
Serial. begin(9600);
pinMode(PIN_BOTON, INPUT);
for (int i = 0 ; i < CantidadLed ; i ++) { //Matriz asignacion de puertos como salidas
pinMode(PIN_LEDS[i], OUTPUT);
}
}
/* -----------------------------------------------------------------
---------------------------- Codigo principal ----------------------
----------------------------------------------------------------- */
void loop() {
ActualizarBoton(); //Funcion paracambio estado boton
ActualizarLed(); //Funcion para cambio de estado LED's
}
/* -----------------------------------------------------------------
------------------------------ Funciones ---------------------------
----------------------------------------------------------------- */
void ActualizarBoton() {
if (digitalRead(PIN_BOTON)) { //Lectura boton
Estado = !Estado; //Guardar estado del boton negado !
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 == 9){
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 ;
}
}
}
}