#include <PWM.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Conecte el potenciómetro para la frecuencia de pwm1 al pin A0
int potPin1 = A0;
// Conecte el potenciómetro para el ciclo de trabajo de pwm1 al pin A1
int dutyCyclePin1 = A1;
// Conecte el potenciómetro para la frecuencia de pwm2 al pin A2
int potPin2 = A2;
// Conecte el potenciómetro para el ciclo de trabajo de pwm2 al pin A3
int dutyCyclePin2 = A3;
// Establecer los pines PWM
const int pwm1_pin = 9; //MASTER
const int pwm2_pin = 10; //SLAVE
void setup()
{
// LCD
lcd.init();
lcd.backlight();
// Inicializar PWM
InitTimersSafe();
SetPinFrequencySafe(pwm1_pin, 100);
SetPinFrequencySafe(pwm2_pin, 100);
bool success = SetPinFrequencySafe(pwm1_pin, 100);
if (success)
{
analogWrite(pwm1_pin, 127);
}
success = SetPinFrequencySafe(pwm2_pin, 100);
if (success)
{
analogWrite(pwm2_pin, 127); //Cambiar esto a 0 para desactivar el PWM2 hasta que el PWM1 esté encendido
}
}
void loop(){
int pot1 = analogRead(potPin1);
int frequency1 = map(pot1, 0, 1023, 0, 5); // Rango de frecuencia 400-500Hz para PWM1.
int dutycyclePot1 = analogRead(dutyCyclePin1);
int dutyCycle1 = map(dutycyclePot1, 0, 1023, 0, 255);
int pot2 = analogRead(potPin2);
int frequency2 = map(pot2, 0, 1023, 0, 500); // Rango de frecuencia 5000-10000Hz para PWM2.
int dutycyclePot2 = analogRead(dutyCyclePin2);
int dutyCycle2 = map(dutycyclePot2, 0, 1023, 0, 255);
// Establecer la frecuencia PWM1 (MASTER) leída del potenciómetro 1
SetPinFrequencySafe(pwm1_pin, frequency1);
// Establecer el ciclo de trabajo de PWM1 (MASTER) leído del potenciómetro de ciclo de trabajo 1
pwmWrite(pwm1_pin, dutyCycle1);
//analogWrite(9, dutyCycle1);
// Si PWM1 (MASTER) está encendido, ajuste la frecuencia y el ciclo de trabajo de PWM2 (SLAVE)
if (dutyCycle1 > 0){
// Establecer la frecuencia de PWM2 (SLAVE) leída del potenciómetro 2
SetPinFrequencySafe(pwm2_pin, frequency2);
// Establecer el ciclo de trabajo de PWM1 (SLAVE) leído del potenciómetro de trabajo 2
pwmWrite(pwm2_pin, dutyCycle2);
//analogWrite(10, dutyCycle2);
}
else{
// Desactive PWM2 (SLAVE) si PWM1 (MASTER) está apagado
pwmWrite(pwm2_pin, dutyCycle2);
//analogWrite(10, 0);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Freq-Master: " + String(frequency1) + " Hz");
lcd.setCursor(0, 1);
lcd.print("Ciclo-Master: " + String(map(dutyCycle1, 0, 255, 0, 100)) + " %");
lcd.setCursor(0, 2);
lcd.print("Freq-Slave: " + String(frequency2) + " Hz");
lcd.setCursor(0, 3);
lcd.print("Ciclo_Slave: " + String(map(dutyCycle2, 0, 255, 0, 100)) + " %");
// Retraso antes de la próxima lectura
delay(500);
}