Yo escribí el siguiente código para hacer que un led encienda y apague lentamente cunado no no es posible conectarlo a un puerto pmw.
int Max = 25;
void setup() {
// Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
Incrementa(LED_BUILTIN, Max);
Decrementa(LED_BUILTIN, Max);
}
void Incrementa(int Led, int Max) {
int On = 0;
int Off = Max;
for (int i = 0; i < Max; i++) {
if (On < Max) {
On++;
} else {
On = 0;
}
if (Off > 0 ) {
Off--;
} else {
Off = Max;
}
digitalWrite(Led, HIGH);
delay(On);
digitalWrite(Led, LOW);
delay(Off);
}
}
void Decrementa(int Led, int Max) {
int On = 0;
int Off = Max;
for (int i = 0; i < Max; i++) {
if (On > 0) {
On--;
} else {
On = Max;
}
if (Off < Max ) {
Off++;
} else {
Off = 0;
}
digitalWrite(Led, HIGH);
delay(On);
digitalWrite(Led, LOW);
delay(Off);
}
}
Luego le pase el código a ChatGpt para que lo mejorara. Esto fue lo que me respondió y el código que me dio.
Este código logra encender y apagar lentamente un LED, pero su eficiencia podría ser mejorada. Una forma de hacerlo sería eliminando la duplicidad de código en las funciones «Incrementa» y «Decrementa». Se podría crear una sola función que tome un argumento adicional indicando si la intensidad del LED debe aumentar o disminuir. De esta manera, se reduciría la cantidad de código duplicado y se mejoraría la legibilidad del código.
ChatGpt
//Define el máximo valor de intensidad del LED
int Max = 25;
void setup() {
//Configura el pin del LED como salida
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
//Fade el LED aumentando la intensidad
fadeLED(LED_BUILTIN, Max, true);
//Fade el LED disminuyendo la intensidad
fadeLED(LED_BUILTIN, Max, false);
}
void fadeLED(int Led, int Max, boolean increase) {
//Determina el valor inicial de On y Off dependiendo si se está aumentando o disminuyendo la intensidad
int On = increase ? 0 : Max;
int Off = increase ? Max : 0;
//Determina el valor del incremento dependiendo si se está aumentando o disminuyendo la intensidad
int step = increase ? 1 : -1;
for (int i = 0; i < Max; i++) {
//Incrementa o decrementa el valor de On y Off
On += step;
Off -= step;
//Enciende el LED
digitalWrite(Led, HIGH);
//Espera el tiempo definido por el valor de On
delay(On);
//Apaga el LED
digitalWrite(Led, LOW);
//Espera el tiempo definido por el valor de Off
delay(Off);
//Detiene la ejecución del bucle si el valor de On es igual a 0 o Max
if (On == 0 || On == Max) {
break;
}
}
}