舵机都自带驱动,ESP32+角度舵机+2个电位器,用Servo 库在loop 里直接循环完事
[C++] 纯文本查看 复制代码 #include <Servo.h>
// 定义引脚
#define SERVO_PIN 2 // 舵机信号引脚
#define SPEED_POT_PIN 34 // 速度控制电位器引脚(A0)
#define ANGLE_POT_PIN 35 // 角度控制电位器引脚(A1)
// 创建舵机对象
Servo myServo;
// 变量定义
int currentAngle = 0; // 当前舵机角度
int targetAngle = 0; // 目标角度
int step = 1; // 角度步进值
bool isIncreasing = true; // 角度增加/减少标志
void setup() {
Serial.begin(115200); // 初始化串口,用于调试
myServo.attach(SERVO_PIN); // 附加舵机到指定引脚
myServo.write(0); // 初始位置设为0度
// 设置电位器引脚为输入模式
pinMode(SPEED_POT_PIN, INPUT);
pinMode(ANGLE_POT_PIN, INPUT);
}
void loop() {
// 1. 读取电位器数值并映射
// 速度控制:电位器值(0-4095) -> 延迟时间(10-500ms),值越小速度越快
int speedValue = analogRead(SPEED_POT_PIN);
int delayTime = map(speedValue, 0, 4095, 10, 500);
// 角度控制:电位器值(0-4095) -> 最大摆动角度(0-180度)
int angleValue = analogRead(ANGLE_POT_PIN);
int maxAngle = map(angleValue, 0, 4095, 0, 180);
if (isIncreasing) {
targetAngle += step;
if (targetAngle >= maxAngle) {
isIncreasing = false;
}
} else {
targetAngle -= step;
if (targetAngle <= 0) {
isIncreasing = true;
}
}
myServo.write(targetAngle);
delay(delayTime);
} |