/* -----------------------------------------------------------------
------------------------- Codigo MultiHardWare ---------------------
----------------------------------------------------------------- */
#if defined(ESP8266) // Condicional si se conecta una ESP 8266
#include <ESP8266WiFi.h> // Se agregan las librerias de la placa ESP8266
#include <ESP8266WiFiMulti.h> // Se agregan 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 este mensaje
#elif defined(ESP32) // Condicional si se conecta una ESP 32
#include <WiFi.h> // Se agregan las librerias de la placa ESP 32
#include <WiFiMulti.h> // Se agregan las librerias de la placa ESP32 para el wifi
WiFiMulti wifiMulti;
#pragma message "Codigo para ESP32!"// Si se detecta que es la placa ESP32 que muestre este 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?"
#endif // Fin del condicional
/* -----------------------------------------------------------------
-------------------------- Librerias y Objetos ---------------------
----------------------------------------------------------------- */
template<class T> inline Print &operator <<(Print &obj, T arg) {
obj.print(arg);
return obj;
}
#define PIN_LED 2 // Se definen las variables y los pines de conexion
#define PINPOT 34 // Se definen las variables y los pines de conexion
char opcion; // Toma la entrada del menù
/* -----------------------------------------------------------------
-------------------------- Configuracion Arduino ---------------------
----------------------------------------------------------------- */
void setup(){
Serial.begin(9600); // Se inicia el monitor serial
pinMode(PIN_LED, OUTPUT); //Se declara la variable como salida
pinMode (PINPOT, INPUT); // Se declara la variable como entrada
digitalWrite(PIN_LED, LOW); // Se declara que el led inicie apagado
delay(2000); // Se define el tiempo
}
/* -----------------------------------------------------------------
-------------------------- Codigo Princiapldg ---------------------
----------------------------------------------------------------- */
void loop(){
// Se le imprime el menu al usuario para que realice una seleccion .
Serial.println();
Serial.println("Ingrese uno de los sisguientes valores : ");
Serial.println("1(ControlDigital)");
Serial.println("2(Control Analogico)");
Serial.println("3(Control Led via Potencionmetro)");
Serial.println("4(Repetir Menu)");
Serial.println();
while(Serial.available() !=1){ // mientras no exista nigun registro espere
}
opcion = Serial.read(); //la opción elejida es la declarada por el usuario en el monitor serial.
if(opcion == '1'){ //Sì eligiò opciòn 1
ledDigital(PIN_LED, 500); //el led se enciende y se apaga con un delay de 500ms.
} else if(opcion == '2'){ //Sìno eligiò opciòn 2
ledAnalogico(PIN_LED, 10, 1); //El led incrementa su brillo de 1 en 1 en intervalos de 10ms
}else if(opcion =='3'){ //Sìno eligiò opciòn 3
ledPot(PIN_LED, PINPOT);//Se enciende el led segun el valor del potenciometro.
}else if(opcion =='4'){ //Sìno eligiò opciòn 4
Serial.println("Menu"); //Se repite el menú, ya que no existe la opción 4.
}else { //Sìno eligio las anteriores opciones
Serial.println("Error opciòn incorrecta");
delay(1000);
};
}
/* -----------------------------------------------------------------
------------------------ Funciones ---------------------
----------------------------------------------------------------- */
void ledDigital(int led, int pausa){ // Se inicia la funcion del led digital
digitalWrite(led, HIGH);
delay(pausa);
digitalWrite(led, LOW);
delay(pausa); //Se toma el valor del led en 1 o 0 con un tiempo de 500ms
}
void ledAnalogico(int led, int pausa, int inc){
for(int i=0; i <=255; i+=inc){ //Bucle donde se disminulle el valor de 255 a 0, de 1 en 1, en el mismo delay.
analogWrite(led, i);
delay(pausa); // Tiempio definido
}
}
void ledPot(int led, int pot){ // Se ejecuta la funcion del led controlado mediante el potenciometro
int readPot = analogRead(pot); // Se define el valor que se debe leer en pot
int light = map(readPot, 0, 4095, 0, 255); //Se reliza un mapeo donde se convierte el rango del potenciometro a 255.
analogWrite(led, light); // Se lee el valor y se enciende el led segun corresponda
Serial << "Valor Pot: " <<readPot << "\n" << "Valor Led: " << light << "\n\n"; // Impresion ordenada de las variables y sus valores
delay(200); // Se detiene la ejecucion en el tiempo asignado ms
}