Buenas, estoy intentando variar la frecuencia de un PWM con un potenciómetro, pero quiero que la variación la haga de 10hz en 10hz .
Partiendo de este código que hice para generar la PWM con su potenciometro:
#include <TimerOne.h>
const int potFreqPin1 = A0; // Pin analógico para el potenciómetro de frecuencia del pin 11
int freq1 = 0; // Variable para almacenar la frecuencia del pin 11
int dutyCycle1 = 50; // Duty cycle fijo para el pin 11
unsigned long periodMicros1 = 0; // Variable para almacenar el período en microsegundos del pin 11
void setup() {
pinMode(11, OUTPUT); // Configurar el pin 11 como salida para la PWM
Timer1.initialize(); // Inicializar Timer1 para la PWM del pin 11
Timer1.pwm(11, 512);
Timer1.attachInterrupt(timerISR1);
}
void loop() {
// Leer el valor del potenciómetro de frecuencia para el pin 11 y mapearlo al rango deseado
int potFreqValue1 = analogRead(potFreqPin1);
freq1 = map(potFreqValue1, 0, 1023, 10, 3200);
// Calcular el período en microsegundos
periodMicros1 = 1000000 / freq1;
// Configurar el período y el duty cycle del Timer1 (pin 11)
Timer1.setPeriod(periodMicros1 - 1); // Restar 1 para ajustar la frecuencia
Timer1.setPwmDuty(11, periodMicros1 * dutyCycle1 / 100);
}
// Función de interrupción del temporizador 1 (pin 11)
void timerISR1() {
static boolean state1 = HIGH;
digitalWrite(11, state1);
state1 = !state1;
}
Hice este otro código para variar la frecuencia de 10hz en 10hz, pero no me funciona, podéis por favor ver el código y guiarme en la solución:
#include <TimerOne.h>
const int potFreqPin1 = A0;
int freq1 = 0;
int dutyCycle1 = 50;
unsigned long periodMicros1 = 0;
int lastPotValue1 = 0;
int currentPotValue1 = 0;
void setup() {
pinMode(11, OUTPUT); // Configurar el pin 11 como salida para la PWM
Timer1.initialize(); // Inicializar Timer1 para la PWM del pin 11
Timer1.pwm(11, 512);
Timer1.attachInterrupt(timerISR1);
void loop() {
currentPotValue1 = analogRead(potFreqPin1);
if (currentPotValue1 > lastPotValue1) {
freq1 += 10; // Aumentar la frecuencia en 10Hz
} else if (currentPotValue1 < lastPotValue1) {
freq1 -= 10; // Disminuir la frecuencia en 10Hz
}
freq1 = constrain(freq1, 10, 3200); // Limitar la frecuencia dentro del rango válido
lastPotValue1 = currentPotValue1;
periodMicros1 = 1000000 / freq1;
// Configurar el período y el duty cycle del Timer1 (pin 11)
Timer1.setPeriod(periodMicros1 - 1); // Restar 1 para ajustar la frecuencia
Timer1.setPwmDuty(11, periodMicros1 * dutyCycle1 / 100);
}
// Función de interrupción del temporizador 1 (pin 11)
void timerISR1() {
static boolean state1 = HIGH;
digitalWrite(11, state1);
state1 = !state1;
}