#include <Arduino.h>
#define SERVO_PIN 0 // PB1 = pin 1
#define MIN_PULSE 500 // 0° pulse width (µs)
#define MAX_PULSE 2500 // 180° pulse width (µs)
#define SERVO_PERIOD 20000 // Servo signal period (20ms)
void setServoAngle(uint8_t angle) {
uint16_t pulseWidth = map(angle, 0, 180, MIN_PULSE, MAX_PULSE);
digitalWrite(SERVO_PIN, HIGH);
delayMicroseconds(pulseWidth);
digitalWrite(SERVO_PIN, LOW);
delayMicroseconds(SERVO_PERIOD - pulseWidth);
}
void setup() {
pinMode(SERVO_PIN, OUTPUT);
setServoAngle(0);
delay(1000);
}
const int sweep_speed = 15;
void loop() {
// Sweep from 0° to 180°
for (int angle = 0; angle <= 180; angle++) {
setServoAngle(angle);
delay(sweep_speed);
}
// Sweep back to 0°
for (int angle = 180; angle >= 0; angle--) {
setServoAngle(angle);
delay(sweep_speed);
}
}