//Se desea transmitir un valor numérico de 12 bits (0...4095) entre dos microcontroladores que
//está aislados mediante un optoacoplador. La mejor opción para realizar esto es generar una señal
//PWM cuyo ancho de pulso sea equivalente al valor numérico que se desea transmitir.
//Además, el optoacoplador soporta una señal con una frecuencia máxima de 500Hz.
//Se pide, generar el código en C para el microcontrolador ESP32 que reciba un valor numérico
//de 12bits por el puerto serie, y con este valor configure el ancho de pulso de la una señal
//PWM para que pueda ser transmitida por el optoacoplador al otro microcontrolador.
int valor = 0; //referencia inicializada a 0
const int ledChannel = 0; //canal del PWM
const int pin = 5; //pin que transmite el PWM
const int frequency = 500; //500 Hz de frecuencia
const int resolution = 12; //resolucion de 12 bits (de 0 a 4095)
void setup() {
Serial.begin(115200);
//configuro el PWM
ledcSetup(ledChannel, frequency, resolution);
ledcAttachPin(pin, ledChannel);
ledcWrite(ledChannel, 0); // 🔹 Asegurar que inicia en 0
Serial.println("PWM inicializado en 0");
}
void loop() {
if(Serial.available() > 0){
String input = Serial.readStringUntil('\n'); // Leer hasta nueva línea
int readRef = input.toInt(); // Convertir a entero
if(readRef >= 0 && readRef < 4095){ //aseguro que el valor esta entre 0 y 4095
valor = readRef;
ledcWrite(ledChannel, valor); //escribe ref en el PWM
Serial.print("Ancho de pulso de PWM actualizado: ");
Serial.println(valor); //compruebo si el PWM lo hace bien
}
else {
Serial.println("Valor fuera de rango (0-4095)"); // Mensaje si el valor está fuera de rango
}
}
}