/****************************************************************
* DESCRIPCION:
* El programa enciende el LED modulado con por pulsos PWM.
* .- se realiza en el setup() el ajuste de los parametros del canal PWM
* .- en loop() se cambia el parametro de % de ancho del pulso duty cycle
*
* MATERIALES:
* .- 1 dido LED
* .- 2 resistencia 330 Ohmmios
* .- Placa de prototipos y puentes para conexionado
* .- Cable USB compatible con la tarjeta
*
* Las resistencias dependerán de la tensión de alimentación al LED y al interruptor.
*
* calculo de la resistencia del iterruptor en montaje pull-up con una i = 1mA :
*
* Rinterruptor = ( V3.3 )/icc = 3.3 V/1 mA = 3.3 kOhmios
* Rinterruptor = ( V5.0 )/icc = 5.0 V/1 mA = 5.0 kOhmios la mas cercana es de 4.7kOhmmios
*
* Para ambas tensiones se puede elegir una resistencia de 4.7kOhmmios
* ********************************************************************
* NOTA .-
***********************************************************************/
#include <Arduino.h> // por defecto la incluye cundo la enlace con el programa principal
// Led a controlar por PWM LED
#define LED_PIN 14
const int espera = 50; // esperar 0,05 segundos
int ledPWMFrequency = 5000; // microsegundos
int ledPWMChanel = 0; // canal generador de pulsos
int ledPWMResolution = 8; // resolucion de la potencia modulada 256 partes a 100%
int ledPWMDutyCycle = 0; // longitud de pulso de potencia 0%
void setup() {
// habilita el puerto serire de comunicaciones serial usb
Serial.begin (115200);
delay(5000); // tiempo para abrir el monitor
Serial.println ( "ESP32 test con LED PWM" );
// CONFIGURA EL CANAL 0 DE 16 POSIBLES CON LA FERCUENCIA Y RESOLUCIÓN
ledcSetup (ledPWMChanel, ledPWMFrequency, ledPWMResolution);
// Asigna el PIN al canal ( se puede decir que lo conecta )
ledcAttachPin(LED_PIN, ledPWMChanel);
// Asigna el valor 0 de 256 posibles ( potencia ) al canal.
ledcWrite(ledPWMChanel, ledPWMDutyCycle);
}
void loop() {
int i ;
// con el bucle for se incrementa en 1 el valor del parametro DutyCycle
// y espera un tiempo = espera por cada incremento. Al superar 255 se
// i comienza de nuevo en i=0.
for ( i = 0; i < 250; i++){
Serial.printf ( "\n valor i -> %i \t duty -> %i ", i, ledPWMDutyCycle);
/* la funcion map( i , entradaMin , entradaMax , SalidaMin, SalidaMax )
* funcion lineal para adapdtar valores de entrada de variables con
* valores en un intervalo [Emin, Emax] a valores de salida en otro
* intervalo diferente [Smin, Smax].
* Eequivalente a y = f(i) = ( Smax-Smin)/(Emax-Emin) * i + C
*/
// incrementa el valor en y = f(i)
ledPWMDutyCycle = map ( i, 0, 255, 0, 255);
// Cambia el valor del canal 0 con ledPWMDutyCycle
ledcWrite(ledPWMChanel, ledPWMDutyCycle);
// Tiempo de espera
delay(espera);
}
}