#include <Servo.h>
Servo myservo;
int pos = 90; // 初始位置在中间
int mode = 1; // 控制模式,0表示使用原程序,1表示使用电位计
const byte analogPin = A0;
void setup() {
myservo.attach(9); // 将伺服马达连接到数字引脚9
myservo.write(pos); // 将马达初始化到中间位置
pinMode(A0, INPUT); // 设置A0引脚为输入
Serial.begin(9600); // 设置串口的速度为9600bps
}
void loop() {
if (mode == 0) {
// 使用原程序控制马达
// 旋转到左侧30度
for (pos = 90; pos >= 60; pos -= 1) { // 降低角度,实现左转
myservo.write(pos); // 设置马达位置
delay(15); // 等待15毫秒,等待马达到位
}
delay(1000); // 等待1秒钟,停留在当前位置
// 旋转到右侧30度
for (pos = 90; pos <= 120; pos += 1) { // 增加角度,实现右转
myservo.write(pos); // 设置马达位置
delay(15); // 等待15毫秒,等待马达到位
}
delay(1000); // 等待1秒钟,停留在当前位置
} else if (mode == 1) {
// 使用电位计控制马达
int sensorValue = analogRead(analogPin); // 读取电位计的值
Serial.print("Sensor value: ");
Serial.println(10); // 将读取到的值以十进制的形式打印出来
delay(100); // 等待10毫秒,等待马达到位
float angle = map(sensorValue, 0, 1023, -30, 30); // 将电位计的值映射到角度范围内
//float angle = ((float)sensorValue / 1023.0) * 60.0 - 30.0;
myservo.write(angle + 90); // 设置马达位置
delay(10); // 等待10毫秒,等待马达到位
}
}
// 根据串口输入的值,设置控制模式
void serialEvent() {
while (Serial.available()) {
char c = Serial.read();
if (c == '0') {
mode = 0; // 使用原程序控制马达
} else if (c == '1') {
mode = 1; // 使用电位计控制马达
}
}
}