/* -----------------------------------------------------------------
------------------------- 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;
}
//Igualmente al ejercicio anterior lo que nos define esta seccion es sobrecargar el operador//
//El print imprime diferentes tipos de datos en un objeto como monitor serial//
/* -----------------------------------------------------------------
---------------- Declaracion de Variables y constantes -------------
----------------------------------------------------------------- */
#define PIN_BUTTON 13
//En esta parte definimos varias constantes y variables en este caso el 13 representa el pin al que esta conectado el boton//
#define PIN_LED1 4
// El numero 4 quiere decir el pin conectado a nuestro LED//
int ledState = 0;
// Esa variable nos guardara el estado del LED sea encendido o apagado//
int newButtonState = 0;
// Nos gurada el estado del boton sea pulsado o no pulsado//
int oldButtonState = 0;
// Nos mantiene el estado anterior del boton//
/* -----------------------------------------------------------------
------------------------- Configuracion Arduino --------------------
----------------------------------------------------------------- */
void setup() {
Serial.begin(9600);
// En esta parte iniciamos la comunicacion serial a 9600//
pinMode(PIN_BUTTON, INPUT);
// Procedemos a configurar los pines INPUT como la entrada//
pinMode(PIN_LED1, OUTPUT);
//Procedemos a configurar los pines OUTPUT como la salida//
digitalWrite(PIN_LED1, ledState);
//El estado del led se establece segun el valor y espera un corto periodo de tiempo//
delay(100);
}
/* -----------------------------------------------------------------
---------------------------- Codigo Principal ----------------------
----------------------------------------------------------------- */
void loop() {
fnControlButton();
}
// En la funcion loop llamamos la funcion fnControlButton
void fnControlButton() {
newButtonState = digitalRead(PIN_BUTTON);
// El paso a realizar por la funcion es leer el estado del boton y lo almacena utilizando el digitalRead//
// Compara el estado anterior del boton
if(newButtonState != oldButtonState){
oldButtonState = newButtonState;
// En caso de cambiar lo actualiza con el nuevo estado//
if (newButtonState == LOW){
ledState = !ledState;
// En este caso si el boton esta pulsado LOW cambiara el estado del LED utilizando la negacion ! //
digitalWrite(PIN_LED1, ledState);
// Seguidamente lo establece con el digitalWrite que utilizamos//
// Esto lo que hara es alternar el estado del Led entre encendido y apagado//
}
}
delay(100);
// Al final del fnControlButton agregamos un retraso 100 para evitar lecturas y cambios de estado por el boton//
}