#include <Servo.h> // Librería para manejar servomotores
Servo myServo; // Creación de un objeto Servo
#define PIN_PWM 13 // Pin de salida PWM para control
unsigned char dutyCycle = 0; // Ciclo de trabajo inicial
void PWM_Init(unsigned char duty_init) {
pinMode(PIN_PWM, OUTPUT);
dutyCycle = duty_init;
}
void PWM_Set(unsigned char duty_conf) {
if (duty_conf > 10) {
duty_conf = 10;
}
dutyCycle = duty_conf;
Serial.print("PWM Duty: ");
Serial.println((int)dutyCycle);
}
void PWM_Work() {
static char div = 0;
div++;
if (div > dutyCycle) {
digitalWrite(PIN_PWM, LOW); // Apaga PWM si excede el duty
} else {
digitalWrite(PIN_PWM, HIGH); // Enciende PWM si está en duty
}
if (div >= 10) {
div = 0;
}
}
void setup() {
Serial.begin(9600); // Inicialización de la comunicación serial
// Inicialización del servomotor
myServo.attach(9); // Conectamos el servo al pin 9
myServo.write(90); // Posición inicial del servo (90°)
// Iniciar PWM con un ciclo de trabajo inicial
PWM_Init(5); // Iniciar PWM con un duty cycle del 50%
Serial.println("Iniciando control de velocidad para el servo...");
}
void loop() {
// Control gradual de la velocidad del servomotor
for (int i = 0; i <= 180; i += 18) {
myServo.write(i); // Cambia la posición del servomotor
Serial.print("Servo Posición: ");
Serial.println(i); // Muestra la posición en la consola serial
delay(1000); // Pausa para simular velocidad gradual
}
// Regresar la posición del servomotor a 0°
for (int i = 180; i >= 0; i -= 18) {
myServo.write(i);
Serial.print("Servo Posición: ");
Serial.println(i);
delay(1000);
}
PWM_Work(); // Continuar la señal PWM en cada iteración
}