/* -----------------------------------------------------------------
------------------------- Codigo MultiHardWare ---------------------
----------------------------------------------------------------- */
#if defined(ESP8266) //Condicional si se conecta una placa ESP8266
#include <ESP8266WiFi.h> //Se agrega las librerias de la placa ESP8266
#include <ESP8266WiFiMulti.h> //Se agrega las librerias de la placa ESP8266 para el Wifi
ESP8266WiFiMulti wifiMulti;
#pragma message "Codigo para ESP8266!" //Si se detecta que es la placa ESP8266 que muestre ese mensaje
#elif defined(ESP32) //Condicional si se conecta una placa ESP32
#include <WiFi.h> //Se agrega las librerias de la placa ESP32
#include <WiFiMulti.h> //Se agrega las librerias de la placa ESP22 para el Wifi
WiFiMulti wifiMulti;
#pragma message "Codigo para ESP32!" //Si se detecta que es la placa ESP32 que muestre ese mensaje
#elif defined(ARDUINO) //Condicional si se conecta una placa de arduino
#pragma message "Codigo para Arduino basado AVR (UNO, MEGA, etc)!" //Que muestre que placa se conecto
#else //Si no se conecto ninguno de los anteriores
#pragma message "No es ni ESP32 o ES8266 o AVR, que es?" //Enseña este mensaje
#endif //Fin del condicional
/* -----------------------------------------------------------------
-------------------------- Librerias y Objetos ---------------------
----------------------------------------------------------------- */
template<class T> inline Print &operator <<(Print &obj, T arg) {
obj.print(arg);
return obj;
//Estas dos lineas es para escribir un mensaje en una sola linea de programacion con varios valores o letras
}
/* -----------------------------------------------------------------
---------------- Declaracion de Variables y constantes -------------
----------------------------------------------------------------- */
//Se define la cantidad de leds que habran y el tiempo de espera para que se apague o se encienda
#define CantidadLed 10
#define Esperar 100
//Pines en los cuales van a estar conectados los led
int PIN_LEDS[CantidadLed] = {4, 5, 18, 19, 21, 22, 23, 26, 27, 14};
//Pin en el cual estara conectado el boton
int PIN_BOTON = 2;
//Se agregan variables definidas con 0 o 1
int Derecha = 1;
int Izquierda = 0;
int Direccion = 0;
//Se declara que todos los leds estaran apagados
int LedInicial = PIN_LEDS[0];
int LedActual = LedInicial;
//Se agrega variable la cual sera verdader o 1
boolean Estado = true;
//Se agrega variable inicializada en 0
float TiempoAnterior = 0;
/* -----------------------------------------------------------------
------------------------- Configuracion Arduino --------------------
----------------------------------------------------------------- */
void setup() {
//Se inicializa comunicacion serial y el boton como una entrada
Serial.begin(9600);
pinMode(PIN_BOTON, INPUT);
//Condicional para que el los leds se enciendan uno a uno y se declaran como salidas
for (int i = 0; i <= CantidadLed; i++){
pinMode(PIN_LEDS[i], OUTPUT);
}
}
/* -----------------------------------------------------------------
---------------------------- Codigo Principal ----------------------
----------------------------------------------------------------- */
void loop() {
//Se agregan las funciones
ActualizarBoton();
ActualizarLed();
}
/* -----------------------------------------------------------------
-------------------------------- Funciones -------------------------
----------------------------------------------------------------- */
//Se crea la funcion del estado del boton que sirve para que cada vez
// que se oprima el boton cambie 0 a 1 y se muestre en el monitor serie la cual hara que los led
// se sigan encendiendo si estan en 1 o se quede quieto si esta en 0
void ActualizarBoton(){
if(digitalRead(PIN_BOTON)){
Estado = !Estado;
Serial.print("Cambio estado ");
Serial.println(Estado);
delay(400);
}
}
//Se crea la funcio actualizar led la cual sirve para que los led se enciendan de derecha a izquierda
// y se apaguen de derecha a izquierda
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;
}
}
}