/**********************************************************
Este código simula el control de un motor CC mediante el uso
de un puente H.
El puente H recibe dos datos desde el ESP32:
- Sentido de giro (0-1) mediante pinSentido
- Porcentaje de tensión entregada mediante una señal PWM.
Se gobierna con el dutyCycle (0-255) con pinPWM.
************************************************************/
//#include <M5Core2.h>
// En lugar de definir constantes, utilizo define, ya que así no ocupo memoria del micro
// Wokwi está actualizado a la versión 3.X.X (este codigo también)
// https://docs.espressif.com/projects/arduino-esp32/en/latest/api/ledc.html
#define pinPWM 14 // Pin cuya salida es la señal PWM
#define pinSentido 13 // Pin cuya salida designa el sentido de giro
#define frequency 5000 // Hz
#define resolution 8 // Resolucion en bits (de 1 a 15) normalmente se utilizan 8
// ya que así el duty cycle es un numero en el rango 0-255
void setup() {
//M5.begin();
pinMode(pinSentido, OUTPUT);
digitalWrite(pinSentido, LOW);
ledcAttach(pinPWM, frequency, resolution);
}
void loop() {
// Incrementar el ciclo de trabajo gradualmente para aumentar la intensidad del LED
digitalWrite(pinSentido, !digitalRead(pinSentido));
for (int dutyCycle = 0; dutyCycle <= 255; dutyCycle++) {
ledcWrite(pinPWM, dutyCycle); // Asigno el dutyCycle al canal PWM
delay(10); // espero 10ms
}
// Disminuir el ciclo de trabajo gradualmente para reducir la intensidad del LED
for (int dutyCycle = 255; dutyCycle >= 0; dutyCycle--) {
ledcWrite(pinPWM, dutyCycle);
delay(10);
}
}